Sınıflandırıcıların doğruluğu nasıl artırılır?


17

Rasgele ağaçlar ve diğer sınıflandırıcılar üzerinde denemek için OpenCV letter_recog.cpp örneği kullanıyorum. Bu örnekte altı sınıflandırıcı - rastgele ağaçlar, artırma, MLP, kNN, naif Bayes ve SVM uygulamaları vardır. Eğitim ve test için ikiye böldüğüm 20000 örnek ve 16 özelliğe sahip UCI harf tanıma veri kümesi kullanılır. SVM ile ilgili deneyimim var, bu yüzden tanıma hatasını hızlı bir şekilde% 3,3'e ayarladım. Bazı deneylerden sonra ne oldu:

UCI harf tanıma:

  • RTrees -% 5.3
  • Takviye -% 13
  • MLP -% 7.9
  • kNN (k = 3) -% 6.5
  • Bayes -% 11.5
  • SVM -% 3,3

Kullanılan parametreler:

  • RTrees - max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1

  • Boost - boost_type = GERÇEK, zayıf_sayısı = 200, ağırlık_trim_ oranı = 0,95, maks_depth = 7

  • MLP - yöntem = BACKPROP, param = 0.001, max_iter = 300 (varsayılan değerler - denemek için çok yavaş)

  • kNN (k = 3) - k = 3

  • Bayes - hiçbiri

  • SVM - RBF çekirdeği, C = 10, gama = 0.01

Bundan sonra aynı parametreleri kullandım ve önce degrade özelliklerini (vektör boyutu 200 öğeleri) çıkararak Rakamlar ve MNIST veri kümelerinde test ettim:

Rakamlar:

  • RTrees -% 5.1
  • Artış -% 23.4
  • MLP -% 4.3
  • kNN (k = 3) -% 7,3
  • Bayes -% 17.7
  • SVM -% 4,2

MNIST:

  • RTrees -% 1.4
  • Boost - bellek yetersiz
  • MLP -% 1.0
  • kNN (k = 3) -% 1,2
  • Bayes -% 34.33
  • SVM -% 0,6

SVM ve kNN dışındaki tüm sınıflandırıcılara yeniyim, bu ikisi için sonuçların iyi göründüğünü söyleyebilirim. Peki ya diğerleri? Rasgele ağaçlardan daha fazlasını bekliyordum, MNIST kNN'de daha iyi doğruluk verir, nasıl daha yükseğe çıkılacağına dair bir fikir var mı? Boost ve Bayes çok düşük doğruluk sağlar. Sonunda, bu sınıflandırıcıları çoklu bir sınıflandırıcı sistemi yapmak için kullanmak istiyorum. Herhangi bir tavsiye?

Yanıtlar:


9

Boyutsal küçülme

Diğer bir önemli prosedür, fazla takıp takmadığınızı görmek için eğitim ve test veri setindeki hata oranlarını karşılaştırmaktır ("boyutsallığın laneti" nedeniyle). Örneğin, test veri kümesindeki hata oranınız egzersiz veri kümesindeki hatadan çok daha büyükse, bu bir gösterge olacaktır.
Bu durumda, PCA veya LDA gibi boyutsallık azaltma tekniklerini deneyebilirsiniz.

Eğer ilgileniyorsanız, burada PCA, LDA ve diğer bazı teknikler hakkında yazdım: http://sebastianraschka.com/index.html#machine_learning ve burada GitHub repo'mda: https://github.com/rasbt/pattern_classification

Çapraz doğrulama

Ayrıca sınıflandırıcılarınızın performansını daha objektif bir şekilde değerlendirmek için çapraz validasyon tekniklerine de bakmak isteyebilirsiniz.


Evet, gerçekten de eğitim veri setindeki hata oranları 0 civarındadır. En kısa zamanda bahsettiğiniz tekniklere bakacağım ve yorum yapacağım, teşekkür ederim.
Mika

Eğitim ve test veri kümesi btw'nin nispi oranları nelerdir? 70:30, 60:40 veya 50:50 gibi bir şey mi?

İlk veri kümesi - UCI harf tanıma 50:50 (10000: 10000), Rakamlar yaklaşık 51:49 (1893: 1796) ve MNIST yaklaşık 86:14 (60000: 10000) olarak ayarlanmıştır.
Mika

PCA ile denedim, hala rastgele forrest ile iyi sonuçlar alamadım, ancak boost ve Bayes şimdi diğer sınıflandırıcılara benzer sonuçlar veriyor. Burada rastgele forrest hakkında bir tartışma buldum: stats.stackexchange.com/questions/66543/… Aslında fazla uymuyorum ama burada belirtilen çanta dışı (OOB) tahmin hatasını bulamıyorum. Doğruluğun iyileşip iyileşmeyeceğini görmek için çok sayıda ağaçla denemeyi şimdi yapın.
Mika

Tamam, biraz ilerleme kaydettiğiniz sesler :) Önemsiz bir soru, ancak standart sapma = 1 ile ortalamanın etrafında olması için özelliklerinizi (z-puanı) standartlaştırdınız mı?

5

Rastgele ağaçlardan daha fazlasını bekliyordum :

  • Rasgele ormanlarda, genellikle N unsurları için, her karar ağacı yapımı için sqrt (N) unsurları kullanılır. Senin durumunda bu yana N = 20, sen ayarlamayı deneyebilirsiniz MAX_DEPTH 5'e (her karar ağacı oluşturmak için alt özelliklerin sayısını).

  • Karar ağaçları yerine, doğrusal modeller, özellikle multinomyal lojistik regresyon ve naif Bayes olmak üzere, rastgele ormanlarda temel tahmin ediciler olarak önerilmiş ve değerlendirilmiştir. Bu, doğruluğunuzu artırabilir.

MNIST kNN daha iyi doğruluk verir, nasıl daha yüksek almak için herhangi bir fikir?

  • Daha yüksek bir K değeriyle deneyin (5 veya 7 diyelim). Daha yüksek bir K değeri, bir noktanın sınıf etiketi hakkında size daha fazla destekleyici kanıt verecektir.
  • En yakın komşuyu çalıştırmadan önce PCA veya Fisher Doğrusal Diskriminant Analizi çalıştırabilirsiniz. Bu sayede noktalar arasındaki mesafeleri hesaplarken ilişkili özelliklerden kurtulabilirsiniz ve bu nedenle k komşularınız daha sağlam olacaktır.
  • K komşuları arasındaki mesafedeki varyansa bağlı olarak farklı noktalar için farklı K değerleri deneyin.

İlk veri kümesi için nactive_vars = sqrt (16) ve diğer iki için nQL_vars = sqrt (16) olarak ayarladığım OpenCV nactive_vars parametresine (max_depth değil) atıfta bulunduğuna inanıyorum. MAX_DEPTH ağaçlar tam derinliğe büyür belirler (25 maksimum değeridir) ve yetersiz uyum ve burada daha fazla bu konuda, overfitting arasındaki dengeleri: stats.stackexchange.com/questions/66209/... Emin değilim min_sample_count hakkında ama çeşitli değerler çalıştı ve ayarlama 1 en iyi çalıştı.
Mika

OpenCV belgeleri, parametrelerin kısa bir açıklamasını verir: docs.opencv.org/modules/ml/doc/… Şimdilik, rastgele ağaçların makul şekilde iyi çalışmasını sağlamak ve işleri basit tutmak istiyorum çünkü çok sınıflandırıcılı bir sistemle çalışmaya odaklanmak istiyorum.
Mika

KNN hakkında - bunların hepsi gerçekten iyi öneriler, ama demek istediğim kNN rastgele ağaçlar sınıflandırıcıdan daha iyi performans gösterdi ve bence rastgele ağaçlar ile iyileştirmek için çok fazla alan var.
Mika

Evet, rastgele ormanın neden basit k-NN yaklaşımından daha iyi (veya daha iyi) performans göstermediğinden emin değilim ... sadece P (y | D) (çıkış verisi verisi), örneğin parametrik modellerdeki gibi P (teta | D) (gizli model verisi verilmiş) tahmin edilmeden k-NN içinde.
Debasis
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.