r - 如何使用PRROC包获取R中随机森林的ROC和PR的auc

标签 r machine-learning random-forest roc auc

我的数据资源:https://www.kaggle.com/mlg-ulb/creditcardfraud 数据集高度不平衡,正类(欺诈)占所有交易的 0.172%,enter image description here enter image description here

我使用 PRROC 包来获取 ROC 曲线的 AUC,这是我的随机森林代码:

rf.model <- randomForest(Class ~ ., data = training, ntree = 2000, nodesize = 20)
rf_pred <- predict(rf.model, test,type="prob" 

因此,正如预期的那样,rf_pred 应该返回每个类别的概率: enter image description here 然后,我使用了以下代码:

fg_rf <- rf_pred[test$Class==1]
bg_rf <- rf_pred[test$Class==0]
roc_rf <- roc.curve(scores.class0 = fg_rf,scores.class1 = bg_rf,curve = T)

然而,ROC CURVE 结果并不如我预期 enter image description here PR曲线也出现同样的问题。是因为类(class)比例太不平衡吗? 假设rf_pred返回0/1的概率,我怎样才能让fg_rf等于calss=1的概率,我的代码是:fg_rf <- rf_pred[test$Class==1]正确吗?

最佳答案

看看你的head(rf_pred)结果,很明显你的predict函数返回(硬)类(即 0/1),而不是概率分数,可能是由于您的 type="pro"拼写错误(应该是 type="prob" )。

scores.class0 & scores.class1 roc.curve 的参数方法应该是概率分数,而不是硬类预测。

更正 predict 中的拼写错误你应该没问题,但很可能你还需要切换分数 - 因为现在你将你的类(class) 1 分分配给 scores.class0 :

rf_pred <- predict(rf.model, test,type="prob")
fg_rf <- rf_pred[test$Class==1]
bg_rf <- rf_pred[test$Class==0]
roc_rf <- roc.curve(scores.class0 = bg_rf, scores.class1 = fg_rf, curve = T)

关于r - 如何使用PRROC包获取R中随机森林的ROC和PR的auc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892049/

相关文章:

r - 在多维范围内进行子集化的最简单方法?

machine-learning - 如何可视化决策树?

machine-learning - 如果没有正/负含义,如何计算召回率和精度?

r - 获取调用对象,更改参数并使用新参数再次运行

r - 种子在随机森林中起什么作用?

r - If 语句基于数据帧中的另一列 : in R

尝试使用 fix() 时,Mac OS X 10.13 上的 RStudio 获取 X11 不可用错误

r - 使用 `lm`参数在 `lapply`中调用 `weights`时出错

machine-learning - 批量大小会导致错误的预测吗?

scikit-learn - scikit-learn (python) 中的平衡随机森林