Çok sınıflı SVM gerçekleştirmenin en iyi yolu


18

SVM'nin ikili bir sınıflandırıcı olduğunu biliyorum. Çok sınıflı SVM'ye genişletmek istiyorum. Bunu gerçekleştirmenin en iyi ve belki de en kolay yolu hangisidir?

kod: MATLAB'da

   u=unique(TrainLabel); 
    N=length(u); 
    if(N>2)    
        itr=1;    
        classes=0;   
        while((classes~=1)&&(itr<=length(u)))   
            c1=(TrainLabel==u(itr));    
            newClass=double(c1); 
            tst = double((TestLabel == itr));
            model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');  
            [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);    
            itr=itr+1;   
        end
        itr=itr-1;
    end

Bu nasıl geliştirilebilir?


Değişken classeskodda ne yapar ? Yararsız görünüyor.

herhangi bir sonuca vardın mı? benim iş ile bu sorun var. eğer uygun bir rusult ulaştı lütfen burada çok sınıflandırma kodu paylaşın. teşekkürler.
me.rasouli

Yanıtlar:


16

Çok sınıflı sınıflandırma için birçok yöntem vardır. SVM'ye özgü olmayan iki klasik seçenek şunlardır:

  1. Bire karşı (OVA) sınıflandırması:
    A, B, C ve D sınıflarına sahip olduğunuzu varsayalım. Dört yönlü bir sınıflandırma yapmak yerine dört ikili sınıflandırıcı yetiştirin: A'ya karşı A, B'ye karşı değil B , C'ye karşı C değil ve D'ye karşı D değil. Ardından, ya "en iyi" olan pozitif sınıfı seçin (örneğin, dört çalışmanın tamamında marjdan en uzağa). Sınıflandırmalardan hiçbiri pozitif değilse (yani hepsi X değil), en kötü sınıfın "karşıt" ını seçin (örneğin, marja en yakın).

  2. All-vs-All:
    Tüm olası sınıflandırma çiftlerini eğitin. Sınıfları bir faktöre göre sıralayın (örneğin, seçilen kez) ve en iyisini seçin.

En iyi sonucu veren çekişmeli olmuştur: Duan ve Keerthi , hepsi-hepsi-bir yöntem öneren ampirik bir çalışma yaparken, Rifkin ve Klautau bire-hepsi-bir plan için tartışırlar. Sınıf etiketlerini tanımlayan, etiketlerin kendileri yerine hata düzeltme kodlarını öğrenen şemalar bile vardır.

İyi şanslar!

Düzenleme: Özellikle OVA için gerçekten istediğiniz her sınıfın arka olasılığıdır. Naive Bayes gibi bazı yöntemler için, dışarı çıkmak önemsizdir. SVM'ler genellikle size olasılık vermez, ancak bunları hesaplamanın yolları vardır. John Platt'ın 1999 tarihli "Destek Vektör Makineleri için Olasılıksal Çıktılar ..." makalesine bakın.


2
OVA için - en yüksek olasılığa sahip olan sınıfı seçebilir misiniz?
B_Miner

1
Evet, temelde Duan ve Keerthi gazetesinin sonucu. Platt olasılıklarını Hastie'nin çiftli bağlantı hilesi ile birleştiriyor ve iyi sonuçlar elde ediyorlar. Muhtemelen metni içerecek şekilde düzenlemeliyim. İyi yakalama B_Miner!
Matt Krause

SVM'de, oylama veya toplam toplama yapmak mı gerekiyor?
Lakesh

@lakesh, One-vs-all veya All-vs-all oylama şemaları gibidir. Bir grup ikili sınıflandırıcı kullanıyorsanız, bunları çok sınıflı bir sınıflandırıcıya dönüştürmek için bir şeyler yapmanız gerekir. Alternatif olarak, aşağıda carlosdc tarafından açıklanan değiştirilmiş SVM'yi kullanabilirsiniz ...
Matt Krause

bu bir şey nedir?
lakesh

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.