Розрахований вручну


38

Я знаю, що це досить специфічне Rзапитання, але я, можливо, думаю про відхилення в пропорції, пояснене, , неправильно. Ось іде.R2

Я намагаюся використовувати Rпакет randomForest. У мене є деякі дані про навчання та дані тестування. Коли я підходить до випадкової лісової моделі, ця randomForestфункція дозволяє вводити нові дані тестування для тестування. Потім він повідомляє вам відсоток дисперсії, пояснений у цих нових даних. Коли я дивлюся на це, я отримую одне число.

Коли я використовую predict()функцію для передбачення значення результату даних тестування на основі моделі, підходящої для навчальних даних, і я беру коефіцієнт кореляції у квадраті між цими значеннями та фактичними значеннями результатів для даних тестування, я отримую інше число. Ці значення не збігаються .

Ось Rкод, який демонструє проблему.

# use the built in iris data
data(iris)

#load the randomForest library
library(randomForest)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# fit a model to the training set (column 1, Sepal.Length, will be the outcome)
set.seed(42)
model <- randomForest(x=trainset[ ,-1],y=trainset[ ,1])

# predict values for the testing set (the first column is the outcome, leave it out)
predicted <- predict(model, testset[ ,-1])

# what's the squared correlation coefficient between predicted and actual values?
cor(predicted, testset[, 1])^2

# now, refit the model using built-in x.test and y.test
set.seed(42)
randomForest(x=trainset[ ,-1], y=trainset[ ,1], xtest=testset[ ,-1], ytest=testset[ ,1])

Відповіді:


52

Причина того, що значення не відповідають, пояснюється тим , що пояснення змін пояснюється на відміну від поясненої дисперсії . Я думаю, що це звичайне непорозуміння щодо R 2, яке зберігається в підручниках. Я навіть згадав про це на іншій нитці днями. Якщо ви хочете прикладу, дивіться (інакше досить хороший) підручник Себер і Лі,R2randomForestR2 Лінійний регресійний аналіз , 2-е. ред.

R2

R2=1i(yiy^i)2i(yiy¯)2.

Тобто, ми обчислюємо середньоквадратичну помилку, ділимо її на дисперсію вихідних спостережень, а потім віднімаємо її від одиниці. (Зверніть увагу, що якщо ваші прогнози дійсно погані, це значення може піти негативно.)

y^iy¯yy^y^

RLR2=Corr(y,y^)2.
LRRLR2

Для randomForestвиклику використовується перше визначення, тому якщо ви зробите це

   > y <- testset[,1]
   > 1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

ви побачите, що відповіді відповідають.


1
R2

(+1) Дуже елегантна відповідь.
chl

@mpiktas, @chl, я спробую розширити це дещо пізніше сьогодні. В основному, існує тесний (але, можливо, трохи прихований) зв’язок з тестуванням гіпотез на задньому плані. Навіть у налаштуваннях лінійної регресії, якщо постійний вектор не знаходиться в просторі стовпців проектної матриці, то визначення "кореляції" буде невдалим.
кардинал

Якщо у вас є посилання, крім підручника Seber / Lee (не доступний для мене), я хотів би побачити добре пояснення того, як пояснювана варіація (тобто 1-SSerr / SStot) відрізняється від коефіцієнта кореляції у квадраті чи поясненої дисперсії. Ще раз дякую за пораду.
Стівен Тернер

Якщо значення R-квадрата є негативним за результатами регресії інструментальної змінної, чи існує спосіб придушити це негативне значення та перевести його у позитивне значення заради звітності? Перейдіть за цим посиланням, будь ласка: stata.com/support/faqs/statistics/two-stage-least-squares
Ерік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.