dihitung secara manual tidak cocok dengan randomForest () untuk menguji data baru

38

Saya tahu ini adalah Rpertanyaan yang cukup spesifik , tetapi saya mungkin berpikir tentang perbedaan proporsi yang dijelaskan, , salah. Ini dia.R2

Saya mencoba menggunakan Rpaket randomForest. Saya memiliki beberapa data pelatihan dan data pengujian. Ketika saya cocok dengan model hutan acak, randomForestfungsi ini memungkinkan Anda untuk memasukkan data pengujian baru untuk diuji. Ini kemudian memberi tahu Anda persentase varians yang dijelaskan dalam data baru ini. Ketika saya melihat ini, saya mendapatkan satu nomor.

Ketika saya menggunakan predict()fungsi untuk memprediksi nilai hasil dari data pengujian berdasarkan model fit dari data pelatihan, dan saya mengambil koefisien korelasi kuadrat antara nilai-nilai ini dan nilai-nilai hasil aktual untuk data pengujian, saya mendapatkan nomor yang berbeda. Nilai-nilai ini tidak cocok .

Berikut beberapa Rkode untuk menunjukkan masalahnya.

# 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])
Stephen Turner
sumber

Jawaban:

52

Alasan bahwa nilai tidak cocok adalah karena variasi pelaporan dijelaskan sebagai lawan dari perbedaan dijelaskan. Saya pikir ini adalah kesalahpahaman umum tentang yang diabadikan dalam buku teks. Saya bahkan menyebutkan ini di utas lain tempo hari. Jika Anda ingin contoh, lihat buku teks (jika tidak cukup bagus) Seber dan Lee, Linear Regression Analysis , 2nd. ed.R 2R2randomForestR2

Definisi umum untuk adalah R 2 = 1 - Σ i ( y i - y i ) 2R2

R2=1-saya(ysaya-y^saya)2saya(ysaya-y¯)2.

Yaitu, kita menghitung kesalahan mean-squared, membaginya dengan varians dari pengamatan asli dan kemudian mengurangi ini dari satu. (Perhatikan bahwa jika prediksi Anda benar-benar buruk, nilai ini bisa menjadi negatif.)

Sekarang, apa yang terjadi dengan regresi linier ( dengan istilah intersep! ) Adalah bahwa nilai rata - rata dari cocok dengan . Lebih lanjut, vektor residual adalah ortogonal ke vektor nilai yang dipasang . Ketika Anda menempatkan kedua hal ini bersama-sama, maka definisi berkurang ke yang lebih umum ditemui, yaitu, (Saya telah menggunakan subskrip dalam untuk menunjukkan regresi linier .) ˉ y y - y y R 2 L R =Corr(y, y )2. LRR 2 L Ry^sayay¯y-y^y^

RL.R2=CHairr(y,y^)2.
L.RRL.R2

The randomForestpanggilan menggunakan definisi pertama, jadi jika Anda

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

Anda akan melihat bahwa jawabannya cocok.

kardinal
sumber
1
R2
(+1) Respons yang sangat elegan.
chl
@mpiktas, @chl, saya akan mencoba mengembangkan ini sedikit lebih lanjut hari ini. Pada dasarnya, ada hubungan dekat (tapi, mungkin, sedikit tersembunyi) untuk pengujian hipotesis di latar belakang. Bahkan dalam pengaturan regresi linier, jika vektor konstan tidak ada dalam ruang kolom dari matriks desain, maka definisi "korelasi" akan gagal.
kardinal
Jika Anda memiliki referensi selain buku teks Seber / Lee (tidak dapat diakses oleh saya), saya akan senang melihat penjelasan yang baik tentang bagaimana variasi menjelaskan (yaitu 1-SSerr / SStot) berbeda dari koefisien korelasi kuadrat, atau varian dijelaskan. Terima kasih untuk tip nya.
Stephen Turner
Jika nilai R-squared negatif dari hasil regresi variabel instrumental, apakah ada cara untuk menekan nilai negatif ini dan menerjemahkannya menjadi nilai positif demi pelaporan? Rujuk ke tautan ini: stata.com/support/faqs/statistics/two-stage-least-squares
Eric