使用模型分析框架优化模型
模型分析框架为Data Science Workspace中的数据科学家提供了工具,以便根据实验快速明智地选择最佳机器学习模型。 该框架将提高机器学习工作流的速度和有效性,并提高数据科学家的易用性。 这是通过为每个机器学习算法类型提供默认模板来协助模型调整来实现的。 最终结果允许数据科学家和公民数据科学家为其最终客户做出更好的模型优化决策。
什么是量度?
在实施和培训模型后,数据科学家的下一步工作是了解模型表现如何。 可使用各种量度来确定模型与其他量度相比的有效性。 使用的一些量度示例包括:
- 分类准确性
- 曲线下的区域
- 混淆矩阵
- 分类报告
配置方法代码
目前,模型分析框架支持以下运行时:
可以在recipes
下的experience-platform-dsw-reference存储库中找到配方代码示例。 在本教程中,将引用此存储库中的特定文件。
Scala scala
可通过两种方式将量度引入到配方中。 一种是使用SDK提供的默认评估指标,另一种是编写自定义评估指标。
Scala的默认评估指标
默认评估作为分类算法的一部分进行计算。 以下是当前实施的评估器的一些默认值:
evaluation.class
com.adobe.platform.ml.impl.DefaultBinaryClassificationEvaluator
com.adobe.platform.ml.impl.DefaultMultiClassificationEvaluator
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
可以通过更改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 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。
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()
方法返回度量对象,该度量对象包含属性为name
、value
和valueType
的度量对象的数组。
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将为每种类型的机器学习算法支持一个默认模板。 下表显示了常见的高级机器学习算法类以及相应的评估指标和可视化图表。
- MAPE
- MASE
- MAE
— 精确召回率
— 精确度
-F分数(具体为F1,F2)
- AUC
- ROC
— 对于每个类:
— 精确召回率
- F分数(具体为F1、F2)
- RI(兰德指数)、ARI(经调整的兰德指数)
— 一致性分数、完整性分数和V-measure
- FMI(福克斯 — 马洛指数)
— 纯度
- Jaccard指数
— 剪影系数
-CHI(Calinski-Harabaz指数)
-DBI(Davies-Bouldin指数)
-Dunn指数
— 规范化的贴现累积增益
-Mean Reciprocal Rank
-Metric K