我的数据资源: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 <- rf_pred[test$Class==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)