Я использую пакет randomForest в R, чтобы создать модель для классификации случаев на болезни (1) или свободные от болезней (0):
classify_BV_100t <- randomForest(bv.disease~., data=RF_input_BV_clean, ntree = 100, localImp = TRUE)
print(classify_BV_100t)
Call:
randomForest(formula = bv.disease ~ ., data = RF_input_BV_clean, ntree = 100, localImp = TRUE)
Type of random forest: classification
Number of trees: 100
No. of variables tried at each split: 53
OOB estimate of error rate: 8.04%
Confusion matrix:
0 1 class.error
0 510 7 0.01353965
1 39 16 0.70909091
Моя матрица путаницы показывает, что модель хороша для классификации 0 (нет болезни), но очень плохо для классификации 1 (болезни).
Но когда я строю графики ROC, создается впечатление, что модель довольно хороша.
Вот два разных способа построения ROC:
-
library(pROC) rf.roc<-roc(RF_input_BV_clean$bv.disease, classify_BV_100t$votes[,2]) plot(rf.roc) auc(rf.roc)
(Используя Как вычислить ROC и AUC под ROC после обучения с использованием каретки в R?)
library(ROCR) predictions <- as.vector(classify_BV_100t$votes[,2]) pred <- prediction(predictions, RF_input_BV_clean$bv.disease) perf_AUC <- performance(pred,"auc") #Calculate the AUC value AUC <- [email protected][[1]] perf_ROC <- performance(pred,"tpr","fpr") #plot the actual ROC curve plot(perf_ROC, main="ROC plot") text(0.5,0.5,paste("AUC = ",format(AUC, digits=5, scientific=FALSE)))
Это графики ROC из 1 и 2:
Оба метода дают мне AUC 0,8621593.
Кто-нибудь знает, почему результаты матрицы путаницы случайного леса, похоже, не складываются с ROC / AUC?