Saya baru saja menonton ulang kuliah dari kursus Machine Learning on Coursera. Di bagian di mana profesor membahas PCA untuk pra-pemrosesan data dalam aplikasi pembelajaran yang diawasi, ia mengatakan PCA hanya boleh dilakukan pada data pelatihan dan kemudian pemetaan digunakan untuk mengubah validasi silang dan set tes. Lihat juga PCA dan split kereta / tes .
Namun, dalam caret
paket R, data pelatihan yang Anda berikan ke train()
fungsi sudah diproses oleh PCA. Jadi ketika algoritma melakukan validasi k-fold cross, set validasi silang telah diproses dengan PCA via preProcess()
dan predict()
sebenarnya digunakan dalam "fitting" PCA.
Apakah pemahaman saya tentang situasi itu benar? Ie caret's prosedur untuk validasi silang dengan PCA (atau bahkan, dengan metode rescaling / centering) adalah "salah" karena pra-pemrosesan data dilakukan pada set validasi silang serta set pelatihan? Dan jika demikian, seberapa besar dampak ini pada hasil?
sumber
Jawaban:
Saya tidak melihat ceramah, jadi saya tidak bisa mengomentari apa yang dikatakan.
My $ 0,02: Jika Anda ingin mendapatkan estimasi kinerja yang baik menggunakan resampling, Anda harus benar-benar melakukan semua operasi selama resampling alih-alih sebelumnya. Ini benar-benar berlaku untuk pemilihan fitur [1] serta operasi non-sepele seperti PCA. Jika itu menambah ketidakpastian hasil, sertakan dalam resampling.
Pikirkan tentang regresi komponen utama: PCA diikuti oleh regresi linier pada beberapa komponen. Parameter estimasi PCA (dengan noise) dan jumlah komponen juga harus dipilih (nilai yang berbeda akan menghasilkan hasil yang berbeda => lebih banyak noise).
Katakanlah kita menggunakan CV 10 kali lipat dengan skema 1:
atau skema 2:
Itu harus jelas daripada pendekatan kedua harus menghasilkan perkiraan kesalahan yang mencerminkan ketidakpastian yang disebabkan oleh PCA, pemilihan jumlah komponen dan regresi linier. Akibatnya, CV dalam skema pertama tidak tahu apa yang mendahuluinya.
Saya bersalah karena tidak selalu melakukan semua operasi dengan resampling, tetapi hanya ketika saya tidak terlalu peduli dengan perkiraan kinerja (yang tidak biasa).
Apakah ada banyak perbedaan antara kedua skema tersebut? Itu tergantung pada data dan pra-pemrosesan. Jika Anda hanya memusatkan dan menskalakan, mungkin tidak. Jika Anda memiliki banyak data, mungkin tidak. Ketika ukuran pelatihan ditetapkan turun, risiko mendapatkan estimasi yang buruk naik, terutama jika n mendekati p.
Saya dapat mengatakan dengan pasti dari pengalaman bahwa tidak termasuk pemilihan fitur yang diawasi dalam resampling adalah ide yang sangat buruk (tanpa set pelatihan besar). Saya tidak melihat mengapa pra-pemrosesan akan kebal terhadap ini (sampai taraf tertentu).
@mchangun: Saya pikir jumlah komponen adalah parameter penyetelan dan Anda mungkin ingin memilihnya menggunakan perkiraan kinerja yang dapat digeneralisasikan. Anda dapat secara otomatis memilih K sedemikian sehingga setidaknya X% dari varians dijelaskan dan menyertakan proses itu dalam resampling sehingga kami memperhitungkan kebisingan dalam proses itu.
Maks
[1] Ambroise, C., & McLachlan, G. (2002). Bias seleksi dalam ekstraksi gen berdasarkan data ekspresi gen microarray. Prosiding National Academy of Sciences, 99 (10), 6562-6566.
sumber
Jangan melakukan pra-pemrosesan data sebelum menjalankan
train
fungsi! GunakanpreProcess
argumen untuk fungsi kereta, dan pra-pemrosesan akan diterapkan pada setiap iterasi pengambilan sampel ulang.mis. jangan lakukan ini:
melakukan hal ini!
sumber
pred <- predict(knnFit2, newdata)
mananewdata
tidak diskalakan. Apakah Caret cukup pintar untuk mengetahui bahwa ia perlu melakukan praProsesnewdata
sebelum menggunakannya untuk prediksi?