Python'da SVM için Lagrange katsayılarının hesaplanması


10

Python'da tam bir SVM uygulaması yazmaya çalışıyorum ve Lagrange katsayılarını hesaplamak için birkaç sorunum var.

Önce doğru yolda olduğumdan emin olmak için algoritmadan anladığımı tekrar yazmama izin verin.

Eğer isimli bir veri seti ve sınıf etikettir sonrax1,x2,...,xnx ii , y i ( w T x i + b ) 1yi{1,1}xi

i,yi(wTxi+b)1

Bu yüzden sadece bir optimizasyon problemini çözmemiz gerekiyor

simge küçültw2

y_i'ye tabi yi(wTxi+b)1

Lagrange katsayıları açısından bu, w , b ve α=(α1,α2,...αn)0 ve 0 en aza indirgeme anlamına gelir:

L(α,w,b)=12w2αi(yi(wTx+b)1)

Şimdi

Lw=0w=αiyixi
ve
Lb=0yiαi=0
bunu
L(α,w,b)=Q(α)=αi12αiαjyiyjxiTxj
,
αi0 and αiyi=0

Bu yüzden Python kullanarak optimizasyon problemini çözmeye çalışıyorum ve bulabildiğim tek ücretsiz pakete cvxopt deniyor .

Bunu çözmek için biraz yardım istiyorum, bu konuda iyi bir örnek bulamadım ve teoriyi anlasam da, koda çevirirken zorlanıyorum (tam tersi programlama arka planından daha fazla).

Bir noktada ancak bunu kodda çözme konusunda ne anlama geldiğinden emin değilim.

L(α,w,b)=Q(α)=αi12αiαjyiyjK(xi,xj)

Herhangi bir yardım büyük mutluluk duyacağız, bunu Python'da nasıl uygulayacağım konusunda gerçekten kayboldum. Optimizasyon problemini çözmek için daha iyi bir modülünüz varsa, bu konuyu da okumak istiyorum.

Yanıtlar:


4

Daha önce bir SVM uygulamak için cvxopt kullandım, ancak matlab python değil. Yeterince verimli olup olmadığını ne için kullandığınıza bağlı olup olmayacağı kesinlikle amacınıza hizmet edecektir. En verimli SVM'ler QP çözücü paketi kullanmaz, SVM'ye özgü bazı optimizasyonlardan yararlanırlar. Birçoğu bunu çözmek için bir SMO tarzı algoritma kullanır.

LibSVM , Eğitim Destek Vektör Makineleri için İkinci Sipariş Bilgilerini Kullanarak Çalışma Kümesi Seçimi'nde algoritmayı kullanan bir SVM paketidir . Kodun nasıl uygulandığına bakmak istiyorsanız, açık kaynak kodludur. Ayrıca bir python arayüzü var.

SVMLight başka bir pakettir, farklı bir algoritma kullanırlar (referanslar için sitelerine bakın). Ayrıca açık kaynak kodlu ve bir python arayüzüne sahiptir.


Bilgilendirici cevap için teşekkürler (bence supercedes mayın) ve scicomp'a hoş geldiniz!
Aron Ahmadia

+ 1 ilginç cevap ve ben bana çok yardımcı olan harika bağlantılarına bakmaya başladım!
Charles Menguy

2

Optimizasyon probleminizin genel biçimi , çekirdek hile veya doğrusal bir çekirdek kullanıp kullanmadığınızdan bağımsız olarak Karesel bir Programdır . Gibi geliyor Yapmaya çalıştığınız şey için yeterli olacaktır, ama burada diğer pythonauts ile şans oldu OpenOpt de. cvxopt


Aron, Ipopt Python paketinin düzelip düzelmediğini biliyor musunuz?
Geoff Oxberry

David Ketcheson öğrencilerinden biri onu OpenOpt ile (yarı Newton algoritmasıyla kullanabilir) çalıştırdı, ancak OpenOpt yığınının OS X'de devam etmesinde bazı zorluklar yaşadı.
Aron Ahmadia
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.