PCA dan split kereta / tes

35

Saya memiliki dataset yang memiliki beberapa set label biner. Untuk setiap set label, saya melatih classifier, mengevaluasinya dengan validasi silang. Saya ingin mengurangi dimensi menggunakan analisis komponen utama (PCA). Pertanyaanku adalah:

Apakah mungkin untuk melakukan PCA satu kali untuk seluruh dataset dan kemudian menggunakan dataset baru dengan dimensi yang lebih rendah untuk validasi silang seperti dijelaskan di atas? Atau apakah saya perlu melakukan PCA terpisah untuk setiap set pelatihan (yang berarti melakukan PCA terpisah untuk setiap classifier dan untuk setiap lipatan validasi silang)?

Di satu sisi, PCA tidak menggunakan label apa pun. Di sisi lain, itu memang menggunakan data uji untuk melakukan transformasi, jadi saya khawatir itu bisa membiaskan hasilnya.

Saya harus menyebutkan bahwa selain menyelamatkan saya beberapa pekerjaan, melakukan PCA sekali pada seluruh dataset akan memungkinkan saya untuk memvisualisasikan dataset untuk semua set label sekaligus. Jika saya memiliki PCA yang berbeda untuk setiap set label, saya perlu memvisualisasikan setiap set label secara terpisah.

Bitwise
sumber
Untuk referensi di masa mendatang. Lihat pertanyaan ini tentang bagaimana melakukan validasi silang dengan PCA dalam R dengan caretpaket: PCA dan k-fold Cross Validation in Caret .
Amuba mengatakan Reinstate Monica
Lihat juga Zero-centering set pengujian setelah PCA pada set pelatihan .
Amuba kata Reinstate Monica
Lihat juga. Apakah benar-benar baik untuk melakukan pemilihan fitur tanpa pengawasan sebelum cross-validasi? , khususnya jawabannya oleh @cbeleites.
Amoeba berkata Reinstate Monica

Jawaban:

34

Untuk mengukur kesalahan generalisasi, Anda perlu melakukan yang terakhir: PCA terpisah untuk setiap set pelatihan (yang berarti melakukan PCA terpisah untuk setiap classifier dan untuk setiap flip CV).

Anda kemudian menerapkan transformasi yang sama ke set tes: yaitu Anda tidak melakukan PCA terpisah pada set tes! Anda mengurangi rata-rata (dan jika perlu dibagi dengan standar deviasi) dari set pelatihan, seperti yang dijelaskan di sini: Nol memusatkan set pengujian setelah PCA pada set pelatihan . Kemudian Anda memproyeksikan data ke PC set pelatihan.


  • Anda harus menentukan kriteria otomatis untuk jumlah PC yang akan digunakan.
    Karena ini hanyalah langkah pengurangan data pertama sebelum klasifikasi "aktual", menggunakan beberapa PC terlalu banyak kemungkinan tidak akan mengganggu kinerja. Jika Anda memiliki harapan berapa banyak PC yang baik dari pengalaman, Anda mungkin bisa menggunakannya.

  • Anda juga dapat menguji setelah itu apakah mengulang PCA untuk setiap model pengganti diperlukan (mengulang analisis hanya dengan satu model PCA). Saya pikir hasil tes ini layak dilaporkan.

  • Saya pernah mengukur bias tidak mengulangi PCA, dan menemukan bahwa dengan data klasifikasi spektroskopi saya, saya mendeteksi hanya setengah dari tingkat kesalahan generalisasi ketika tidak mengulangi PCA untuk setiap model pengganti.

Yang sedang berkata, Anda dapat membangun model PCA tambahan dari seluruh data yang ditetapkan untuk tujuan deskriptif (misalnya visualisasi). Pastikan Anda memisahkan kedua pendekatan dari satu sama lain.


Saya masih menemukan kesulitan untuk merasakan bagaimana PCA awal pada seluruh dataset akan bias hasilnya tanpa melihat label kelas.

Tetapi tidak melihat data. Dan jika varians antar kelas besar dibandingkan dengan varians dalam kelas, varians antar kelas akan mempengaruhi proyeksi PCA. Biasanya langkah PCA dilakukan karena Anda perlu menstabilkan klasifikasi. Yaitu, dalam situasi di mana kasus - kasus tambahan mempengaruhi model.

Jika varians antar-kelas kecil, bias ini tidak akan banyak, tetapi dalam kasus itu PCA tidak akan membantu untuk klasifikasi: proyeksi PCA kemudian tidak dapat membantu menekankan pemisahan antara kelas-kelas.

Cbeleites mendukung Monica
sumber
Terima kasih, ini persis seperti yang saya pikirkan, jadi senang mendengarnya dari sumber independen. Saya masih menemukan kesulitan untuk merasakan bagaimana PCA awal pada seluruh dataset akan membiaskan hasil tanpa melihat label kelas.
Bitwise
@Bitwise: silakan lihat edit saya
cbeleites mendukung Monica
Hi @cbeleites, saya ingin membuat utas ini utas "kanonik" untuk pertanyaan tentang PCA dan melatih / menguji pemisahan (ada banyak!) Dan tandai sebagai duplikat. Saya mengambil kebebasan untuk menambahkan satu kalimat ke jawaban Anda yang mungkin menjernihkan kesalahpahaman yang sering muncul dalam pertanyaan duplikat. Semoga Anda senang dengan hasil edit saya, tapi tolong periksa! +1, btw.
Amuba kata Reinstate Monica
@amoeba, terima kasih banyak. Ya, itu poin penting yang Anda tambahkan. Terima kasih banyak atas pekerjaan yang Anda lakukan untuk membersihkan koleksi pertanyaan.
cbeleites mendukung Monica
1
@FelipeAlmeida: ya
cbeleites mendukung Monica
2

Jawaban untuk pertanyaan ini tergantung pada desain eksperimental Anda. PCA dapat dilakukan pada seluruh kumpulan data selama Anda tidak perlu membuat model terlebih dahulu untuk mengetahui data yang ingin Anda prediksi. Jika Anda memiliki dataset di mana Anda memiliki banyak sampel, beberapa di antaranya diketahui dan beberapa tidak diketahui dan Anda ingin memprediksi yang tidak diketahui, termasuk yang tidak diketahui dalam PCA akan memberi Anda pandangan yang lebih kaya tentang keragaman data dan dapat membantu meningkatkan kinerja. dari model. Karena PCA tidak diawasi, itu tidak "memuncak" karena Anda dapat melakukan hal yang sama untuk sampel yang tidak diketahui seperti yang Anda bisa untuk yang diketahui.

Jika, di sisi lain, Anda memiliki kumpulan data di mana Anda harus membangun model sekarang dan di beberapa titik di masa depan Anda akan mendapatkan sampel baru yang harus diprediksi menggunakan model prebuilt itu, Anda harus melakukan PCA terpisah di setiap lipatan untuk memastikan itu akan digeneralisasi. Karena dalam hal ini kita tidak akan tahu seperti apa fitur-fitur baru itu dan kita tidak dapat membangun kembali model untuk memperhitungkan fitur-fitur baru, melakukan PCA pada data pengujian akan "memuncak". Dalam hal ini, baik fitur dan hasil untuk sampel yang tidak diketahui tidak tersedia ketika model akan digunakan dalam praktik, sehingga mereka tidak harus tersedia saat melatih model.

Barker
sumber
0

Lakukan yang terakhir, PCA pada set pelatihan setiap kali

Di PCA, kita belajar mengurangi matriks: U yang membantu kita mendapatkan proyeksiZ_train = U x X_train

Pada waktu ujian, kami menggunakan U yang sama yang dipelajari dari fase pelatihan dan kemudian menghitung proyeksiZ_test = U x X_test

Jadi, pada dasarnya kami memproyeksikan set uji ke ruang fitur berkurang yang diperoleh selama pelatihan.

Asumsi yang mendasari, adalah bahwa set tes dan kereta api harus berasal dari distribusi yang sama, yang menjelaskan metode di atas.

Vamshi G
sumber