Dapatkah hutan acak digunakan untuk pemilihan fitur dalam regresi linier berganda?

50

Karena RF dapat menangani non-linearitas tetapi tidak dapat memberikan koefisien, akankah bijaksana untuk menggunakan hutan acak untuk mengumpulkan fitur-fitur yang paling penting dan kemudian memasukkan fitur-fitur tersebut ke dalam model regresi linier berganda untuk mendapatkan koefisien mereka?

Model Markov Tersembunyi
sumber
@ user777 maksud Anda, Anda membaca "jelaskan" sebagai "dapatkan" atau sesuatu seperti itu?
shadowtalker
1
Karena tampaknya ada kekhawatiran substansial tentang apa yang coba ditanyakan pertanyaan ini, bisakah Anda mengeditnya untuk menjernihkan kebingungan?
whuber

Jawaban:

71

Karena RF dapat menangani non-linearitas tetapi tidak dapat memberikan koefisien, apakah sebaiknya menggunakan Random Forest untuk mengumpulkan Fitur yang paling penting dan kemudian memasukkan fitur-fitur tersebut ke dalam model Regresi Linier Berganda untuk menjelaskan tanda-tanda mereka?

Saya menafsirkan pertanyaan satu kalimat OP yang berarti bahwa OP ingin memahami keinginan pipa analisis berikut:

  1. Paskan hutan acak ke beberapa data
  2. Dengan beberapa metrik variabel penting dari (1), pilih subset fitur berkualitas tinggi.
  3. Menggunakan variabel dari (2), perkirakan model regresi linier. Ini akan memberi OP akses ke koefisien yang OP notes tidak bisa sediakan.
  4. Dari model linier dalam (3), secara kualitatif menafsirkan tanda-tanda estimasi koefisien.

Saya tidak berpikir pipa ini akan mencapai apa yang Anda inginkan. Variabel yang penting dalam hutan acak tidak harus memiliki hubungan aditif linier dengan hasilnya. Pernyataan ini seharusnya tidak mengejutkan: itu yang membuat hutan acak sangat efektif dalam menemukan hubungan nonlinier.

Ini sebuah contoh. Saya menciptakan masalah klasifikasi dengan 10 fitur noise, dua fitur "sinyal", dan batas keputusan melingkar.

set.seed(1)
N  <- 500
x1 <- rnorm(N, sd=1.5)
x2 <- rnorm(N, sd=1.5)

y  <- apply(cbind(x1, x2), 1, function(x) (x%*%x)<1)

plot(x1, x2, col=ifelse(y, "red", "blue"))
lines(cos(seq(0, 2*pi, len=1000)), sin(seq(0, 2*pi, len=1000))) 

masukkan deskripsi gambar di sini

Dan ketika kita menerapkan model RF, kita tidak terkejut menemukan bahwa fitur-fitur ini dengan mudah dianggap penting oleh model. (NB: model ini tidak disetel sama sekali .)

x_junk   <- matrix(rnorm(N*10, sd=1.5), ncol=10)
x        <- cbind(x1, x2, x_junk)
names(x) <- paste("V", 1:ncol(x), sep="")

rf <- randomForest(as.factor(y)~., data=x, mtry=4)
importance(rf)

    MeanDecreaseGini
x1         49.762104
x2         54.980725
V3          5.715863
V4          5.010281
V5          4.193836
V6          7.147988
V7          5.897283
V8          5.338241
V9          5.338689
V10         5.198862
V11         4.731412
V12         5.221611

Tetapi ketika kita memilih dua fitur yang bermanfaat ini saja, model linier yang dihasilkan sangat buruk.

summary(badmodel <- glm(y~., data=data.frame(x1,x2), family="binomial"))

Bagian penting dari ringkasan adalah perbandingan dari penyimpangan residual dan penyimpangan nol. Kita dapat melihat bahwa model itu pada dasarnya tidak melakukan apa pun untuk "memindahkan" penyimpangan. Selain itu, estimasi koefisien pada dasarnya nol.

Call:
glm(formula = as.factor(y) ~ ., family = "binomial", data = data.frame(x1, 
    x2))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.6914  -0.6710  -0.6600  -0.6481   1.8079  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.398378   0.112271 -12.455   <2e-16 ***
x1          -0.020090   0.076518  -0.263    0.793    
x2          -0.004902   0.071711  -0.068    0.946    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 497.62  on 499  degrees of freedom
Residual deviance: 497.54  on 497  degrees of freedom
AIC: 503.54

Number of Fisher Scoring iterations: 4

Apa yang menyebabkan perbedaan liar antara kedua model? Ya, jelas batas keputusan yang kami coba pelajari bukanlah fungsi linier dari dua fitur "sinyal". Tentunya jika Anda mengetahui bentuk fungsional dari batas keputusan sebelum memperkirakan regresi, Anda dapat menerapkan beberapa transformasi untuk menyandikan data dengan cara yang kemudian dapat ditemukan oleh regresi ... (Tapi saya belum pernah tahu bentuk batas di depan waktu dalam masalah dunia nyata.) Karena kami hanya bekerja dengan dua fitur sinyal dalam kasus ini, data sintetik ditetapkan tanpa noise pada label kelas, bahwa batas antar kelas sangat jelas dalam plot kami. Tapi itu kurang jelas ketika bekerja dengan data nyata dalam jumlah dimensi yang realistis.

Selain itu, secara umum, hutan acak dapat cocok dengan model yang berbeda untuk himpunan bagian data yang berbeda. Dalam contoh yang lebih rumit, tidak akan jelas apa yang terjadi dari satu plot sama sekali, dan membangun model linier kekuatan prediksi yang sama akan lebih sulit.

Karena kita hanya mementingkan dua dimensi, kita dapat membuat permukaan prediksi. Seperti yang diharapkan, model acak belajar bahwa lingkungan di sekitar tempat asal itu penting.

M                 <- 100
x_new             <- seq(-4,4, len=M)
x_new_grid        <- expand.grid(x_new, x_new)
names(x_new_grid) <- c("x1", "x2")
x_pred            <- data.frame(x_new_grid, matrix(nrow(x_new_grid)*10, ncol=10))
names(x_pred)     <- names(x)

y_hat             <- predict(object=rf, newdata=x_pred, "vote")[,2]

library(fields)
y_hat_mat         <- as.matrix(unstack(data.frame(y_hat, x_new_grid), y_hat~x1))

image.plot(z=y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="RF Prediction surface", xlab="x1", ylab="x2")

masukkan deskripsi gambar di sini

Seperti yang tersirat oleh output model luar biasa kami, permukaan prediksi untuk model regresi logistik yang dikurangi pada dasarnya datar.

masukkan deskripsi gambar di sini

bad_y_hat     <- predict(object=badmodel, newdata=x_new_grid, type="response")
bad_y_hat_mat <- as.matrix(unstack(data.frame(bad_y_hat, x_new_grid), bad_y_hat~x1))
image.plot(z=bad_y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="Logistic regression prediction surface", xlab="x1", ylab="x2")

HongOoi mencatat bahwa keanggotaan kelas bukanlah fungsi linier dari fitur, tetapi bahwa fungsi linier berada di bawah transformasi. Karena batas keputusan adalah jika kita menguadratkan fitur-fitur ini, kita akan dapat membangun model linier yang lebih berguna. Ini disengaja. Sementara model RF dapat menemukan sinyal di kedua fitur tanpa transformasi, analis harus lebih spesifik untuk mendapatkan hasil yang sama membantu dalam GLM. Mungkin itu cukup untuk OP: menemukan seperangkat transformasi yang berguna untuk 2 fitur lebih mudah daripada 12. Tapi poin saya adalah bahwa bahkan jika transformasi akan menghasilkan model linier yang berguna, pentingnya fitur RF tidak akan menyarankan transformasi sendiri.1=x12+x22,

Pasang kembali Monica
sumber
1
Saya pikir, meski menyenangkan, itu melenceng dari intinya. Coba model yang sedikit lebih kompleks - yang saya sebut cukup non-sepele cukup informatif. Pertimbangkan ini ( people.kyb.tuebingen.mpg.de/spider/demo_dec_vs_svm_2.jpg ) dengan suara garam dan merica. Sekarang pas dengan RF. Sekarang gunakan RF sebagai "filter" untuk menghapus fenomena "palsu", dan latih model alternatif Anda pada output RF, bukan koefisiennya. OP menetapkan "fitur" bukan koefisien. OP tidak mengatakan "hutan acak berkurang" tetapi "hutan acak". Implikasinya adalah untuk hasil hutan yang lengkap.
EngrStudent
3
Menariknya, misalnya Anda adalah linear dalam prediktor - jika Anda mengubah mereka pertama. Persamaan Anda adalah , jadi dengan mengambil kuadrat dan mengubahnya menjadi model linier. Faktanya, ini adalah salah satu contoh yang digunakan oleh Friedman, Hastie & Tibshirani untuk menunjukkan bahwa boosting cocok dengan model dimensi rendah (aditif, dalam kasus tunggul). x 1 x 2y=x12+x22x1x2
Hong Ooi
3
@ user777, saya telah menggunakan hutan acak untuk pengurangan dimensi terhadap masalah kompleks selama bertahun-tahun. Mantan majikan saya, Intel Semiconductor, memiliki proses produksi yang memiliki 20k kolom dan 20k langkah, dan untuk di bawah 10 cacat menggunakan ini sebagai bagian dari rangkaian alat analitik untuk beralih dari 20k kolom, menjadi 30 kolom. Mereka mengajar kursus secara internal, dan memberi kuliah tentang konten secara eksternal. ( web.stanford.edu/class/ee392m/Lecture3Tuv.pdf ) "Hutan" adalah alat yang sangat kuat dan Anda mengambil satu jalan yang buruk. Ada dua yang benar-benar bagus yang Anda lewatkan.
EngrStudent
2
@EngrStudent "Intel menggunakan RF untuk beralih dari banyak kolom menjadi lebih sedikit." Itulah yang dilakukan demonstrasi saya. Itu juga menjawab pertanyaan khusus OP tentang apakah fitur-fitur itu dapat digunakan secara menguntungkan dalam model linier, dan jawaban saya adalah "secara umum mereka tidak akan langsung berguna, tetapi dalam contoh ini, Anda mungkin menemukan mereka berguna di bawah transformasi."
Pasang kembali Monica
12

Jawaban oleh @Sycorax sangat fantastis. Selain aspek-aspek yang sepenuhnya dijelaskan dari masalah yang terkait dengan model fit, ada alasan lain untuk tidak mengejar proses multi-langkah seperti menjalankan hutan acak, laso, atau jaring elastis untuk "belajar" yang menampilkan fitur untuk regresi tradisional. Regresi biasa tidak akan tahu tentang hukuman yang benar berlangsung selama pengembangan hutan acak atau metode lainnya, dan akan cocok efek unpenalized yang buruk bias tampil terlalu kuat dalam memprediksi . Ini tidak akan berbeda dari menjalankan pemilihan variabel bertahap dan melaporkan model akhir tanpa memperhitungkan bagaimana hal itu tiba.Y

Frank Harrell
sumber
2
Terima kasih, Dr. Harrell! Dalam pikiran saya, jika OP yang menggunakan pipa analisis ini, OP akan melakukan RF down-seleksi dan model linier pas dalam (silang) skema validasi mereka. Apakah itu cukup untuk mengurangi bias yang Anda gambarkan, atau apakah ada masalah lain yang bersembunyi di sini yang saya lewatkan?
Pasang kembali Monica
2
Saya tidak tahu bagaimana melakukan model linier yang tepat "di dalam" skema. Saya tidak tahu cara mengurangi bias overfitting / estimasi yang akan dihasilkan. Mungkin pendekatan yang lebih baik adalah pendekatan model, kadang-kadang disebut pra-pengkondisian. Di sini Anda menggunakan model tradisional atau pohon tunggal (yang akan membutuhkan satu ton node) untuk memperkirakan output dari kotak hitam, mewarisi penyusutan kotak hitam.
Frank Harrell
8

Hutan acak yang dieksekusi dengan baik diterapkan pada masalah yang lebih "tepat hutan acak" dapat berfungsi sebagai filter untuk menghilangkan kebisingan, dan membuat hasil yang lebih berguna sebagai input ke alat analisis lainnya.

Penafian:

  • Apakah itu "peluru perak"? Tidak mungkin. Jarak tempuh akan bervariasi. Ia bekerja di mana ia bekerja, dan bukan di tempat lain.
  • Adakah cara Anda dapat menggunakannya secara salah dan mendapatkan jawaban yang ada di domain sampah-ke-voodoo? Anda betcha. Seperti setiap alat analitik, ia memiliki batasan.
  • Jika Anda menjilat katak, apakah napas Anda akan berbau seperti katak? mungkin. Saya tidak punya pengalaman di sana.

Saya harus memberikan "berteriak" untuk "mengintip" saya yang membuat "Laba-laba". ( tautan ) Contoh masalah mereka menginformasikan pendekatan saya. ( tautan ) Saya juga menyukai estimator Theil-Sen, dan berharap saya bisa memberikan alat peraga kepada Theil dan Sen.

Jawaban saya bukan tentang bagaimana melakukan kesalahan, tetapi tentang bagaimana cara kerjanya jika Anda benar. Sementara saya menggunakan suara "sepele", saya ingin Anda berpikir tentang suara "non-sepele" atau "terstruktur".

Salah satu kekuatan hutan acak adalah seberapa baik berlaku untuk masalah dimensi tinggi. Saya tidak dapat menampilkan kolom 20k (alias ruang dimensi 20k) dengan cara visual yang bersih. Ini bukan tugas yang mudah. Namun, jika Anda memiliki masalah 20k-dimensi, hutan acak mungkin menjadi alat yang baik di sana ketika sebagian besar lainnya jatuh datar di "wajah" mereka.

Ini adalah contoh menghilangkan noise dari sinyal menggunakan hutan acak.

#housekeeping
rm(list=ls())

#library
library(randomForest)

#for reproducibility
set.seed(08012015)

#basic
n <- 1:2000
r <- 0.05*n +1 
th <- n*(4*pi)/max(n)

#polar to cartesian
x1=r*cos(th) 
y1=r*sin(th)

#add noise
x2 <- x1+0.1*r*runif(min = -1,max = 1,n=length(n))
y2 <- y1+0.1*r*runif(min = -1,max = 1,n=length(n))

#append salt and pepper
x3 <- runif(min = min(x2),max = max(x2),n=length(n)/2)
y3 <- runif(min = min(y2),max = max(y2),n=length(n)/2)

x4 <- c(x2,x3)
y4 <- c(y2,y3)
z4 <- as.vector(matrix(1,nrow=length(x4)))

#plot class "A" derivation
plot(x1,y1,pch=18,type="l",col="Red", lwd=2)
points(x2,y2)
points(x3,y3,pch=18,col="Blue")
legend(x = 65,y=65,legend = c("true","sampled","false"),
col = c("Red","Black","Blue"),lty = c(1,-1,-1),pch=c(-1,1,18))

Izinkan saya menjelaskan apa yang sedang terjadi di sini. Gambar di bawah ini menunjukkan data pelatihan untuk kelas "1". Kelas "2" adalah seragam acak di atas domain dan rentang yang sama. Anda dapat melihat bahwa "informasi" dari "1" sebagian besar adalah spiral, tetapi telah rusak dengan materi dari "2". Memiliki 33% dari data Anda yang rusak dapat menjadi masalah bagi banyak alat yang pas. Theil-Sen mulai menurun sekitar 29%. ( tautan )

masukkan deskripsi gambar di sini

Sekarang kami memisahkan informasi, hanya memiliki gagasan tentang apa itu noise.

#Create "B" class of uniform noise
x5 <- runif(min = min(x4),max = max(x4),n=length(x4))
y5 <- runif(min = min(y4),max = max(y4),n=length(x4))
z5 <- 2*z4 

#assemble data into frame 
data <- data.frame(c(x4,x5),c(y4,y5),as.factor(c(z4,z5)))
names(data) <- c("x","y","z")

#train random forest - I like h2o, but this is textbook Breimann
fit.rf <- randomForest(z~.,data=data,
                       ntree = 1000, replace=TRUE, nodesize = 20)
data2 <- predict(fit.rf,newdata=data[data$z==1,c(1,2)],type="response")

#separate class "1" from training data
idx1a <- which(data[,3]==1)

#separate class "1" from the predicted data
idx1b <- which(data2==1)

#show the difference in classes before and after RF based filter
plot(data[idx1a,1],data[idx1a,2])
points(data[idx1b,1],data[idx1b,2],col="Red")

Inilah hasil yang pas:

masukkan deskripsi gambar di sini

Saya sangat suka ini karena dapat menunjukkan kekuatan dan kelemahan dari metode yang layak untuk masalah yang sulit pada saat yang sama. Jika Anda melihat di dekat pusat Anda dapat melihat bagaimana ada lebih sedikit penyaringan. Skala informasi geometris kecil dan hutan acak tidak ada. Ia mengatakan sesuatu tentang jumlah node, jumlah pohon, dan kepadatan sampel untuk kelas 2. Ada juga "celah" dekat (-50, -50), dan "jet" di beberapa lokasi. Namun, secara umum, penyaringannya layak.

Bandingkan dengan SVM

Berikut adalah kode yang memungkinkan perbandingan dengan SVM:

#now to fit to svm
fit.svm <-  svm(z~., data=data, kernel="radial",gamma=10,type = "C")

x5 <- seq(from=min(x2),to=max(x2),by=1)
y5 <- seq(from=min(y2),to=max(y2),by=1)

count <- 1
x6 <- numeric()
y6 <- numeric()
for (i in 1:length(x5)){

     for (j in 1:length(y5)){
          x6[count]<-x5[i]
          y6[count]<-y5[j]
          count <- count+1
     }
}

data4 <- data.frame(x6,y6)
names(data4) <- c("x","y")

data4$z <- predict(fit.svm,newdata=data4)

idx4 <- which(data4$z==1,arr.ind=TRUE)


plot(data4[idx4,1],data4[idx4,2],col="Gray",pch=20)
points(data[idx1b,1],data[idx1b,2],col="Blue",pch=20)
lines(x1,y1,pch=18,col="Green", lwd=2)
grid()
legend(x = 65,y=65,
       legend = c("true","from RF","From SVM"),
       col = c("Green","Blue","Gray"),lty = c(1,-1,-1),pch=c(-1,20,15),pt.cex=c(1,1,2.25))

Ini menghasilkan gambar berikut.

masukkan deskripsi gambar di sini

Ini adalah SVM yang layak. Abu-abu adalah domain yang dikaitkan dengan kelas "1" oleh SVM. Titik-titik biru adalah sampel yang terkait dengan kelas "1" oleh RF. Filter berbasis RF berkinerja sebanding dengan SVM tanpa dasar yang dipaksakan secara eksplisit. Dapat dilihat bahwa "data ketat" di dekat pusat spiral jauh lebih "rapat" diselesaikan oleh RF. Ada juga "pulau-pulau" menuju "ekor" di mana RF menemukan hubungan yang tidak dimiliki SVM.

Saya terhibur. Tanpa latar belakang, saya melakukan salah satu hal awal yang juga dilakukan oleh kontributor yang sangat baik di lapangan. Penulis asli menggunakan "distribusi referensi" ( tautan , tautan ).

SUNTING:

Terapkan FOREST acak ke model ini:
Sementara user777 memiliki pemikiran bagus tentang CART yang menjadi elemen dari hutan acak, premis dari hutan acak adalah "kumpulan ensemble pelajar yang lemah". CART dikenal sebagai pembelajar yang lemah tetapi tidak ada yang dekat dengan "ansambel". "Ensemble" meskipun dalam hutan acak dimaksudkan "dalam batas sejumlah besar sampel". Jawaban user777, di sebar, menggunakan setidaknya 500 sampel dan yang mengatakan sesuatu tentang keterbacaan manusia dan ukuran sampel dalam kasus ini. Sistem visual manusia (itu sendiri ansambel peserta didik) adalah sensor dan pengolah data yang luar biasa dan menemukan nilai yang memadai untuk kemudahan pemrosesan.

Jika kita mengambil bahkan pengaturan default pada alat acak-hutan, kita dapat mengamati perilaku peningkatan kesalahan klasifikasi untuk beberapa pohon pertama, dan tidak mencapai tingkat satu pohon sampai ada sekitar 10 pohon. Awalnya kesalahan tumbuh pengurangan kesalahan menjadi stabil di sekitar 60 pohon. Maksud saya dengan stabil

x        <- cbind(x1, x2)
plot(rf,type="b",ylim=c(0,0.06))
grid()

Yang menghasilkan:
masukkan deskripsi gambar di sini

Jika alih-alih melihat "pembelajar lemah minimum" kita melihat "ansambel lemah minimum" yang disarankan oleh heuristik yang sangat singkat untuk pengaturan default alat, hasilnya agak berbeda.

Catatan, saya menggunakan "garis" untuk menggambar lingkaran yang mengindikasikan tepi di atas perkiraan. Anda dapat melihat bahwa itu tidak sempurna, tetapi jauh lebih baik daripada kualitas seorang pembelajar tunggal.

masukkan deskripsi gambar di sini

Pengambilan sampel asli memiliki 88 sampel "interior". Jika ukuran sampel ditingkatkan (memungkinkan ansambel diterapkan) maka kualitas aproksimasi juga meningkat. Jumlah pelajar yang sama dengan 20.000 sampel membuat kecocokan yang lebih baik.

masukkan deskripsi gambar di sini

Informasi input berkualitas jauh lebih tinggi juga memungkinkan evaluasi jumlah pohon yang sesuai. Inspeksi konvergensi menunjukkan bahwa 20 pohon adalah jumlah minimum yang cukup dalam kasus khusus ini, untuk mewakili data dengan baik.

masukkan deskripsi gambar di sini

EngrStudent - Pasang kembali Monica
sumber
Bagaimana ini membuktikan / membantah bahwa RF dapat digunakan untuk memilih fitur berkualitas tinggi untuk model linier? Anda tidak mendiskusikan pemilihan fitur atau model linier dalam jawaban Anda.
Pasang kembali Monica
premis penanya adalah tentang menggunakan RF sebagai pra-filter kemudian melihat parameter model linier. Dia tidak melihat parameter hutan. Ketika saya membacanya, karena kurangnya kedalaman atau kekhususan, "model linier berganda" tampak sekunder. Bagi saya ini tampak seperti "dapat preprocess / membersihkan data RF sebelum menempelkannya ke dalam alat analitik x".
EngrStudent
Saya melihat artefak horisontal dan vertikal. Saya tergoda untuk membuat "data konjugat" pada koordinat yang diputar 45 derajat, dan menambahkan kolom ke RF. Saya bertaruh bahwa transformasi seperti itu akan mengurangi jumlah artefak, meskipun saya tidak yakin bagaimana itu akan mengubah parameter input.
EngrStudent
2
Sebagai tambahan, "hutan rotasi" adalah variasi terbaru-ish pada ide ini, di mana PCA digunakan untuk menentukan basis baru. ncbi.nlm.nih.gov/pubmed/16986543
Monica
1
Rapi: Liu, Fei Tony, Ting, Kai Ming dan Zhou, Zhi-Hua. "Hutan isolasi." Penambangan Data, 2008. ICDM'08. Konferensi Internasional IEEE kedelapan pada.
EngrStudent