使用模型分析框架优化模型

模型分析框架为Data Science Workspace中的数据科学家提供了工具,以便根据实验快速明智地选择最佳机器学习模型。 该框架将提高机器学习工作流的速度和有效性,并提高数据科学家的易用性。 这是通过为每个机器学习算法类型提供默认模板来协助模型调整来实现的。 最终结果允许数据科学家和公民数据科学家为其最终客户做出更好的模型优化决策。

什么是量度?

在实施和培训模型后,数据科学家的下一步工作是了解模型表现如何。 可使用各种量度来确定模型与其他量度相比的有效性。 使用的一些量度示例包括:

  • 分类准确性
  • 曲线下的区域
  • 混淆矩阵
  • 分类报告

配置方法代码

目前,模型分析框架支持以下运行时:

可以在recipes下的experience-platform-dsw-reference存储库中找到配方代码示例。 在本教程中,将引用此存储库中的特定文件。

Scala scala

可通过两种方式将量度引入到配方中。 一种是使用SDK提供的默认评估指标,另一种是编写自定义评估指标。

Scala的默认评估指标

默认评估作为分类算法的一部分进行计算。 以下是当前实施的评估器的一些默认值:

计算器类
evaluation.class
DefaultBinaryClassificationEvaluator
com.adobe.platform.ml.impl.DefaultBinaryClassificationEvaluator
DefaultMultiClassificationEvaluator
com.adobe.platform.ml.impl.DefaultMultiClassificationEvaluator
RecommendationsEvaluator
com.adobe.platform.ml.impl.RecommendationsEvaluator

可以在recipe文件夹的application.properties文件中的方法中定义计算器。 启用DefaultBinaryClassificationEvaluator的示例代码如下所示:

evaluation.class=com.adobe.platform.ml.impl.DefaultBinaryClassificationEvaluator
evaluation.labelColumn=label
evaluation.predictionColumn=prediction
training.evaluate=true

启用计算器类后,默认情况下将在训练期间计算多个量度。 通过将以下行添加到application.properties,可以显式声明默认量度。

evaluation.metrics.com=com.adobe.platform.ml.impl.Constants.DEFAULT
NOTE
如果未定义该量度,则默认量度将处于活动状态。

可以通过更改evaluation.metrics.com的值来启用特定量度。 在以下示例中,启用了F分数量度。

evaluation.metrics=com.adobe.platform.ml.impl.Constants.FSCORE

下表列出了每个类的默认度量。 用户还可以使用evaluation.metric列中的值来启用特定量度。

evaluator.class
默认量度
evaluation.metric
DefaultBinaryClassificationEvaluator
— 精确度
— 召回
— 混淆矩阵
-F分数
— 精确度
— 接收器操作特性下的接收器操作特性
— 区域
-PRECISION
-RECALL
-CONFUSION_MATRIX
-FSCORE
-ACCURACY
-ROC
-AUROC
DefaultMultiClassificationEvaluator
— 精确度
— 召回
— 混淆矩阵
-F分数
— 精确度
— 接收器操作特性下的接收器操作特性
— 区域
-PRECISION
-RECALL
-CONFUSION_MATRIX
-FSCORE
-ACCURACY
-ROC
-AUROC
RecommendationsEvaluator
-Mean Average Precision (MAP)
— 规范化的贴现累积增益
-Mean Reciprocal Rank
-Metric K
-MEAN_AVERAGE_PRECISION
-NDCG
-MRR
-METRIC_K

Scala的自定义评估指标

可通过在Evaluator.scala文件中扩展MLEvaluator.scala的接口来提供自定义计算器。 在示例Evaluator.scala文件中,我们定义了自定义split()evaluate()函数。 我们的split()函数以8:2的比率随机拆分数据,我们的evaluate()函数定义和返回3个量度:MAPE、MAE和RMSE。

IMPORTANT
对于MLMetric类,创建新MLMetric时不要对valueType使用"measures",否则自定义评估指标表中不会填充该指标。
执行操作: metrics.add(new MLMetric("MAPE", mape, "double"))
不是: metrics.add(new MLMetric("MAPE", mape, "measures"))

一旦在方法中定义了,下一步就是在方法中启用它。 此操作在项目的resources文件夹中的application.properties文件中完成。 此处,evaluation.class设置为Evaluator.scala中定义的Evaluator

evaluation.class=com.adobe.platform.ml.Evaluator

在Data Science Workspace中,用户将能够在试验页面的“评估指标”选项卡中看到见解。

Python/Tensorflow pythontensorflow

截至目前,Python或Tensorflow没有默认评估指标。 因此,要获取Python或Tensorflow的评估指标,您需要创建一个自定义评估指标。 可以通过实现Evaluator类来完成此操作。

Python的自定义评估指标

对于自定义评估量度,需要为评估器实施两种主要方法: split()evaluate()

对于Python,将在Evaluator类的evaluator.py中定义这些方法。 按照evaluator.py链接查看Evaluator的示例。

在Python中创建评估量度需要用户实施evaluate()split()方法。

evaluate()方法返回度量对象,该度量对象包含属性为namevaluevalueType的度量对象的数组。

split()方法的目的是输入数据并输出训练和测试数据集。 在我们的示例中,split()方法使用DataSetReader SDK输入数据,然后通过删除不相关的列来清理数据。 从那里,利用数据中的现有原始功能创建其他功能。

split()方法应返回训练和测试数据流,然后pipeline()方法使用该数据流来训练和测试ML模型。

Tensorflow的自定义评估指标

对于Tensorflow,与Python类似,需要实现Evaluator类中的方法evaluate()split()。 对于evaluate(),应返回split()的量度,同时返回训练数据集和测试数据集。

from ml.runtime.python.Interfaces.AbstractEvaluator import AbstractEvaluator

class Evaluator(AbstractEvaluator):
    def __init__(self):
       print ("initiate")

    def evaluate(self, data=[], model={}, config={}):

        return metrics

    def split(self, config={}):

       return 'train', 'test'

R r

截至目前,R没有默认的评估指标。因此,要获取R的评估指标,您需要将applicationEvaluator类定义为方法的一部分。

R的自定义评估指标

applicationEvaluator的主要用途是返回包含量度的键值对的JSON对象。

applicationEvaluator.R可以用作示例。 在此示例中,applicationEvaluator被拆分为三个熟悉的部分:

  • 加载数据
  • 数据准备/功能工程
  • 检索已保存的模型并评估

首先从retail.config.json中定义的源将数据加载到数据集。 从那里,数据被清理和工程化以适合机器学习模型。 最后,利用该模型对数据集进行预测,根据预测值和实际值计算指标。 在这种情况下,在metrics对象中定义和返回MAPE、MAE和RMSE。

使用预建量度和可视化图表

Sensei Model Insights Framework将为每种类型的机器学习算法支持一个默认模板。 下表显示了常见的高级机器学习算法类以及相应的评估指标和可视化图表。

ML算法类型
评估指标
可视化
回归
- RMSE
- MAPE
- MASE
- MAE
预测值与实际值叠加曲线
二进制分类
— 混淆矩阵
— 精确召回率
— 精确度
-F分数(具体为F1,F2)
- AUC
- ROC
ROC曲线和混淆矩阵
多类分类
— 混淆矩阵
— 对于每个类:
— 精确召回率
- F分数(具体为F1、F2)
ROC曲线和混淆矩阵
群集(包含基本真实值)
- NMI(归一化互信息分数)、AMI(经调整的互信息分数)
- RI(兰德指数)、ARI(经调整的兰德指数)
— 一致性分数、完整性分数和V-measure
- FMI(福克斯 — 马洛指数)
— 纯度
- Jaccard指数
显示反映落于簇内的数据点的相对簇大小的簇和质心的簇图
群集(不含地面真实值)
— 惯性
— 剪影系数
-CHI(Calinski-Harabaz指数)
-DBI(Davies-Bouldin指数)
-Dunn指数
显示反映落于簇内的数据点的相对簇大小的簇和质心的簇图
推荐
-Mean Average Precision (MAP)
— 规范化的贴现累积增益
-Mean Reciprocal Rank
-Metric K
待定
TensorFlow用例
张量流模型分析(TFMA)
深度比较神经网络模型比较/可视化
其他/错误捕获机制
模型作者定义的自定义量度逻辑(以及相应的评估图表)。 在模板不匹配的情况下正常处理错误
具有评估量度的键值对的表
recommendation-more-help
cc79fe26-64da-411e-a6b9-5b650f53e4e9