Bandingkan R-kuadrat dari dua model Hutan Acak yang berbeda

10

Saya menggunakan paket randomForest dalam R untuk mengembangkan model hutan acak untuk mencoba menjelaskan hasil yang berkelanjutan dalam dataset "lebar" dengan lebih banyak prediktor daripada sampel.

Secara khusus, saya memasang satu model RF yang memungkinkan prosedur untuk memilih dari serangkaian ~ 75 variabel prediktor yang menurut saya penting.

Saya menguji seberapa baik model itu memprediksi hasil aktual untuk set pengujian yang dicadangkan, menggunakan pendekatan yang diposting di sini sebelumnya , yaitu,

... atau dalam R:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Tapi sekarang saya punya tambahan ~ 25 variabel prediktor yang bisa saya tambahkan. Saat menggunakan set ~ 100 prediktor, R² lebih tinggi. Saya ingin menguji ini secara statistik, dengan kata lain, ketika menggunakan set ~ 100 prediktor, apakah tes model secara signifikan lebih baik dalam menguji data daripada model yang cocok menggunakan ~ 75 prediktor. Yaitu, adalah R² dari pengujian model RF yang sesuai pada dataset lengkap secara signifikan lebih tinggi dari R² dari pengujian model RF pada dataset yang dikurangi.

Ini penting bagi saya untuk diuji, karena ini adalah data percontohan, dan mendapatkan 25 prediktor tambahan itu mahal, dan saya perlu tahu apakah saya harus membayar untuk mengukur prediktor tersebut dalam studi tindak lanjut yang lebih besar.

Saya mencoba memikirkan semacam pendekatan resampling / permutasi tetapi tidak ada yang terlintas dalam pikiran.

Stephen Turner
sumber

Jawaban:

8

Validasi silang! Gunakan fungsi kereta di caret agar sesuai dengan 2 model Anda. Gunakan satu nilai mtry (sama untuk kedua model). Caret akan mengembalikan estimasi sampel ulang RMSE dan .R2

Lihat halaman 3 sketsa tanda sisipan (juga dalam manual referensi lengkap )

Zach
sumber
Saya setuju kecuali untuk kelalaian Anda bahwa OP harus menggunakan R-squared yang disesuaikan, karena ini memang dirancang untuk itu. Model memiliki Y yang sama tetapi set prediktor yang berbeda, sehingga penyesuaian R-kuadrat diperlukan untuk menghukum perbedaan tingkat kebebasan / kompleksitas model yang dihabiskan. Masalah lain yang saya lihat berpotensi masalah ukuran sampel; OP akan membutuhkan ukuran sampel BESAR untuk memiliki segala harapan nyata ini tidak hanya cocok, bahkan dengan CV.
LSC
@LSC Saya akan mengatakan bahwa jika memegang dataset tambahan (tidak digunakan untuk seleksi), mereka dapat menggunakan R2 tanpa penyesuaian, seperti RMSE yang dinormalisasi saja. Saya setuju bahwa mereka memerlukan dataset yang cukup besar untuk melakukan ini.
Zach
data baru atau lama, semuanya konstan, menempatkan 100 istilah dalam model vs 25 akan memiliki R-kuadrat disesuaikan lebih tinggi bila dibandingkan dengan R-kuadrat dari model prediktor 25. Ini mudah dilihat saat menghitung jumlah kesalahan kuadrat antara keduanya (lebih banyak istilah adalah SSE yang lebih rendah, semuanya sama). Saya pikir orang sering lupa bahwa lebih banyak istilah tidak akan pernah mengurangi R-squared, tetapi jika mereka relatif terhadap nilainya, mereka dapat mengurangi R-squared yang disesuaikan, yang merupakan ukuran yang lebih baik untuk digunakan untuk melihat bang untuk uang.
LSC
"lebih banyak istilah tidak akan mengurangi R-kuadrat" <- Pernyataan ini salah, ketika menghitung R2 dari sampel.
Zach
Seperti yang saya sebutkan, saya menunjukkannya karena banyak orang yang menanyakan pertanyaan-pertanyaan ini tidak mengingat ide ini sejak awal. Saya pikir memahami mengapa ini benar dalam sampel dan mungkin tidak berpegang pada data baru penting untuk memahami apa dan bagaimana sesuatu dioptimalkan dalam persamaan asli.
LSC
4

Saya setuju dengan Zach bahwa ide terbaik adalah memvalidasi silang kedua model dan kemudian membandingkan , misalnya dengan mengumpulkan nilai dari setiap lipatan dan membandingkan vektor yang dihasilkan dengan uji Wilcoxon (dipasangkan dengan k-lipat, tidak berpasangan untuk acak CV).R2

Opsi sampingan adalah menggunakan semua pilihan fitur yang relevan, apa yang akan memberi tahu Anda atribut mana yang memiliki peluang untuk secara signifikan berguna untuk klasifikasi - sehingga cuaca atribut mahal itu sepadan dengan harganya. Ini dapat dilakukan misalnya dengan pembungkus RF, Boruta .

Komunitas
sumber
untuk tes berpasangan, saya berasumsi bahwa 2 model cocok pada lipatan yang sama? Sehingga baris k dari matrx adalah lipatan dan dua kolom adalah model 1 dan model 2?
B_Miner
@ B_Miner Tepatnya.
1

Anda mungkin ingin berpikir dalam hal signifikansi praktis daripada signifikansi statistik (atau keduanya). Dengan data yang cukup Anda dapat menemukan hal-hal yang signifikan secara statistik yang tidak akan berdampak nyata pada penggunaan Anda. Saya ingat menganalisis suatu model satu kali di mana interaksi 5 arah secara statistik signifikan, tetapi ketika prediksi dari model termasuk semuanya hingga interaksi 5 arah dibandingkan dengan prediksi dari model termasuk hanya interaksi 2 arah dan efek utama , perbedaan terbesar adalah kurang dari 1 orang (tanggapannya adalah jumlah orang dan semua nilai menarik jauh dari 0). Jadi kompleksitas yang ditambahkan tidak sepadan. Jadi lihat perbedaan prediksi Anda untuk melihat apakah perbedaannya cukup untuk membenarkan biaya tambahan, jika tidak maka mengapa repot-repot mencari signifikansi statistik? Jika perbedaannya cukup besar untuk membenarkan biaya jika mereka nyata, maka saya kedua sugestions lain menggunakan validasi silang.

Greg Snow
sumber
1

R2

library(randomForest)
data(iris)
set.seed(42)

# 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, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

Metode ini juga dapat diperluas untuk bekerja dalam validasi silang (bukan hanya pembagian sampel seperti yang ditunjukkan di atas).

Eric
sumber
0

Karena Anda sudah menggunakan randomForestsetelah melakukan validasi silang, Anda mungkin memancarkan perhitungan fit yang dipilih dari nilai-nilai kepentingan prediktor.

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720
mrbcuda
sumber
0

Saya melihat pertanyaan ini sudah lama ditanyakan; namun, belum ada jawaban yang menunjukkan kekurangan dan kesalahpahaman yang signifikan dalam pertanyaan tersebut.

Tolong dicatat:

  1. Anda menyatakan bahwa R ^ 2 = ESS / TSS = 1 - RSS / TSS. Ini hanya berlaku dalam konteks linear. Kesetaraan TSS = RSS + ESS hanya berlaku dalam regresi linier dengan intersep. Dengan demikian Anda tidak dapat menggunakan definisi tersebut untuk hutan acak secara bergantian. Inilah sebabnya mengapa RMSE dan sejenisnya adalah fungsi kerugian yang lebih umum.

  2. Lebih penting untuk tujuan statistik: R ^ 2 mengikuti distribusi yang tidak diketahui (juga dalam pengaturan linier). Itu berarti, menguji hipotesis dengan signifikansi statistik menggunakan R ^ 2 tidak semudah itu. Validasi Lintas, sebagaimana disebutkan oleh Zach , adalah pilihan yang baik.

Adapun user88 respon: Palang validasi dengan uji Wilcoxon adalah pendekatan yang valid. Sebuah makalah baru-baru ini menggunakan uji peringkat Wilcoxon signed dan tes Friedman untuk perbandingan berbagai metode dan algoritma.

tobiaspk1
sumber