Обчислення коефіцієнтів Лагранжа для SVM в Python


10

Я намагаюся написати повну реалізацію SVM в Python, і у мене є кілька проблем, які обчислюють коефіцієнти Лагранжа.

Спочатку дозвольте перефразувати те, що я розумію з алгоритму, щоб переконатися, що я на вірному шляху.

Якщо - це набір даних, а - мітка класу , тоy i{ - 1 , 1 } x ii , y i ( w T x i + b ) 1х1,х2,...,хнуi{-1,1}хi

i,уi(шТхi+б)1

Тому нам просто потрібно вирішити оптимізаційну проблему

мінімізуватиш2

за умови уi(шТхi+б)1

З точки зору коефіцієнтів Лагранжа, це означає, що знаходження ш , б і α=(α1,α2,...αн)0 та 0 мінімізація:

L(α,ш,б)=12ш2-αi(уi(шТх+б)-1)

Тепер оскільки

Lш=0ш=αiуiхi
та
Lб=0уiαi=0
ми можемо переписати його як
L(α,ш,б)=Q(α)=αi-12αiαjуiуjхiТхj
з обмеженнями
αi0 і αiуi=0

Тому я намагаюся вирішити проблему оптимізації за допомогою Python, і єдиний безкоштовний пакет, який я міг знайти, називається cvxopt .

Я хотів би допомогти вирішити це питання, я не міг знайти жодного хорошого прикладу з цього приводу, і, хоча я розумію теорію, мені важко перевести це в код (я б очікував навпаки, оскільки я більше з фону програмування).

Зауважте, що в якийсь момент я хочу вирішити це за допомогою ядер але я не впевнений, які наслідки стосуються вирішення цього коду.

L(α,ш,б)=Q(α)=αi-12αiαjуiуjК(хi,хj)

Будь-яка допомога буде дуже вдячна, я дуже втрачений, як реалізувати це в Python. Якщо у вас є кращий модуль для вирішення проблеми оптимізації, я також хотів би прочитати про нього.

Відповіді:


4

Я раніше використовував cvxopt для реалізації SVM, однак у matlab не python. Це, безумовно, буде відповідати вашим цілям, чи буде досить ефективним його залежність від того, для чого ви його використовуєте. Найбільш ефективні SVM не використовують пакет вирішувачів QP, вони користуються деякими оптимізаціями, унікальними для SVM. Багато хто використовує алгоритм стилю SMO для його вирішення.

LibSVM - це пакет SVM, який використовує алгоритм у виборі робочих наборів, використовуючи інформацію другого порядку для векторних машин підтримки навчання . Код є відкритим кодом, якщо вам цікаво подивитися, як його реалізувати. Він також має інтерфейс python.

SVMLight - це ще один пакет, вони використовують інший алгоритм (див. Посилання на їхньому сайті). Він також є відкритим кодом і має інтерфейс пітона.


Дякую за інформативну відповідь (яка, на мою думку, перевершує мою), і ласкаво просимо до scicomp!
Арон Ахмадія

+1 цікава відповідь, і я почав переглядати ваші чудові посилання, які мені дуже допомагають!
Чарльз Менгуй

2

Загальна форма вашої проблеми оптимізації - це квадратична програма , незалежно від того, використовуєте ви трюк ядра чи лінійне ядро. Здається, cvxoptце буде достатньо для того, що ви намагаєтеся зробити, але інші пітонавти тут пощастили і з OpenOpt .


Ароне, чи знаєш ти, чи обробляється Ipopt Python?
Джефф Оксберрі

Один із студентів Девіда Кетчесона отримав це, працюючи з OpenOpt (який може використовувати його за допомогою алгоритму квазі-Ньютона), але у нього виникли певні труднощі з отриманням стека OpenOpt на OS X.
Арон Ахмадія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.