如何通过h2o.performance了解H2OModelMetrics对象的指标
How to understand the metrics of H2OModelMetrics Object through h2o.performance
使用 h2o.randomForest
创建模型后,然后使用:
perf <- h2o.performance(model, test)
print(perf)
我得到以下信息(值 H2OModelMetrics
对象)
H2OBinomialMetrics: drf
MSE: 0.1353948
RMSE: 0.3679604
LogLoss: 0.4639761
Mean Per-Class Error: 0.3733908
AUC: 0.6681437
Gini: 0.3362873
Confusion Matrix (vertical: actual; across: predicted)
for F1-optimal threshold:
0 1 Error Rate
0 2109 1008 0.323388 =1008/3117
1 257 350 0.423394 =257/607
Totals 2366 1358 0.339689 =1265/3724
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.080124 0.356234 248
2 max f2 0.038274 0.515566 330
3 max f0point5 0.173215 0.330006 131
4 max accuracy 0.288168 0.839957 64
5 max precision 0.941437 1.000000 0
6 max recall 0.002550 1.000000 397
7 max specificity 0.941437 1.000000 0
8 max absolute_mcc 0.113838 0.201161 195
9 max min_per_class_accuracy 0.071985 0.621087 262
10 max mean_per_class_accuracy 0.078341 0.626921 251
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)`
or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
我过去常常查看灵敏度(召回率)和特异性来比较我的预测模型的质量,但是根据提供的信息,我无法理解这些指标。根据以上信息,我如何评估我的预测质量?
如果我使用混淆矩阵计算此类指标,我得到:sens=0.58
、spec=0.68
与提供的信息不同。
是否有任何方法可以像我们使用 caret
包中的 confusionMatrix
那样获取这些值?
对我来说,这个指标更直观:
比 logLoss
公制。
h2o 中的二项式分类模型 return 预测为“1”的概率 (p
)(它们还会冗余地告诉您它为“0”的概率",即 1-p
).
要使用此模型,您必须决定截止值。例如。你可以把它从中间分开,如果 p > 0.5
代表“1”,那么它就是“1”,否则就是“0”。但是您可以选择其他值,您在此报告中看到的是不同截止点的模型质量:这就是您在 "threshold" 列中看到的。极值(记住,基于您提供的 test
数据)是这两个:
5 max precision 0.941437 1.000000 0
6 max recall 0.002550 1.000000 397
即如果将截止值指定为 0.94,则它具有完美的精度,如果将截止值指定为 0.00255,则它具有完美的召回率。
它显示的默认混淆矩阵使用的是这一行:
3 max f0point5 0.173215 0.330006 131
(this question 的答案看起来更详细地解释了该指标。)
就个人而言,我发现最大准确度是最直观的:
4 max accuracy 0.288168 0.839957 64
即最大准确度是指具有最低错误的阈值。
无论您决定哪个指标最合适table,您仍然需要为真实世界中看不见的数据确定一个阈值。一种方法是根据您的测试数据使用 table 中的阈值(因此,如果我认为最大准确度最重要,我会在我的实时应用程序中使用 0.288 的阈值。)但我发现对测试数据和训练数据的阈值进行平均,以获得更可靠的结果。
P.S。抵挡了一阵子后,我转变成logloss的粉丝了。我发现针对最佳 logloss 进行调整的模型(而不是针对最佳召回率、最佳精度、最佳准确度、最低 MSE 等进行调整)在实际应用中往往更加稳健。
我喜欢不同的阅读方式。您已经有了混淆矩阵,对于某些问题,您可以(当然!)直接计算精度为(真阳性+真阴性)/总案例,但对于其余部分,倾向于采用平衡精度(取决于数量预测变量,您必须应对多重共线性并从响应案例的不同样本量中消除偏差)。
平衡精度 = ((TP/P)+(TN/N))/2
TP真阳性
TN 真阴性
P实际为正
N 实际负数
这也给出了关于特异性和敏感性案例的真实情况
使用 h2o.randomForest
创建模型后,然后使用:
perf <- h2o.performance(model, test)
print(perf)
我得到以下信息(值 H2OModelMetrics
对象)
H2OBinomialMetrics: drf
MSE: 0.1353948
RMSE: 0.3679604
LogLoss: 0.4639761
Mean Per-Class Error: 0.3733908
AUC: 0.6681437
Gini: 0.3362873
Confusion Matrix (vertical: actual; across: predicted)
for F1-optimal threshold:
0 1 Error Rate
0 2109 1008 0.323388 =1008/3117
1 257 350 0.423394 =257/607
Totals 2366 1358 0.339689 =1265/3724
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.080124 0.356234 248
2 max f2 0.038274 0.515566 330
3 max f0point5 0.173215 0.330006 131
4 max accuracy 0.288168 0.839957 64
5 max precision 0.941437 1.000000 0
6 max recall 0.002550 1.000000 397
7 max specificity 0.941437 1.000000 0
8 max absolute_mcc 0.113838 0.201161 195
9 max min_per_class_accuracy 0.071985 0.621087 262
10 max mean_per_class_accuracy 0.078341 0.626921 251
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)`
or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
我过去常常查看灵敏度(召回率)和特异性来比较我的预测模型的质量,但是根据提供的信息,我无法理解这些指标。根据以上信息,我如何评估我的预测质量?
如果我使用混淆矩阵计算此类指标,我得到:sens=0.58
、spec=0.68
与提供的信息不同。
是否有任何方法可以像我们使用 caret
包中的 confusionMatrix
那样获取这些值?
对我来说,这个指标更直观:
比 logLoss
公制。
h2o 中的二项式分类模型 return 预测为“1”的概率 (p
)(它们还会冗余地告诉您它为“0”的概率",即 1-p
).
要使用此模型,您必须决定截止值。例如。你可以把它从中间分开,如果 p > 0.5
代表“1”,那么它就是“1”,否则就是“0”。但是您可以选择其他值,您在此报告中看到的是不同截止点的模型质量:这就是您在 "threshold" 列中看到的。极值(记住,基于您提供的 test
数据)是这两个:
5 max precision 0.941437 1.000000 0
6 max recall 0.002550 1.000000 397
即如果将截止值指定为 0.94,则它具有完美的精度,如果将截止值指定为 0.00255,则它具有完美的召回率。
它显示的默认混淆矩阵使用的是这一行:
3 max f0point5 0.173215 0.330006 131
(this question 的答案看起来更详细地解释了该指标。)
就个人而言,我发现最大准确度是最直观的:
4 max accuracy 0.288168 0.839957 64
即最大准确度是指具有最低错误的阈值。
无论您决定哪个指标最合适table,您仍然需要为真实世界中看不见的数据确定一个阈值。一种方法是根据您的测试数据使用 table 中的阈值(因此,如果我认为最大准确度最重要,我会在我的实时应用程序中使用 0.288 的阈值。)但我发现对测试数据和训练数据的阈值进行平均,以获得更可靠的结果。
P.S。抵挡了一阵子后,我转变成logloss的粉丝了。我发现针对最佳 logloss 进行调整的模型(而不是针对最佳召回率、最佳精度、最佳准确度、最低 MSE 等进行调整)在实际应用中往往更加稳健。
我喜欢不同的阅读方式。您已经有了混淆矩阵,对于某些问题,您可以(当然!)直接计算精度为(真阳性+真阴性)/总案例,但对于其余部分,倾向于采用平衡精度(取决于数量预测变量,您必须应对多重共线性并从响应案例的不同样本量中消除偏差)。
平衡精度 = ((TP/P)+(TN/N))/2 TP真阳性 TN 真阴性 P实际为正 N 实际负数
这也给出了关于特异性和敏感性案例的真实情况