【问题标题】:how to use PRROC package to get the auc of ROC & PR for random forest in R如何使用 PRROC 包获取 R 中随机森林的 ROC 和 PR 的 auc
【发布时间】:2018-07-31 05:10:58
【问题描述】:

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

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

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

所以,正如预期的那样,rf_pred 应该返回每个类的概率: 然后,我使用了以下代码:

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 结果并非我所期望的那样 PR曲线也出现了同样的问题。是因为班级的高度不平衡吗? 并且假设 rf_pred 返回 0/1 的概率,如何让 fg_rf 等于 calss=1 的概率,我的代码:fg_rf &lt;- rf_pred[test$Class==1] 正确吗?

【问题讨论】:

  • 如果您制作了一个可重复的示例,我们可以检查一下 :-) 数据是什么? stackoverflow.com/questions/5963269/…
  • 您好,我的数据在类中高度不平衡,0:199021; 1:345。在使用这些训练数据训练模型之前,我应该在训练数据中平衡类吗?

标签: r machine-learning random-forest roc auc


【解决方案1】:

查看您的head(rf_pred) 结果,很明显您的predict 函数返回(硬)类(即0/1),而不是概率分数,可能是由于您的type="pro" 错字(应该是@ 987654324@).

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

更正predict 中的拼写错误,您应该没问题,但很可能您还需要切换分数 - 因为现在您将班级 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)

【讨论】:

  • 谢谢指出,其实我用type="prob"还是一样的结果,能不能帮我看看?
  • @kylechan 你的rf_pred 似乎不包含概率分数;你有没有切换scores.class0scores.class1,就像我在我的sn-p中展示的那样?你真的使用包小插图中的例子吗?
  • 我也试过切换 bg_rf 和 fg_rf,AUC 还是 0.5
  • 我有一个理论:我的数据有高度的类不平衡,0:199021:1:345,所以实际上我使用 SMOTE 函数来重新平衡训练数据中的类,我应该使用这个平衡类训练数据来训练随机森林而不是原来的不平衡森林,对吧?
  • 您好,刚刚更新了我的问题,也许它可以帮助您更好地理解它
猜你喜欢
  • 2021-06-12
  • 2015-09-16
  • 2018-11-03
  • 1970-01-01
  • 2017-02-20
  • 2021-04-26
  • 2016-02-25
  • 2012-09-04
  • 2018-01-18
相关资源
最近更新 更多