Próbuję napisać pełną implementację SVM w Pythonie i mam kilka problemów z obliczaniem współczynników Lagrange'a.
Najpierw pozwól mi przeformułować to, co rozumiem z algorytmu, aby upewnić się, że jestem na dobrej drodze.
Jeśli jest zbiorem danych, a jest etykietą klasy , toy i ∈ { - 1 , 1 } x i ∀ i , y i ( w T x i + b ) ≥ 1
Musimy więc rozwiązać problem optymalizacji
minimalizuj
z zastrzeżeniem
Pod względem współczynników Lagrange'a przekłada się to na znalezienie , i i minimalizując:
Teraz, ponieważ
Próbuję więc rozwiązać problem optymalizacji za pomocą Pythona, a jedyny darmowy pakiet, jaki mogłem znaleźć, to cvxopt .
Chciałbym pomóc w rozwiązaniu tego problemu, nie mogłem znaleźć żadnego dobrego przykładu na ten temat i chociaż rozumiem teorię, trudno mi przetłumaczyć to na kod (spodziewałbym się czegoś przeciwnego, ponieważ jestem więcej z podstaw programowania).
Zauważ, że w pewnym momencie będę chciał go rozwiązać, używając jądra ale nie jestem pewien, jakie są implikacje dotyczące rozwiązania tego problemu w kodzie.
Jakakolwiek pomoc byłaby bardzo mile widziana, naprawdę jestem zagubiony jak zaimplementować to w Pythonie. Jeśli masz lepszy moduł do rozwiązania problemu optymalizacji, chciałbym o nim również przeczytać.
Ogólną postacią problemu optymalizacji jest program kwadratowy , niezależnie od tego, czy używasz sztuczki jądra, czy jądra liniowego. Wygląda na
cvxopt
to, że wystarczy do tego, co próbujesz zrobić, ale inni pythonowie również mieli szczęście z OpenOpt .źródło