我的数据资源: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曲线也出现同样的问题。是因为类(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/