Misalkan saya sedang mengerjakan beberapa masalah klasifikasi. (Deteksi penipuan dan komentar spam adalah dua masalah yang saya kerjakan saat ini, tapi saya ingin tahu tentang tugas klasifikasi secara umum.)
Bagaimana saya tahu classifier mana yang harus saya gunakan?
- Pohon keputusan
- SVM
- Bayesian
- Jaringan syaraf
- K-tetangga terdekat
- Q-learning
- Algoritma genetika
- Proses pengambilan keputusan Markov
- Jaringan saraf convolutional
- Regresi linier atau regresi logistik
- Boosting, bagging, ensambling
- Mendaki bukit secara acak atau mensimulasikan anil
- ...
Dalam kasus-kasus manakah salah satu dari ini merupakan pilihan pertama "alami", dan apa prinsip untuk memilihnya?
Contoh jenis jawaban yang saya cari (dari buku Pengantar Informasi Pengambilan Manning et al. ):
Sebuah. Jika data Anda dilabeli, tetapi Anda hanya memiliki jumlah terbatas, Anda harus menggunakan classifier dengan bias tinggi (misalnya, Naif Bayes) .
Saya menduga ini karena classifier bias yang lebih tinggi akan memiliki varian yang lebih rendah, yang bagus karena jumlah data yang kecil.
b. Jika Anda memiliki banyak data, maka classifiernya tidak terlalu penting, jadi Anda sebaiknya memilih classifier dengan skalabilitas yang baik.
Apa pedoman lainnya? Bahkan jawaban seperti "jika Anda harus menjelaskan model Anda kepada beberapa orang manajemen tingkat atas, maka mungkin Anda harus menggunakan pohon keputusan, karena aturan keputusan cukup transparan" bagus. Saya kurang peduli tentang masalah implementasi / perpustakaan.
Juga, untuk pertanyaan yang agak terpisah, selain pengklasifikasi Bayesian standar, apakah ada metode 'canggih' untuk deteksi spam komentar (yang bertentangan dengan email spam)?
Jawaban:
Pertama-tama, Anda perlu mengidentifikasi masalah Anda. Itu tergantung pada jenis data apa yang Anda miliki dan apa tugas yang Anda inginkan.
Ada berbagai algoritma dalam setiap pendekatan yang disebutkan di atas. Pilihan algoritma tertentu tergantung pada ukuran dataset.
Sumber: http://scikit-learn.org/stable/tutorial/machine_learning_map/
sumber
Pemilihan model menggunakan validasi silang mungkin apa yang Anda butuhkan.
Validasi silang
Yang Anda lakukan hanyalah membagi dataset Anda menjadi k subset (lipatan) yang tidak tumpang tindih, melatih model menggunakan lipatan k-1 dan memperkirakan kinerjanya menggunakan lipatan yang Anda tinggalkan. Ini Anda lakukan untuk setiap kemungkinan kombinasi lipatan (pertama-tama biarkan lipatan pertama, lalu ke-2, ..., lalu ke-k, dan latih dengan lipatan yang tersisa). Setelah selesai, Anda memperkirakan kinerja rata-rata semua lipatan (mungkin juga varian / standar deviasi kinerja).
Cara memilih parameter k tergantung pada waktu yang Anda miliki. Nilai normal untuk k adalah 3, 5, 10 atau bahkan N, di mana N adalah ukuran data Anda (itu sama dengan validasi silang meninggalkan-satu-keluar ). Saya lebih suka 5 atau 10.
Pemilihan model
Katakanlah Anda memiliki 5 metode (ANN, SVM, KNN, dll) dan 10 kombinasi parameter untuk setiap metode (tergantung pada metode). Anda hanya perlu menjalankan validasi silang untuk setiap metode dan kombinasi parameter (5 * 10 = 50) dan pilih model, metode, dan parameter terbaik. Kemudian Anda melatih kembali dengan metode dan parameter terbaik pada semua data Anda dan Anda memiliki model akhir Anda.
Ada beberapa hal untuk dikatakan. Jika, misalnya, Anda menggunakan banyak metode dan kombinasi parameter untuk masing-masing, sangat mungkin Anda akan overfit. Dalam kasus seperti ini, Anda harus menggunakan validasi salib bersarang .
Validasi silang bersarang
Dalam validasi silang bersarang , Anda melakukan validasi silang pada algoritma pemilihan model.
Sekali lagi, Anda membagi data Anda menjadi lipatan k. Setelah setiap langkah, Anda memilih k-1 sebagai data pelatihan Anda dan yang tersisa sebagai data pengujian Anda. Kemudian Anda menjalankan pemilihan model (prosedur yang saya jelaskan di atas) untuk setiap kemungkinan kombinasi lipatan k tersebut. Setelah menyelesaikan ini, Anda akan memiliki model k, satu untuk setiap kombinasi lipatan. Setelah itu, Anda menguji setiap model dengan data tes yang tersisa dan memilih yang terbaik. Sekali lagi, setelah memiliki model terakhir Anda melatih yang baru dengan metode dan parameter yang sama pada semua data yang Anda miliki. Itu model terakhir Anda.
Tentu saja, ada banyak variasi metode ini dan hal-hal lain yang tidak saya sebutkan. Jika Anda memerlukan informasi lebih lanjut tentang ini, cari beberapa publikasi tentang topik ini.
sumber
Buku " OpenCV " memiliki dua halaman hebat tentang ini di halaman 462-463 . Mencari pratinjau Amazon untuk kata "diskriminatif" (mungkin juga buku google) akan membuat Anda melihat halaman yang dimaksud. Dua halaman ini adalah permata terbesar yang saya temukan dalam buku ini.
Pendeknya:
Meningkatkan - sering kali efektif ketika sejumlah besar data pelatihan tersedia.
Pohon acak - seringkali sangat efektif dan juga dapat melakukan regresi .
K-tetangga terdekat - hal paling sederhana yang dapat Anda lakukan, seringkali efektif tetapi lambat dan membutuhkan banyak memori .
Neural networks - Lambat untuk berlatih tetapi sangat cepat dijalankan , performanya masih optimal untuk pengenalan huruf .
SVM - Di antara yang terbaik dengan data terbatas , tetapi kalah terhadap boosting atau pohon acak hanya ketika set data besar tersedia.
sumber
Hal-hal yang dapat Anda pertimbangkan dalam memilih algoritma mana yang akan digunakan meliputi:
Apakah Anda perlu melatih secara bertahap (tidak seperti batch)?
Jika Anda perlu memperbarui classifier Anda dengan data baru sering (atau Anda memiliki banyak data), Anda mungkin ingin menggunakan Bayesian. Jaring saraf dan SVM perlu mengerjakan data pelatihan dalam sekali jalan.
Apakah data Anda terdiri dari hanya kategori , atau hanya numerik , atau keduanya ?
Saya pikir Bayesian bekerja paling baik dengan data kategorikal / binomial. Pohon keputusan tidak dapat memprediksi nilai numerik.
Apakah Anda atau audiens Anda perlu memahami cara kerja pengklasifikasi?
Gunakan Bayesian atau pohon keputusan, karena ini dapat dengan mudah dijelaskan kepada kebanyakan orang. Jaringan saraf dan SVM adalah "kotak hitam" dalam arti bahwa Anda tidak dapat benar-benar melihat bagaimana mereka mengklasifikasikan data.
Berapa kecepatan klasifikasi yang Anda butuhkan?
SVM cepat dalam hal pengelompokan karena mereka hanya perlu menentukan sisi mana dari "baris" data Anda. Pohon keputusan bisa lambat terutama ketika kompleks (misalnya banyak cabang).
Kompleksitas .
Jaring saraf dan SVM dapat menangani klasifikasi non-linear yang kompleks.
sumber
Seperti yang sering dikatakan oleh Profesor Andrew Ng: selalu mulai dengan menerapkan algoritma yang kasar dan kotor, kemudian secara iteratif memperbaikinya .
Untuk klasifikasi, Naive Bayes adalah starter yang baik, karena memiliki kinerja yang baik, sangat scalable dan dapat beradaptasi dengan hampir semua jenis tugas klasifikasi. Juga 1NN (K-Nearest Neighbors dengan hanya 1 tetangga) adalah algoritma yang paling cocok (karena data akan menjadi model, dan dengan demikian Anda tidak perlu peduli dengan kesesuaian dimensi dari batas keputusan Anda), satu-satunya masalah adalah biaya komputasi (kuadratik karena Anda perlu menghitung matriks jarak, sehingga mungkin tidak cocok untuk data dimensi tinggi).
Algoritma pemula yang baik lainnya adalah Hutan Acak (terdiri dari pohon keputusan), ini sangat dapat diskalakan untuk sejumlah dimensi dan memiliki kinerja yang umumnya cukup dapat diterima. Lalu akhirnya, ada algoritma genetika , yang skala mengagumkan untuk setiap dimensi dan data dengan pengetahuan minimal data itu sendiri, dengan implementasi yang paling minimal dan paling sederhana adalah algoritma genetika mikroba (hanya satu baris kode C! Oleh Inman Harvey di 1996), dan salah satu yang paling kompleks adalah CMA-ES dan MOGA / e-MOEA.
Dan ingat bahwa, seringkali, Anda tidak dapat benar-benar tahu apa yang akan bekerja paling baik pada data Anda sebelum Anda mencoba algoritma yang sebenarnya.
Sebagai catatan tambahan, jika Anda ingin kerangka teoretis untuk menguji hipotesis dan algoritme kinerja teoretis untuk masalah yang diberikan, Anda dapat menggunakan kerangka belajar PAC (Mungkin kira-kira benar) (berhati-hatilah: sangat abstrak dan kompleks!), Tetapi untuk Singkatnya, inti dari pembelajaran PAC mengatakan bahwa Anda harus menggunakan algoritma yang kurang kompleks, tetapi cukup kompleks (kompleksitas menjadi dimensi maksimum yang dapat ditampung oleh algo) yang dapat disesuaikan dengan data Anda. Dengan kata lain, gunakan pisau cukur Occam.
sumber
Sam Roweis dulu mengatakan bahwa Anda harus mencoba Bayes naif, regresi logistik, tetangga terdekat k dan diskriminan linier Fisher sebelum hal lain.
sumber
Menurut saya itu adalah Anda selalu menjalankan pengklasifikasi dasar pertama untuk mendapatkan beberapa rasa data Anda. Lebih sering daripada tidak (dalam pengalaman saya setidaknya) mereka sudah cukup baik.
Jadi, jika Anda memiliki data yang diawasi, latih classifier Naive Bayes. Jika Anda memiliki data yang tidak diawasi, Anda dapat mencoba pengelompokan k-means.
Sumber lain adalah salah satu video kuliah dari serangkaian video Stanford Machine Learning , yang saya tonton beberapa waktu lalu. Dalam video 4 atau 5, saya pikir, dosen membahas beberapa konvensi yang diterima secara umum ketika melatih pengklasifikasi, keuntungan / pengorbanan, dll.
sumber
Anda harus selalu mempertimbangkan pertukaran inferensi vs prediksi .
Jika Anda ingin memahami hubungan kompleks yang terjadi dalam data Anda maka Anda harus pergi dengan algoritma inferensi yang kaya (misalnya regresi linier atau laso). Di sisi lain, jika Anda hanya tertarik pada hasilnya, Anda bisa menggunakan algoritma berdimensi tinggi dan lebih kompleks (tapi kurang bisa ditafsirkan), seperti jaringan saraf.
sumber
Pemilihan Algoritma tergantung pada skenario dan jenis dan ukuran kumpulan data. Ada banyak faktor lain.
Ini adalah lembar contekan singkat untuk pembelajaran mesin dasar.
sumber
Pertama-tama, itu tergantung pada jenis masalah yang Anda hadapi apakah itu klasifikasi atau regresi. Kemudian pilih model Anda dengan bijak. Itu tergantung pada model tertentu satu model tertentu mengungguli model lain. Misalkan Anda sedang mengerjakan wine_dataset dari sklearn library dan pertama-tama Anda mencoba untuk melatih data dengan kernel svm dengan linear dan Anda mendapatkan semacam akurasi dan kemudian Anda berpikir bahwa itu tidak memuaskan maka Anda mencoba untuk melatih data Anda dengan DecisionTreeClassifier () dan kemudian Anda mencoba dengan RandomForestClassifier (). Setelah itu, akurasi mana yang lebih baik atau Anda dapat mengatakan yang cocok dengan data Anda, Anda dapat menyimpulkannya. Ada sedikit perbedaan sintaksis yang Anda akan temukan sambil terus mengubah model untuk pengujian. Jadi semuanya terbaik dan pahami masalahnya dengan baik.
sumber