我想了解H2o R-package中h2o.predict()函数的值(结果)的含义。我意识到,在某些情况下,当predict
列为1
时,p1
列的值比列p0
的值低。我对p0
和p1
列的解释是指每个事件的概率,因此我希望predict=1
的概率p1
的概率应高于相反事件的概率(p0
),但并非总是如下面的示例所示:使用prostate dataset。
这是可执行的示例:
library(h2o)
h2o.init(max_mem_size = "12g", nthreads = -1)
prostate.hex <- h2o.importFile("https://h2o-public-test-data.s3.amazonaws.com/smalldata/prostate/prostate.csv")
prostate.hex$CAPSULE <- as.factor(prostate.hex$CAPSULE)
prostate.hex$RACE <- as.factor(prostate.hex$RACE)
prostate.hex$DCAPS <- as.factor(prostate.hex$DCAPS)
prostate.hex$DPROS <- as.factor(prostate.hex$DPROS)
prostate.hex.split = h2o.splitFrame(data = prostate.hex,
ratios = c(0.70, 0.20, 0.10), seed = 1234)
train.hex <- prostate.hex.split[[1]]
validate.hex <- prostate.hex.split[[2]]
test.hex <- prostate.hex.split[[3]]
fit <- h2o.glm(y = "CAPSULE", x = c("AGE", "RACE", "PSA", "DCAPS"),
training_frame = train.hex,
validation_frame = validate.hex,
family = "binomial", nfolds = 0, alpha = 0.5)
prostate.predict = h2o.predict(object = fit, newdata = test.hex)
result <- as.data.frame(prostate.predict)
subset(result, predict == 1 & p1 < 0.4)
对于subset
函数的结果,我得到以下输出:
predict p0 p1
11 1 0.6355974 0.3644026
17 1 0.6153021 0.3846979
23 1 0.6289063 0.3710937
25 1 0.6007919 0.3992081
31 1 0.6239587 0.3760413
对于来自test.hex
数据集的所有上述观察结果,预测为1
,但预测为p0 > p1
。
predict=1
但p1 < p0
处的总观察值为:
> nrow(subset(result, predict == 1 & p1 < p0))
[1] 14
相反,没有predict=0
,其中p0 < p1
> nrow(subset(result, predict == 0 & p0 < p1))
[1] 0
以下是table
的{{1}}信息表:
predict
我们使用具有以下值的决策变量> table(result$predict)
0 1
18 23
:
CAPSULE
有什么建议吗?
注意:具有类似主题的问题:How to interpret results of h2o.predict不能解决这个特定问题。
答案 0 :(得分:4)
您所描述的阈值为0.5。实际上,将使用不同的阈值,该阈值可最大化某个指标。默认指标为F1(*);如果您打印模型信息,则可以找到每个指标使用的阈值。
有关此问题的更多信息,请参见问题:How to understand the metrics of H2OModelMetrics Object through h2o.performance?(您的问题有所不同,这就是为什么我没有将其标记为重复)。
据我所知,您无法将F1默认设置更改为h2o.predict()
或h2o.performance()
。但是,您可以使用h2o.confusionMatrix()
给出模型fit
,并改用max F2:
h2o.confusionMatrix(fit, metrics = "f2")
您也可以直接使用h2o.predict()
“ p0”列(使用自己的阈值)来代替“预测”列。 (这是我之前所做的。)
*:定义在这里:https://github.com/h2oai/h2o-3/blob/fdde85e41bad5f31b6b841b300ce23cfb2d8c0b0/h2o-core/src/main/java/hex/AUC2.java#L34在该文件的最下方还显示了如何计算每个指标。
答案 1 :(得分:3)
似乎(另请参见here)将F1 score
数据集上的validation
最大化的阈值用作h2o.glm()
分类的默认阈值。我们可以观察到以下内容:
F1 score
的阈值为0.363477
。 p1
概率小于此阈值的数据点都归为0
类(预测为0
类的数据点具有最高p1
概率= 0.3602365
<0.363477
)。 所有预测p1
概率大于此阈值的数据点都归为1
类(预测为1
类的数据点具有最低{{1} }概率= p1
> 0.3644026
)。
0.363477