Saya melihat bahwa banyak algoritma pembelajaran mesin bekerja lebih baik dengan pembatalan rata-rata dan penyamaan kovarian. Sebagai contoh, Neural Networks cenderung lebih cepat konvergen, dan K-Means umumnya memberikan pengelompokan yang lebih baik dengan fitur-fitur yang sudah diproses sebelumnya. Saya tidak melihat intuisi di balik langkah-langkah pra-pemrosesan ini mengarah pada peningkatan kinerja. Bisakah seseorang menjelaskan ini padaku?
61
Memang benar bahwa preprocessing dalam pembelajaran mesin agak merupakan seni yang sangat hitam. Tidak banyak ditulis di kertas mengapa beberapa langkah preprocessing sangat penting untuk membuatnya bekerja. Saya juga tidak yakin apakah itu dipahami dalam setiap kasus. Untuk membuat segalanya lebih rumit, itu sangat tergantung pada metode yang Anda gunakan dan juga pada domain masalah.
Beberapa metode misalnya adalah transformasi affine invarian. Jika Anda memiliki jaringan saraf dan hanya menerapkan transformasi affine ke data Anda, jaringan tidak kehilangan atau mendapatkan apa pun dalam teori. Namun dalam praktiknya, jaringan saraf bekerja paling baik jika inputnya terpusat dan putih. Itu berarti bahwa kovarians mereka adalah diagonal dan rata-rata adalah vektor nol. Mengapa ini meningkatkan banyak hal? Itu hanya karena optimalisasi jaringan syaraf bekerja lebih anggun, karena fungsi aktivasi tersembunyi tidak menjenuhkan secepat itu dan dengan demikian tidak memberi Anda gradien mendekati nol pada awal pembelajaran.
Metode lain, misalnya K-Means, mungkin memberi Anda solusi yang sama sekali berbeda tergantung pada preprocessing. Ini karena transformasi affine menyiratkan perubahan dalam ruang metrik: jarak Euclidean dengan dua sampel akan berbeda setelah transformasi itu.
Pada akhirnya, Anda ingin memahami apa yang Anda lakukan terhadap data. Misalnya memutihkan dalam visi komputer dan sampel normalisasi bijak adalah sesuatu yang otak manusia juga dalam pipa visinya.
sumber
Beberapa ide, referensi, dan plot tentang mengapa normalisasi input dapat berguna untuk JST dan k-means:
K-means :
Contoh di Matlab:
(FYI: Bagaimana saya bisa mendeteksi jika dataset saya berkerumun atau tidak terputus (yaitu membentuk satu cluster tunggal )
Cluster terdistribusi :
Jaringan saraf tiruan (input) :
Jaringan saraf tiruan (input / output)
Menariknya, mengubah unit pengukuran bahkan dapat menyebabkan orang melihat struktur pengelompokan yang sangat berbeda: Kaufman, Leonard, dan Peter J. Rousseeuw .. "Menemukan grup dalam data: Pengantar analisis klaster." (2005).
Kaufman et al. berlanjut dengan beberapa pertimbangan menarik (halaman 11):
sumber
Mengapa penskalaan fitur berfungsi? Saya bisa memberi Anda sebuah contoh (dari Quora )
sumber
Ada dua masalah terpisah:
a) mempelajari fungsi yang tepat misalnya k-means: skala input pada dasarnya menentukan kesamaan, sehingga kluster yang ditemukan bergantung pada penskalaan. regularisasi - mis. l2 regularisasi bobot - Anda menganggap setiap bobot harus "sama kecil" - jika data Anda tidak diskalakan "dengan tepat" ini tidak akan menjadi kasus
b) optimisasi, yaitu dengan gradient descent (mis. sebagian besar jaringan saraf). Untuk penurunan gradien, Anda harus memilih tingkat pembelajaran ... tetapi tingkat pembelajaran yang baik (setidaknya pada lapisan tersembunyi 1) tergantung pada penskalaan input: input kecil [relevan] biasanya akan membutuhkan bobot yang lebih besar, sehingga Anda ingin pembelajaran yang lebih besar nilai untuk bobot tersebut (untuk sampai di sana lebih cepat), dan vv untuk input besar ... karena Anda hanya ingin menggunakan tingkat pembelajaran tunggal, Anda mengubah skala input Anda. (dan memutihkan yaitu menghias juga penting karena alasan yang sama)
sumber
Saya menyelesaikan Jaringan Syaraf Tiruan Geoffrey Hinton untuk Pembelajaran Mesin di Coursera, dan ia menjelaskan hal ini dalam kuliah 6b: "Satu tas trik untuk penurunan gradien mini-batch." Anda dapat melihat pratinjau video tanpa mendaftar atau masuk.
sumber
Makalah ini hanya membahas tentang k-means, tetapi menjelaskan dan membuktikan persyaratan pemrosesan data dengan cukup baik.
.
.
Sumber: http://maxwellsci.com/print/rjaset/v6-3299-3303.pdf
sumber
Pra-pemrosesan sering berhasil karena tidak menghapus fitur data yang tidak terkait dengan masalah klasifikasi yang Anda coba pecahkan. Pikirkan misalnya tentang mengklasifikasikan data suara dari speaker yang berbeda. Fluktuasi dalam kenyaringan (amplitudo) mungkin tidak relevan, sedangkan spektrum frekuensi adalah aspek yang sangat relevan. Jadi dalam kasus ini, normalisasi amplitudo akan sangat membantu untuk sebagian besar algoritma ML, karena menghilangkan aspek data yang tidak relevan dan akan menyebabkan jaringan saraf overfit untuk pola palsu.
sumber
Saya pikir ini dilakukan hanya agar fitur dengan nilai yang lebih besar tidak menaungi efek fitur dengan nilai yang lebih kecil ketika mempelajari classifier. Ini menjadi sangat penting jika fitur dengan nilai yang lebih kecil benar-benar berkontribusi terhadap pemisahan kelas. Pengklasifikasi seperti regresi logistik akan mengalami kesulitan mempelajari batas keputusan, misalnya jika ada di tingkat mikro dari fitur dan kami memiliki fitur lain dari urutan jutaan . Juga membantu algoritma untuk lebih baik. Karenanya, kami tidak mengambil risiko apa pun saat mengodekannya ke dalam algoritme kami. Jauh lebih mudah bagi penggolong, untuk mempelajari kontribusi (bobot) fitur dengan cara ini. Juga berlaku untuk K berarti ketika menggunakan norma-norma euclidean (kebingungan karena skala). Beberapa algoritma dapat bekerja tanpa normalisasi juga.
sumber