评估数据帧分析 API
编辑评估数据帧分析 API编辑
评估带注释索引的数据帧分析。
请求编辑
POST _ml/data_frame/_evaluate
描述编辑
该 API 将各种类型的机器学习特征的常用评估指标打包在一起。这专为在数据帧分析创建的索引上使用而设计。评估需要同时存在真实值字段和分析结果字段。
请求正文编辑
数据帧分析评估资源编辑
异常值检测评估对象编辑
异常值检测评估异常值检测分析的结果,该分析输出每个文档是异常值的概率。
-
actual_field
- (必填,字符串)包含
真实值
的索引
字段。此字段的数据类型可以是布尔值或整数。如果数据类型是整数,则该值必须为0
(假)或1
(真)。 -
predicted_probability_field
- (必填,字符串)
索引
的字段,用于定义项目属于或不属于相关类的概率。它是包含分析结果的字段。 -
metrics
-
(可选,对象)指定用于评估的指标。如果未指定指标,则默认返回以下内容
-
auc_roc
(include_curve
: false), -
precision
(at
: [0.25, 0.5, 0.75]), -
recall
(at
: [0.25, 0.5, 0.75]), -
confusion_matrix
(at
: [0.25, 0.5, 0.75])。-
auc_roc
- (可选,对象)AUC ROC(受试者工作特征曲线下面积)分数以及可选的曲线。默认值为 {"include_curve": false}。
-
confusion_matrix
- (可选,对象)设置计算指标(
tp
- 真阳性,fp
- 假阳性,tn
- 真阴性,fn
- 假阴性)时异常值分数的不同阈值。默认值为 {"at": [0.25, 0.50, 0.75]}。 -
precision
- (可选,对象)设置计算指标时异常值分数的不同阈值。默认值为 {"at": [0.25, 0.50, 0.75]}。
-
recall
- (可选,对象)设置计算指标时异常值分数的不同阈值。默认值为 {"at": [0.25, 0.50, 0.75]}。
-
-
回归评估对象编辑
回归评估评估回归分析的结果,该分析输出值的预测。
-
actual_field
- (必填,字符串)包含
真实值
的索引
字段。此字段的数据类型必须为数值。 -
predicted_field
- (必填,字符串)
索引
中包含预测值的字段,换句话说,就是回归分析的结果。 -
metrics
-
(可选,对象)指定用于评估的指标。有关
mse
、msle
和huber
的更多信息,请参阅关于回归损失函数的 Jupyter 笔记本。如果未指定指标,则默认返回以下内容-
mse
, -
r_squared
, -
huber
(delta
: 1.0)。-
mse
- (可选,对象)预测值与实际(
真实值
)值之间的平均平方差。有关更多信息,请阅读此维基百科文章。 -
msle
-
(可选,对象)预测值的对数与实际(
真实值
)值的对数之间的平均平方差。-
offset
- (可选,双精度)定义从最小化二次误差切换到最小化二次对数误差的转换点。默认为
1
。
-
-
huber
-
(可选,对象)伪 Huber 损失函数。有关更多信息,请阅读此维基百科文章。
-
delta
- (可选,双精度)对于远小于 delta 的值,近似为 1/2 (prediction - actual)2,对于远大于 delta 的值,近似为斜率为 delta 的直线。默认为
1
。Delta 必须大于0
。
-
-
r_squared
- (可选,对象)因变量中可从自变量预测的方差比例。有关更多信息,请阅读此维基百科文章。
-
-
分类评估对象编辑
分类评估评估分类分析的结果,该分析输出一个预测,用于识别每个文档所属的类别。
-
actual_field
- (必填,字符串)包含
真实值
的索引
字段。此字段的数据类型必须为分类。 -
predicted_field
- (可选,字符串)
索引
中包含预测值的字段,换句话说,就是分类分析的结果。 -
top_classes_field
- (可选,字符串)
索引
的字段,它是文档数组,格式为{ "class_name": XXX, "class_probability": YYY }
。此字段必须在映射中定义为nested
。 -
metrics
-
(可选,对象)指定用于评估的指标。如果未指定指标,则默认返回以下内容
-
accuracy
, -
multiclass_confusion_matrix
, -
precision
, -
recall
.-
accuracy
- (可选,对象)预测的准确率(按类别和总体)。
-
auc_roc
-
(可选,对象)AUC ROC(受试者工作特征曲线下面积)分数以及可选的曲线。它是针对被视为阳性的特定类别(作为“class_name”提供)计算的。
-
class_name
- (必填,字符串)在 AUC ROC 计算期间被视为阳性的唯一类别的名称。其他类别被视为阴性(“一对多”策略)。所有评估的文档都必须在其顶级类别列表中包含
class_name
。 -
include_curve
- (可选,布尔值)是否应在分数之外返回曲线。默认值为 false。
-
-
multiclass_confusion_matrix
-
(可选,对象)多类别混淆矩阵。
-
size
- (可选,双精度)指定多类别混淆矩阵的大小。默认为
10
,这将生成大小为 10x10 的矩阵。
-
-
precision
- (可选,对象)预测的精确率(按类别和平均值)。
-
recall
- (可选,对象)预测的召回率(按类别和平均值)。
-
-
示例编辑
异常值检测编辑
response = client.ml.evaluate_data_frame( body: { index: 'my_analytics_dest_index', evaluation: { outlier_detection: { actual_field: 'is_outlier', predicted_probability_field: 'ml.outlier_score' } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "my_analytics_dest_index", "evaluation": { "outlier_detection": { "actual_field": "is_outlier", "predicted_probability_field": "ml.outlier_score" } } }
该 API 返回以下结果
{ "outlier_detection": { "auc_roc": { "value": 0.92584757746414444 }, "confusion_matrix": { "0.25": { "tp": 5, "fp": 9, "tn": 204, "fn": 5 }, "0.5": { "tp": 1, "fp": 5, "tn": 208, "fn": 9 }, "0.75": { "tp": 0, "fp": 4, "tn": 209, "fn": 10 } }, "precision": { "0.25": 0.35714285714285715, "0.5": 0.16666666666666666, "0.75": 0 }, "recall": { "0.25": 0.5, "0.5": 0.1, "0.75": 0 } } }
回归编辑
response = client.ml.evaluate_data_frame( body: { index: 'house_price_predictions', query: { bool: { filter: [ { term: { 'ml.is_training' => false } } ] } }, evaluation: { regression: { actual_field: 'price', predicted_field: 'ml.price_prediction', metrics: { r_squared: {}, mse: {}, msle: { offset: 10 }, huber: { delta: 1.5 } } } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "house_price_predictions", "query": { "bool": { "filter": [ { "term": { "ml.is_training": false } } ] } }, "evaluation": { "regression": { "actual_field": "price", "predicted_field": "ml.price_prediction", "metrics": { "r_squared": {}, "mse": {}, "msle": {"offset": 10}, "huber": {"delta": 1.5} } } } }
来自数据帧分析回归分析的输出目标索引。 |
|
在此示例中,为回归分析定义了测试/训练拆分( |
|
实际房价的真实值。为了评估结果,这是必需的。 |
|
回归分析计算出的房价预测值。 |
以下示例计算训练误差
response = client.ml.evaluate_data_frame( body: { index: 'student_performance_mathematics_reg', query: { term: { 'ml.is_training' => { value: true } } }, evaluation: { regression: { actual_field: 'G3', predicted_field: 'ml.G3_prediction', metrics: { r_squared: {}, mse: {}, msle: {}, huber: {} } } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "student_performance_mathematics_reg", "query": { "term": { "ml.is_training": { "value": true } } }, "evaluation": { "regression": { "actual_field": "G3", "predicted_field": "ml.G3_prediction", "metrics": { "r_squared": {}, "mse": {}, "msle": {}, "huber": {} } } } }
在此示例中,为回归分析定义了测试/训练拆分( |
|
包含实际学生表现的真实值的字段。为了评估结果,这是必需的。 |
|
包含回归分析计算出的学生表现预测值的字段。 |
下一个示例计算测试误差。与上一个示例相比,唯一的区别是这次将 ml.is_training
设置为 false
,因此查询将训练拆分从评估中排除。
response = client.ml.evaluate_data_frame( body: { index: 'student_performance_mathematics_reg', query: { term: { 'ml.is_training' => { value: false } } }, evaluation: { regression: { actual_field: 'G3', predicted_field: 'ml.G3_prediction', metrics: { r_squared: {}, mse: {}, msle: {}, huber: {} } } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "student_performance_mathematics_reg", "query": { "term": { "ml.is_training": { "value": false } } }, "evaluation": { "regression": { "actual_field": "G3", "predicted_field": "ml.G3_prediction", "metrics": { "r_squared": {}, "mse": {}, "msle": {}, "huber": {} } } } }
分类编辑
response = client.ml.evaluate_data_frame( body: { index: 'animal_classification', evaluation: { classification: { actual_field: 'animal_class', predicted_field: 'ml.animal_class_prediction', metrics: { multiclass_confusion_matrix: {} } } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "animal_classification", "evaluation": { "classification": { "actual_field": "animal_class", "predicted_field": "ml.animal_class_prediction", "metrics": { "multiclass_confusion_matrix" : {} } } } }
API 返回以下结果
{ "classification" : { "multiclass_confusion_matrix" : { "confusion_matrix" : [ { "actual_class" : "cat", "actual_class_doc_count" : 12, "predicted_classes" : [ { "predicted_class" : "cat", "count" : 12 }, { "predicted_class" : "dog", "count" : 0 } ], "other_predicted_class_doc_count" : 0 }, { "actual_class" : "dog", "actual_class_doc_count" : 11, "predicted_classes" : [ { "predicted_class" : "dog", "count" : 7 }, { "predicted_class" : "cat", "count" : 4 } ], "other_predicted_class_doc_count" : 0 } ], "other_actual_class_count" : 0 } } }
分析尝试预测的实际类别的名称。 |
|
索引中属于 |
|
此对象包含预测类别列表以及与该类别关联的预测数量。 |
|
数据集中被正确识别为猫的猫的数量。 |
|
数据集中被错误分类为狗的猫的数量。 |
|
被分类为未列为 |
response = client.ml.evaluate_data_frame( body: { index: 'animal_classification', evaluation: { classification: { actual_field: 'animal_class', metrics: { auc_roc: { class_name: 'dog' } } } } } ) puts response
POST _ml/data_frame/_evaluate { "index": "animal_classification", "evaluation": { "classification": { "actual_field": "animal_class", "metrics": { "auc_roc" : { "class_name": "dog" } } } } }
API 返回以下结果
{ "classification" : { "auc_roc" : { "value" : 0.8941788639536681 } } }