Genel olarak hangi makine öğrenme sınıflandırıcısı seçilir? [kapalı]


207

Bazı sınıflandırma problemi üzerinde çalıştığımı varsayalım. (Sahtekarlık tespiti ve yorum spam'ı şu anda üzerinde çalıştığım iki sorundur, ancak genel olarak herhangi bir sınıflandırma görevini merak ediyorum.)

Hangi sınıflandırıcıyı kullanmam gerektiğini nasıl bilebilirim?

  1. Karar ağacı
  2. SVM
  3. Bayes
  4. Sinir ağı
  5. K-en yakın komşuları
  6. Q-öğrenme
  7. Genetik Algoritma
  8. Markov karar süreçleri
  9. Evrişimli sinir ağları
  10. Doğrusal regresyon veya lojistik regresyon
  11. Destekleme, torbalama, ensambling
  12. Rastgele tepe tırmanma veya simüle tavlama
  13. ...

Hangi durumlarda bunlardan biri "doğal" ilk tercihtir ve bunu seçmenin ilkeleri nelerdir?

Aradığım cevap türlerine örnekler (Manning ve arkadaşlarının Bilgi Alma kitabına girişten ):

a. Verileriniz etiketliyse, ancak yalnızca sınırlı bir miktarınız varsa, yüksek önyargıya sahip bir sınıflandırıcı kullanmalısınız (örneğin, Naive Bayes) .

Ben daha yüksek bir önyargı sınıflandırıcı, küçük miktarda veri nedeniyle iyi olan daha düşük sapmaya sahip olacağını tahmin ediyorum.

b. Bir ton veriniz varsa, sınıflandırıcı gerçekten çok önemli değildir, bu nedenle muhtemelen iyi ölçeklenebilirliğe sahip bir sınıflandırıcı seçmelisiniz.

  1. Diğer yönergeler nelerdir? Hatta "modelinizi üst yönetimdeki bir kişiye açıklamanız gerekecekse, o zaman belki bir karar ağacı kullanmalısınız, çünkü karar kuralları oldukça şeffaftır" iyi. Yine de uygulama / kütüphane konularına daha az önem veriyorum.

  2. Ayrıca, biraz ayrı bir soru için, standart Bayes sınıflandırıcılarının yanı sıra, yorum spam'ı tespiti için (e-posta spam'ının aksine) 'en modern' teknik yöntemler var mı?


7
"Bu soruyu sormak için en iyi yer" yanıt olarak, stats.stackexchange.com
jxramos

Yanıtlar:


94

resim açıklamasını buraya girin

Her şeyden önce, sorununuzu tanımlamanız gerekir. Ne tür verileriniz olduğuna ve istediğiniz görevin ne olduğuna bağlıdır.

Eğer Predicting Category:

  • Var Labeled Data
    • Takip etmeniz Classification Approachve algoritmaları takip etmeniz gerekiyor
  • Sende yok Labeled Data
    • Gitmen gerek Clustering Approach

Eğer Predicting Quantity:

  • Gitmen gerek Regression Approach

Aksi takdirde

  • İçin gidebilirsin Dimensionality Reduction Approach

Yukarıda bahsedilen her yaklaşımda farklı algoritmalar vardır. Belirli bir algoritmanın seçimi veri kümesinin boyutuna bağlıdır.

Kaynak: http://scikit-learn.org/stable/tutorial/machine_learning_map/


60

Çapraz doğrulama kullanarak model seçimi ihtiyacınız olan şey olabilir.

Çapraz doğrulama

Yaptığınız şey, veri kümenizi örtüşmeyen alt kümelere (kıvrımlar) bölmek, k-1 kıvrımları kullanarak bir model eğitmek ve bıraktığınız kıvrımı kullanarak performansını tahmin etmektir. Bu, her olası kıvrım kombinasyonu için yaparsınız (önce 1. kat, sonra 2., ..., sonra kth bırakın ve kalan katlarla antrenman yapın). Bitirdikten sonra, tüm kıvrımların ortalama performansını tahmin edersiniz (belki de performansın varyansı / standart sapması).

K parametresinin nasıl seçileceği, sahip olduğunuz zamana bağlıdır. K için olağan değerler 3, 5, 10 veya hatta N'dir; burada N, verilerinizin boyutudur (bu, bir kerelik çapraz doğrulama ile aynıdır ). 5 veya 10'u tercih ederim.

Model seçimi

Diyelim ki her yöntemin (yönteme bağlı olarak) 5 yönteminiz (ANN, SVM, KNN, vb.) Ve 10 parametre kombinasyonu var. Her yöntem ve parametre kombinasyonu (5 * 10 = 50) için çapraz doğrulamayı çalıştırmanız ve en iyi modeli, yöntemi ve parametreleri seçmeniz yeterlidir. Daha sonra tüm verilerinizde en iyi yöntem ve parametrelerle yeniden antrenman yaparsınız ve son modeliniz olur.

Söyleyecek daha çok şey var. Örneğin, her biri için çok sayıda yöntem ve parametre kombinasyonu kullanırsanız, büyük olasılıkla fazla uyursunuz. Bu gibi durumlarda, iç içe çapraz doğrulamayı kullanmanız gerekir .

İç içe çapraz doğrulama

Gelen iç içe çapraz doğrulama , modeli seçme algoritması çapraz doğrulama gerçekleştirmek.

Yine, önce verilerinizi k kıvrımlara böldünüz. Her adımdan sonra, egzersiz verileriniz olarak k-1'i ve test verileriniz olarak kalanını seçin. Sonra bu k kıvrımlarının her olası kombinasyonu için model seçimini (yukarıda açıkladığım prosedür) çalıştırırsınız. Bunu bitirdikten sonra, her kat kombinasyonu için bir tane olmak üzere k modeliniz olacak. Bundan sonra, her modeli kalan test verileriyle test edersiniz ve en iyisini seçersiniz. Yine, son modele sahip olduktan sonra, sahip olduğunuz tüm veriler üzerinde aynı yöntem ve parametrelerle yeni bir model geliştirirsiniz. Bu senin son modelin.

Tabii ki, bu yöntemlerin ve bahsetmediğim diğer şeylerin birçok varyasyonu var. Bunlar hakkında daha fazla bilgiye ihtiyacınız varsa, bu konularla ilgili bazı yayınları arayın.


5
Evet, çapraz doğrulamayı biliyorum - Belirli bir sınıflandırıcıyı seçmek için a priori nedenleri hakkında daha fazla merak ediyordum (ve sonra bazı parametreleri ayarlamak veya bazı daha küçük sınıflandırıcılar arasında seçim yapmak için çapraz doğrulamayı kullanabilirdim). Yine de teşekkürler!
LM.

45

" OpenCV " kitabında 462-463 . Sayfalarda iki büyük sayfa vardır . Amazon önizlemesinde "ayrımcı" kelimesini (muhtemelen google kitaplar da) aramak, söz konusu sayfaları görmenizi sağlar. Bu iki sayfa, bu kitapta bulduğum en büyük mücevher.

Kısacası:

  • Artırma - genellikle büyük miktarda egzersiz verisi olduğunda etkilidir .

  • Rastgele ağaçlar - genellikle çok etkilidir ve regresyon da yapabilir .

  • K-en yakın komşular - yapabileceğiniz en basit şey, genellikle etkili ama yavaş ve çok fazla bellek gerektirir .

  • Sinir ağları - Yavaş eğitilir, ancak çalıştırılması çok hızlıdır , yine de harf tanıma için en uygun performanstır .

  • SVM - Sınırlı veri ile en iyiler arasında , ancak yalnızca büyük veri kümeleri mevcut olduğunda, artırıcı veya rastgele ağaçlara karşı kaybetme .


39

Hangi algoritmayı kullanacağınızı seçerken göz önünde bulundurmanız gerekenler şunları içerir:

  1. Kademeli olarak (toplu işlerin aksine) antrenman yapmanız mı gerekiyor ?

    Sınıflandırıcıyı sık sık yeni verilerle güncellemeniz gerekiyorsa (veya tonlarca veriniz varsa), muhtemelen Bayesian kullanmak istersiniz. Sinir ağları ve SVM'nin tek seferde eğitim verileri üzerinde çalışması gerekir.

  2. Verileriniz yalnızca kategorik, yalnızca sayısal veya her ikisinden mi oluşuyor ?

    Bayesian'ın en iyi kategorik / binom verileriyle çalıştığını düşünüyorum. Karar ağaçları sayısal değerleri tahmin edemez.

  3. Siz veya kitlenizin sınıflandırıcının nasıl çalıştığını anlamanız gerekiyor mu?

    Bayes veya karar ağaçlarını kullanın, çünkü bunlar çoğu insana kolayca açıklanabilir. Sinir ağları ve SVM, verileri nasıl sınıflandırdıklarını gerçekten göremediğiniz için "kara kutular" dır.

  4. Ne kadar sınıflandırma hızına ihtiyacınız var?

    SVM'ler sınıflandırma söz konusu olduğunda hızlıdır, çünkü verilerinizin yalnızca "satırının" hangi tarafında olduğunu belirlemeleri gerekir. Karar ağaçları özellikle karmaşık olduklarında yavaş olabilir (örneğin, çok sayıda dal).

  5. Karmaşıklık .

    Sinir ağları ve SVM'ler karmaşık doğrusal olmayan sınıflandırmayı işleyebilir.


2
Bu kitap bölümü karmaşıklık hakkında daha fazla bilgi sağlayabilir. Nlp.stanford.edu/IR-book/html/htmledition/…
supermus

31

Prof Andrew Ng'in sıkça belirttiği gibi: her zaman kaba, kirli bir algoritma uygulayarak başlayın ve ardından tekrar tekrar geliştirin .

Sınıflandırma için, Naive Bayes , iyi performanslara sahip olduğu, yüksek oranda ölçeklenebilir olduğu ve hemen hemen her türlü sınıflandırma görevine uyum sağlayabildiği için iyi bir başlangıçtır. Ayrıca 1NN (sadece 1 komşusu olan K-En Yakın Komşular) sorunsuz bir uyum sağlayan en iyi algoritmadır (çünkü veriler model olacaktır ve bu nedenle karar sınırınızın boyutsal boyutuna dikkat etmeniz gerekmez), sadece sorun hesaplama maliyetidir (kuadratik çünkü mesafe matrisini hesaplamanız gerekir, bu nedenle yüksek boyutlu veriler için iyi bir uyum olmayabilir).

Bir başka iyi başlangıç ​​algoritması Rastgele Ormanlardır (karar ağaçlarından oluşur), bu herhangi bir boyut için son derece ölçeklenebilir ve genellikle oldukça kabul edilebilir performanslara sahiptir. Daha sonra son olarak, orada genetik algoritmalar herhangi bir boyut ve veri kendisi en az bilgiye sahip herhangi bir veri takdire iyi ölçek, en az ve en basit uygulama olmak üzere, mikrobik genetik algoritma Inman Harvey C kodu (sadece bir satır! İn 1996) ve en karmaşık olanlarından biri CMA-ES ve MOGA / e-MOEA'dır.

Ve unutmayın ki, algoritmaları gerçekten denemeden önce verilerinizde neyin en iyi çalışacağını gerçekten bilemezsiniz.

Bir yan not olarak, belirli bir sorun için hipotezinizi ve algoritmalarınızı teorik performanslarını test etmek için teorik bir çerçeve istiyorsanız, PAC (Muhtemelen yaklaşık olarak doğru) öğrenme çerçevesini kullanabilirsiniz (dikkat: çok soyut ve karmaşık!), Ancak Özetle, PAC öğrenmenin özü, verilerinize uyacak daha az karmaşık, ancak yeterince karmaşık (karmaşıklığın, algo'nun sığabileceği maksimum boyutluluk olması) kullanmanız gerektiğini söylüyor. Başka bir deyişle, Occam'ın tıraş makinesini kullanın.


11

Sam Roweis , saf Bayes'i , lojistik regresyonu, en yakın komşuyu ve Fisher'ın lineer ayrımcısını her şeyden önce denemeniz gerektiğini söylerdi .


8

Benim düşüncem, verilerinizi anlamak için her zaman önce temel sınıflandırıcıları çalıştırmanızdır. Çoğu zaman (en azından tecrübelerime göre) yeterince iyi oldular.

Dolayısıyla, denetlenen verileriniz varsa, bir Naive Bayes sınıflandırıcısı eğitin. Denetimsiz verileriniz varsa, k-ortalamaları kümelemeyi deneyebilirsiniz.

Başka bir kaynak, bir süre önce izlediğim Stanford Machine Learning video serisinin ders videolarından biri . Video 4 veya 5'te, bence öğretim görevlisi, sınıflandırıcıları, avantajları / ödünç verme vb.


1
“Ücretsiz Öğle Yemeği Yok” teoremi, her sorun için en uygun olan tek modelin olmadığını belirtir. Bir sorun için harika bir modelin varsayımları başka bir sorun için geçerli olmayabilir, bu nedenle makine öğrenmesinde birden çok modeli denemek ve belirli bir sorun için en uygun olanı bulmak yaygındır.
msarafzadeh

5

Çıkarım ve tahmin değiş tokuşuna karşı her zaman dikkate almalısınız .

Verilerinizde meydana gelen karmaşık ilişkiyi anlamak istiyorsanız, zengin bir çıkarım algoritması (örn. Doğrusal regresyon veya kement) ile gitmelisiniz. Öte yandan, sadece sonuçla ilgileniyorsanız, sinir ağları gibi yüksek boyutlu ve daha karmaşık (ancak daha az yorumlanabilir) algoritmalarla gidebilirsiniz.


3

Algoritma seçimi, senaryoya ve veri kümesinin türüne ve boyutuna bağlıdır. Başka birçok faktör var.

Bu temel makine öğrenimi için kısa bir hile sayfasıdır.

Burada senaryonuzu basit bir kopya kağıdı ile doğrulayabilirsiniz


-2

Her şeyden önce, bu, sınıflandırma veya regresyon ile ilgili olarak hangi sorunla uğraştığınıza bağlıdır. Sonra modelinizi akıllıca seçin. Belirli bir modele bağlıdır, belirli bir model diğer modellerden daha iyi performans gösterir. Diyelim ki sklearn kütüphanesinden wine_dataset üzerinde çalışıyorsunuz ve ilk önce verileri doğrusal svm ile doğrusal olarak eğitmeye çalıştınız ve bir çeşit doğruluk elde edersiniz ve tatmin edici olmadığını düşündüğünüzden, verilerinizi DecisionTreeClassifier () ile eğitmeye çalıştınız. ve sonra RandomForestClassifier () ile denediniz. Bundan sonra hangi doğruluk daha iyi olursa veya verilerinize uyduğunu söyleyebilirsiniz, bunu sonuçlandırabilirsiniz. Test için modeli değiştirmeye devam ederken bulacağınız çok küçük sözdizimsel fark var. Yani en iyisi ve sorunu iyi anlıyoruz.


1
OP'nin (Orijinal Posterleri) Soru şuydu: Hangi sınıflandırıcıyı kullanmam gerektiğini nasıl bilebilirim? Bu da bir Sınıflandırma Algoritması aradıklarına karar verir . Lütfen cevaplamadan önce soruyu gerçekten okuyun.
Vetrivel PS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.