Scikit-learn'da SVC ve LinearSVC arasındaki farkı açıklayabilir misiniz?


19

Son zamanlarda birlikte çalışmayı öğrenmeye başladım sklearnve bu tuhaf sonuca rastladım.

Farklı modelleri ve tahmin yöntemlerini denemek için digitsmevcut veri kümesini kullandım sklearn.

Veriler üzerinde bir Destek Vektör Makinesi modelini test ettiğimde sklearn, SVM sınıflandırması için iki farklı sınıf olduğunu öğrendim : SVCve LinearSVCbirincisi bire bir yaklaşım, diğeri ise bire karşı yaklaşım kullanıyor.

Sonuçlar üzerindeki etkisinin ne olduğunu bilmiyordum, bu yüzden ikisini de denedim. Monte Carlo tarzı bir tahmin yaptım, her iki modeli de 500 kez çalıştırdım, her seferinde numuneyi rastgele% 60 eğitim ve% 40 teste böldüm ve test setindeki tahmin hatasını hesapladım.

Normal SVC tahmincisi aşağıdaki hata histogramını üretti: SVC Hata Oranı Doğrusal SVC tahmincisi aşağıdaki histogramı üretti: Doğrusal SVC Hata Oranı

Böyle keskin bir farkı ne açıklayabilir? Doğrusal model neden çoğu zaman bu kadar yüksek doğruluğa sahiptir?

Ve ilgili olarak, sonuçlarda keskin kutuplaşmaya ne sebep olabilir? Ya 1'e yakın bir doğruluk ya da 0'a yakın bir doğruluk, aralarında hiçbir şey yok.

Karşılaştırma için, bir karar ağacı sınıflandırması, yaklaşık 0,85 doğrulukla çok daha normal bir şekilde dağıtılmış hata oranı üretti.


Scikit-öğrenme belgelerinin farkı vurgulamadığını varsayıyorum? Kontrol ettin mi?
Rohit

1. SVC'de hangi çekirdeği kullandınız? varsayılan ayarlar = "rbf"? 2. Bire karşı ve bire karşı hepsi farklı yaklaşımlardır
kpb

konuyla ilgili dokümantasyon biraz seyrek / belirsizdir. Bire karşı ve bire karşı dinlenme arasındaki farktan bahseder ve doğrusal Similar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
SVS'nin

Normal SVC için varsayılan çekirdeği kullandım. 1v1 ve 1vR'nin farklı yaklaşımlar olduğunu biliyorum, ama sanırım bunu bilmek istiyorum - neden bu kadar farklı sonuçlar üretiyorlar? Çekirdek seçimi mi yoksa çoklu kategori sınıflandırmasına farklı bir yaklaşım mı?
metjush

Yanıtlar:


23

Varsayılan değerlere sahip normal bir SVM, SVM çekirdeği olarak radyal temel işlevi kullanır. Bu temelde bir Gauss çekirdeği, yani çan eğrisi. Yani hiç kimse farklı sınıflar arasındaki toprakları Gauss fonksiyonu ile yaratılmaz. Doğrusal SVM, temel işlev için doğrusal bir çekirdek kullanır, böylece bunu ^ şekilli bir işlev olarak düşünebilirsiniz. Çok daha az ayarlanabilir ve temelde sadece doğrusal bir enterpolasyondur.

İnsanlar bu soruyu bir çeşit çekiçliyor çünkü çok fazla bilgi vermediniz, ancak yayınladığınız şeylere derinlemesine bakıyorsunuz ... bu, önyargı ve varyansın ayrıntılarını ve doğrusal ve doğrusal olmayan arasındaki farkı gerçekten anlamanın bazı temel yönlerine çarpıyor SVM'de temel fonksiyonlar.

Yüksek ve düşük sapma ve yüksek ve düşük varyansın dört bölgesini tanımlayan bu görüntüye göz atın . Açıkçası en iyi yer düşük varyans ve düşük yanlılıktır.

dart sapma görüntüsü

İlk olarak varyansı değerlendirelim -

Şimdi çizimlerinize bir göz atın: resim açıklamasını buraya girin

Doğrusal olmayan temel fonksiyon daha yüksek varyansa sahiptir. Doğrusal çekirdeğe göre nasıl daha gürültülü olduğunu görün! Doğrusal çekirdek daha düşük varyansa sahiptir. Nasıl daha az gürültülü olduğunu görün!

Şimdi önyargıyı değerlendirelim -

Hangi çekirdek daha doğru? Verdiğiniz hataları ekleyebiliriz. Doğrusal olmayan çekirdeğin toplam hatası ~ 550 + 325 = ~ 875'tir. Doğrusal çekirdeğin hatası ~ 690 + ~ 50 = ~ 740'tır. Yani doğrusal çekirdek genel olarak daha iyi yapıyor gibi görünüyor , ancak genel olarak oldukça yakınlar. Bu işler zor oldu!

Hepsini bir araya koy

Doğrusal çekirdeğin 1'lerde nasıl kötü bir iş yaptığını ve 0'larda gerçekten harika bir iş yaptığını görün. Bu oldukça dengesiz. Doğrusal olmayan çekirdek daha dengeli olduğunda. Görünüşe göre, tatlı nokta, bu kadar yüksek varyansa sahip olmayan dengeli bir model oluşturmak olabilir. Yüksek değişkenliği nasıl kontrol ederiz? Bingo - düzenlenme. Doğrusal olmayan modele düzenlileştirme ekleyebiliriz ve muhtemelen çok daha iyi sonuçlar göreceğiz. Bu scikit learn SVM'lerinde varsayılandan artırmak isteyeceğiniz C parametresidir. Gama parametresi ile de oynayabiliriz. Gama Gaussian'ın genişliğini kontrol eder. Belki daha az gürültülü sonuçlar elde etmek için bunu biraz artırmayı deneyin, örneğin sınıflar arasında daha büyük bir kimse olmayan toprak.

Bu yardımcı olur umarım!


C parametresi gereken azalmış değil artmış varsayılan.
Hamdi

4

Radyal Temel İşlev (rbf) çekirdeği olan SVC () 'de varsayılan çekirdeği kullandıysanız, muhtemelen daha doğrusal olmayan bir karar sınırı öğrendiniz. Rakam veri kümesi durumunda bu , bu görevde doğrusal bir karar sınırından büyük ölçüde daha iyi performans gösterecektir (bkz. 3.1 'Temel Doğrusal Sınıflandırıcı')

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.