如何使用PRROC包来获得ROC& amp; R中随机森林的PR

时间:2018-02-20 18:34:31

标签: 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曲线出现同样的问题。这是因为课堂上的高度不平衡吗? 假设rf_pred返回0/1的概率,我怎么能让fg_rf等于calss = 1的概率,我的代码是:fg_rf <- rf_pred[test$Class==1]是否正确?

1 个答案:

答案 0 :(得分:1)

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

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

纠正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)