r中随机森林模型的AUC计算



我试图计算我的两个模型随机森林和朴素贝叶斯的AUC但是得到相同的错误"$运算符对于原子向量无效".你有什么好主意吗?

背景:目标变量"诊断";是值为B和M的非数值

以下是RF模型的示例代码

fitControl <- trainControl(method="cv",number = 5,preProcOptions = list(thresh = 0.4),classProbs = TRUE,summaryFunction = twoClassSummary)
wdbc_model_rf <- train(Diagnosis~.,train_wdbc,method="ranger",metric="ROC",preProcess = c('center', 'scale'),trControl=fitControl)

下面是一个R代码的例子。请注意:您对ROC感兴趣意味着只有两个类。

Predict <- function(class_obj, newdata, Param) {
if(Param$method == 'RF') {
Predicted_Probs         <- predict(class_obj, newdata = newdata, type = 'prob')
} else if(Param$method == 'GBM') {
Predicted_Probs         <- predict(class_obj, newdata = newdata, type = 'response', n.trees = Param$n.trees)[,,1]
} else if(Param$method == 'SVM') {
Predicted_Probs         <- predict(class_obj, newdata = newdata, type = 'probabilities')
} else if(Param$method == 'logit') {
Predicted_Probs         <- predict(class_obj, newdata = newdata, type = 'response')
Predicted_Probs         <- cbind(1 - Predicted_Probs, Predicted_Probs)
} else { 
cat('nPredict(): unknown classification method.')
}
Predicted_Probs[,2]
}

@@@

AUC <- function(Truth, Predicted_Probs) {
###########################################################################################################
# SETTINGS
d_Prob              <- 0.01
###########################################################################################################
# CALCULATIONS
Prob_Grid               <- seq(1, 0, -d_Prob)
NP                  <- length(Prob_Grid)
True_Positive_Rate      <- c()
False_Positive_Rate     <- c()
for(Prob_Threshold in Prob_Grid) {
Forecast                <- as.factor( c(0, 1, 1 * (Predicted_Probs >= Prob_Threshold)) )
levels(Forecast)            <- c('0', '1')
Forecast                <- Forecast[-c(1,2)]
Table               <- xtabs(~Truth + Forecast)
False_Positive_Rate     <- c(False_Positive_Rate, Table[1,2] / (Table[1,1] + Table[1,2]))
True_Positive_Rate      <- c(True_Positive_Rate, Table[2,2] / (Table[2,1] + Table[2,2]))
}
AUC                 <- 0
for(i in 2:NP) {
AUC                 <- AUC + True_Positive_Rate[i] * (False_Positive_Rate[i] - False_Positive_Rate[i-1])
}
AUC
}

请注意:代码是相当通用的,可以应用于许多方法,如支持向量机,梯度增强,随机森林等。希望能够根据您的需要直接修改代码。

最新更新