Два разных способа расчета AUC тренировочного набора в случайном лесу дают разные результаты?

Я использовал два способа расчета AUC тренировочного набора в randomForest, но получил очень разные результаты. Два способа заключаются в следующем:

rfmodel <- randomForest(y~., data=train, importance=TRUE, ntree=1000)

Способ 1 расчета AUC состава поезда:

`rf_p_train <- predict(rfmodel, type="prob",newdata = train)[,'yes']  
 rf_pr_train <- prediction(rf_p_train, train$y)  
 r_auc_train[i] <- performance(rf_pr_train, measure = "auc")@y.values[[1]] `

Способ 2 расчета AUC состава поезда:
rf_p_train <- as.vector(rfmodel$votes[,2]) rf_pr_train <- prediction(rf_p_train, train$y) r_auc_train[i] <- performance(rf_pr_train, measure = "auc")@y.values[[1]]

Способ 1 дает мне AUC около 1, а способ 2 дает мне AUC около 0,65. Мне интересно, почему эти два результата так сильно различаются. Может ли кто-нибудь помочь мне с этим? Действительно ценю это. Что касается данных, мне жаль, что мне не разрешено делиться ими здесь. Я впервые задаю здесь вопрос. Пожалуйста, простите меня, если что-то неясно. Большое спасибо!


person annadai    schedule 07.10.2017    source источник


Ответы (2)


ХОРОШО. Второй способ правильный. Почему? Потому что в первом случае вы обрабатываете training данные как новый набор данных и снова пытаетесь его подогнать. Во втором случае вы получаете на самом деле так называемую оценку out of bag, и это должен быть способ расчета AUC.

person Bs He    schedule 07.06.2018
comment
Почему первый способ снова подойдет к модели? Можете ли вы объяснить больше об этом? - person annadai; 08.06.2018
comment
скажем, у вас есть набор данных и попробуйте выполнить линейную модель. у вас есть m1, а затем вы помещаете свой набор данных в этот m1, и то, что вы можете получить, это точное значение набора данных, верно? - person Bs He; 08.06.2018
comment
Получите вы! Спасибо! - person annadai; 11.06.2018

Я не уверен, какие данные вы используете. Будет лучше, если вы предоставите воспроизводимый пример, но я думаю, что смог собрать его воедино.

library(randomForest)
#install.packages("ModelMetrics")
library(ModelMetrics)

# prep training to binary outcome
train <- iris[iris$Species %in% c('virginica', 'versicolor'),]
train$Species <- droplevels(train$Species)

# build model
rfmodel <- randomForest(Species~., data=train, importance=TRUE, ntree=2)

# generate predictions
preds <- predict(rfmodel, type="prob",newdata = train)[,2]

# Calculate AUC
auc(train$Species, preds)

# Calculate LogLoss
logLoss(train$Species, preds)
person JackStat    schedule 07.10.2017
comment
Благодарю вас! Но моя проблема до сих пор не решена. Не могли бы вы попробовать рассчитать AUC тренировочных данных следующими двумя способами? 1. 'rf_p_train ‹- прогнозировать(rfmodel, type=prob,newdata=train)[,2]; rf_pr_train ‹- прогноз(rf_p_train, train$Species); r_auc_train[i] ‹- производительность (rf_pr_train, мера = auc)@y.values[[1]] ' 2. 'rf_p_train ‹- as.vector (rfmodel$votes[,2]); rf_pr_train ‹- прогноз(rf_p_train, train$Species); r_auc_train[i] ‹- performance(rf_pr_train, Measure = auc)@y.values[[1]]' Они дадут нам два разных AUC, причем первый выше второго. - person annadai; 14.10.2017
comment
Мне жаль, что я не знаком с тем, как использовать переполнение стека, и мне действительно нужна помощь в этом. Большое спасибо! - person annadai; 14.10.2017