libsvm "maksimum yineleme sayısına ulaşma" uyarısı ve çapraz doğrulama


20

C-SVC modunda libsvm'yi derece 2 polinom çekirdeği ile kullanıyorum ve birden fazla SVM eğitmem gerekiyor. Her eğitim setinde 10 özellik ve 5000 vektör bulunur. Eğitim sırasında, eğittiğim SVM'lerin çoğu için bu uyarıyı alıyorum:

WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

Birisi bu uyarının ne anlama geldiğini ve belki nasıl önleneceğini açıklayabilir mi?

Ayrıca, gama ve C (normalleştirme) için en iyi seçimleri belirlemek amacıyla modellerim için çapraz doğrulamayı uygulamak istiyorum. Benim planım şu 10 değerin her bir kombinasyonunu denemek: her iki parametre için 0.00001, 0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000 ve çapraz doğrulama sırasında hangi kombinasyonun en iyi doğruluğu sağladığını görmek. Bu yeterli mi? Bu aralıkta daha fazla değer kullanmalı mıyım yoksa daha geniş bir aralık mı seçmeliyim?


Sorununuzu çözmesi için NU_SVC modunu deneyin.
Hosein Bitaraf

Yanıtlar:


20

Bu uyarı , verilerinizi ayıran maksimum marj hiper düzlemini (yani, ve parametreleri ) bulmak için kuadratik optimizasyon problemini çözmek için LIBSVM tarafından kullanılan yinelemeli rutinin maksimum iterasyon sayısına ulaştığı ve durması gerekeceği anlamına gelir. çünkü daha da geliştirilebilir (yani, objektif fonksiyonun değerini daha aşırı yapmak için değiştirilebilir). Kısacası, bu LIBSVM'nin doğru olabileceği veya olmayabileceği maksimum marj hiper düzlemini bulamadığını düşünüyor demektir.wbww

Bunun olmasının birçok nedeni var, aşağıdakileri yapmanızı öneririm:

  • Verilerinizi normalleştirin.
  • Sınıflarınızın az çok dengeli olduğundan (benzer büyüklükte) emin olun. Değilse, farklı ağırlıklar atamak için -w parametresini kullanın.
  • Farklı ve deneyin . LIBSVM'deki polinom çekirdeğinde de 'coef0' parametresi vardır, çünkü çekirdek Cγ
    γuv+coeff0 degree

Sizin gibi logaritmik bir ölçekte en uygun aramak iyi bir fikirdir . Normalleştirilmiş veriler için önerdiğiniz için arama aralığının iyi olması gerektiğini düşünüyorum. Yararlı bir kontrol: sınıflandırıcının doğruluğu bu aralığın sınırlarında ve setinizin iki değeri arasında çok fazla değişmemelidir. Varsa, aralığı genişletin veya ara değerler ekleyin.CC

Windows için LIBSVM dağıtımının, sizin için parametre seçimi yapabilen (çapraz doğrulamaya ve belirtilen arama aralıklarına dayalı olarak) grid.py adlı bir Python betiği içermesi gerektiğini unutmayın. Ayrıca SVM'nin doğruluğu için kontur grafikleri üretebilir. Bu araç oldukça yardımcı olabilir.

StackOverflow ve ilgili sorularıyla ilgili aşağıdaki soru da yardımcı olabilir: libsvm Shrinking Heuristics


Detaylı açıklama için teşekkürler. Kesinlikle gizemi temizler. Aynı soruyu SO'ya (sağladığınız bağlantı) sordum, ancak orada aldığım cevap çoğunlukla küçülen buluşsal yöntemlere odaklandı.
Mihai Todor
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.