Classifier pembelajaran mesin mana yang harus dipilih, secara umum? [Tutup]

207

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?

  1. Pohon keputusan
  2. SVM
  3. Bayesian
  4. Jaringan syaraf
  5. K-tetangga terdekat
  6. Q-learning
  7. Algoritma genetika
  8. Proses pengambilan keputusan Markov
  9. Jaringan saraf convolutional
  10. Regresi linier atau regresi logistik
  11. Boosting, bagging, ensambling
  12. Mendaki bukit secara acak atau mensimulasikan anil
  13. ...

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.

  1. 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.

  2. Juga, untuk pertanyaan yang agak terpisah, selain pengklasifikasi Bayesian standar, apakah ada metode 'canggih' untuk deteksi spam komentar (yang bertentangan dengan email spam)?

LM.
sumber
7
Sebagai balasan untuk "tempat terbaik Anda untuk menanyakan pertanyaan ini", Anda mungkin juga ingin mencoba stats.stackexchange.com
jxramos

Jawaban:

94

masukkan deskripsi gambar di sini

Pertama-tama, Anda perlu mengidentifikasi masalah Anda. Itu tergantung pada jenis data apa yang Anda miliki dan apa tugas yang Anda inginkan.

Jika Anda Predicting Category:

  • Kamu punya Labeled Data
    • Anda harus mengikuti Classification Approachdan algoritmanya
  • Anda tidak punya Labeled Data
    • Anda harus melakukannya Clustering Approach

Jika Anda Predicting Quantity:

  • Anda harus melakukannya Regression Approach

Jika tidak

  • Anda bisa melakukannya Dimensionality Reduction Approach

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/

Mukesh Chapagain
sumber
60

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.

George
sumber
5
Yap, saya tahu tentang validasi silang - Saya bertanya-tanya lebih banyak tentang alasan apriori untuk memilih classifier tertentu (dan kemudian saya bisa menggunakan validasi silang untuk menyetel beberapa parameter, atau untuk memilih antara beberapa set kecil pengklasifikasi). Terimakasih Meskipun!
LM.
45

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
39

Hal-hal yang dapat Anda pertimbangkan dalam memilih algoritma mana yang akan digunakan meliputi:

  1. 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.

  2. 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.

  3. 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.

  4. 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).

  5. Kompleksitas .

    Jaring saraf dan SVM dapat menangani klasifikasi non-linear yang kompleks.

RPVC
sumber
2
Bab buku ini dapat memberikan informasi lebih lanjut tentang kompleksitas nlp.stanford.edu/IR-book/html/htmledition/…
supermus
31

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.

gaborous
sumber
11

Sam Roweis dulu mengatakan bahwa Anda harus mencoba Bayes naif, regresi logistik, tetangga terdekat k dan diskriminan linier Fisher sebelum hal lain.

bayer
sumber
8

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.

adurat
sumber
1
Teorema “Tanpa Makan Siang Gratis” menyatakan bahwa tidak ada satu model yang paling cocok untuk setiap masalah. Asumsi model hebat untuk satu masalah mungkin tidak berlaku untuk masalah lain, jadi itu biasa dalam pembelajaran mesin untuk mencoba beberapa model dan menemukan satu yang paling cocok untuk masalah tertentu.
msarafzadeh
5

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.

Juan Camilo Zapata
sumber
3

Pemilihan Algoritma tergantung pada skenario dan jenis dan ukuran kumpulan data. Ada banyak faktor lain.

Ini adalah lembar contekan singkat untuk pembelajaran mesin dasar.

Di sini Anda dapat memvalidasi skenario Anda dengan lembar contekan sederhana

sarath sahadevan
sumber
-2

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.

Sarthak Dalabehera
sumber
1
Pertanyaan OP (Poster Asli) adalah: Bagaimana saya tahu classifier mana yang harus saya gunakan? Yang menyimpulkan bahwa mereka mencari Algoritma Klasifikasi . Harap benar-benar membaca pertanyaan sebelum menjawab.
Vetrivel PS