如果我遗漏了一些明显的东西,我深表歉意。在过去的几天中,我非常享受使用R界面使用h2o的乐趣。我想通过绘制ROC来评估我的模型,比如说一个随机森林。该文档似乎暗示有一种简单的方法可以做到这一点:
我还看到,在python中,您可以应用 roc 函数here。但是我似乎无法找到在R接口(interface)中执行相同操作的方法。目前,我正在使用 h2o.cross_validation_holdout_predictions 从模型中提取预测,然后使用R中的pROC软件包绘制ROC。但是我希望能够直接从H2O模型对象,或者也许从H2OModelMetrics对象执行此操作。
非常感谢!
最佳答案
一个幼稚的解决方案是使用plot()
泛型函数绘制H2OMetrics对象:
logit_fit <- h2o.glm(colnames(training)[-1],'y',training_frame =
training.hex,validation_frame=validation.hex,family = 'binomial')
plot(h2o.performance(logit_fit),valid=T),type='roc')
这将给我们一个情节:
但是很难自定义,尤其是更改线型,因为
type
参数已被视为“roc”。另外,我还没有找到一种方法可以在一个图上同时绘制多个模型的ROC曲线。我想出了一种方法,可以从H2OMetrics对象中提取正确率和错误率,然后使用ggplot2自己将ROC曲线绘制在一个图上。这是示例代码(使用很多tidyverse语法):# for example I have 4 H2OModels
list(logit_fit,dt_fit,rf_fit,xgb_fit) %>%
# map a function to each element in the list
map(function(x) x %>% h2o.performance(valid=T) %>%
# from all these 'paths' in the object
.@metrics %>% .$thresholds_and_metric_scores %>%
# extracting true positive rate and false positive rate
.[c('tpr','fpr')] %>%
# add (0,0) and (1,1) for the start and end point of ROC curve
add_row(tpr=0,fpr=0,.before=T) %>%
add_row(tpr=0,fpr=0,.before=F)) %>%
# add a column of model name for future grouping in ggplot2
map2(c('Logistic Regression','Decision Tree','Random Forest','Gradient Boosting'),
function(x,y) x %>% add_column(model=y)) %>%
# reduce four data.frame to one
reduce(rbind) %>%
# plot fpr and tpr, map model to color as grouping
ggplot(aes(fpr,tpr,col=model))+
geom_line()+
geom_segment(aes(x=0,y=0,xend = 1, yend = 1),linetype = 2,col='grey')+
xlab('False Positive Rate')+
ylab('True Positive Rate')+
ggtitle('ROC Curve for Four Models')
那么ROC曲线为:
关于r - 如何在R中直接绘制H2O模型对象的ROC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44034944/