Pemilihan fitur dan penyetelan parameter dengan tanda sisipan untuk hutan acak

12

Saya memiliki data dengan beberapa ribu fitur dan saya ingin melakukan pemilihan fitur rekursif (RFE) untuk menghapus yang tidak informatif. Saya melakukan ini dengan tanda sisipan dan RFE. Namun, saya mulai berpikir, jika saya ingin mendapatkan kecocokan regresi terbaik (hutan acak, misalnya), kapan saya harus melakukan penyetelan parameter ( mtryuntuk RF)? Yaitu, seperti yang saya pahami caret melatih RF berulang kali pada himpunan bagian fitur yang berbeda dengan mtry tetap. Saya kira yang optimal mtryharus ditemukan setelah pemilihan fitur selesai, tetapi akankah mtrynilai yang menggunakan caret mempengaruhi subset fitur yang dipilih? Menggunakan tanda sisipan dengan rendah mtryjauh lebih cepat, tentu saja.

Semoga ada yang bisa menjelaskan hal ini kepada saya.

Dmitri
sumber
2
RF memiliki pilihan fitur bawaan yang kuat - tidak perlu menggunakan RFE sehingga orang bisa menyetel saja dan selesai melakukannya.
Yevgeny

Jawaban:

11

Satu hal yang mungkin ingin Anda perhatikan adalah hutan acak yang diatur, yang secara khusus dirancang untuk pemilihan fitur. Makalah ini menjelaskan konsepnya, dan bagaimana mereka berbeda dari hutan acak normal

Seleksi Fitur melalui Pohon yang Diatur

Ada juga paket CRAN RRF yang dibangun di atas randomForest yang akan memungkinkan Anda untuk mengimplementasikannya dengan mudah di R. Saya sendiri beruntung dengan metodologi ini.

Mengenai pertanyaan awal Anda, satu-satunya saran yang bisa saya berikan adalah bahwa jika Anda memiliki banyak collinearity maka Anda perlu menggunakan ukuran pohon yang lebih kecil. Ini memungkinkan algoritma untuk menentukan kepentingan dengan sedikit gangguan dari efek collinearity.

Tom. Rayley
sumber
1

Anda mungkin dapat menggunakan caretFuncs Sesuatu seperti ini:

myRFE <- caretFuncs
myRFE$summary <- twoClassSummary  (default is defaultSummary)

rctrl <- rfeControl(method='repeatedcv', repeats=5, number=10,
                   functions=myRFE)

tctrl <- trainControl(method = "cv",
                      classProbs = TRUE,
                      summaryFunction = twoClassSummary)

rfeObj = rfe(x,y,sizes=seq(1,ncol(x),2),
             rfeControl=rctrl,  
             # to be passed to train()
             method='rf',
             importance=T,  # do not forget this
             ntree=1000,
             metric = "ROC",
             tuneLength = 10,
             # mtry=c(1,3,5,50),
             # specify the exact mtry, or tuneLength
             # can auto truncate the grid to minimal sizes (with or without warning)
             # p <- ncol(x) ... if (mtry < 1 || mtry > p) warning("invalid try: reset to within valid range") try <- max(1, min(p, round(try))) 
             trControl=tctrl)

Juga, seseorang dapat memeriksa valSelRFpaket. Tidak yakin bagaimana perbedaannya dari yang regularized random forestdisebutkan di sini.

Jerry T
sumber