Я пытаюсь написать полную реализацию SVM на Python, и у меня есть несколько проблем с вычислением коэффициентов Лагранжа.
Сначала позвольте мне перефразировать то, что я понимаю из алгоритма, чтобы убедиться, что я на правильном пути.
Если - это набор данных, а - метка класса , тогда
Так что нам просто нужно решить проблему оптимизации, чтобы
при условии
В терминах коэффициентов Лагранжа это приводит к нахождению минимизации , и и :б α = ( & alpha ; 1 , & alpha ; 2 , . . . α п ) ≠ 0 ≥ 0 L ( α , ш , б ) = 1
Теперь, поскольку и мы можем переписать его как L (\ alpha, w, b) = Q (\ alpha) = \ sum \ alpha_i - \ frac12 \ sum \ sum \ alpha_i \ alpha_j y_i y_j x_i ^ T x_j с ограничениями \ alpha_i \ geq 0 \ \ text {and} \ \ sum \ alpha_i y_i = 0∂ L
Поэтому я пытаюсь решить проблему оптимизации с помощью Python, и единственный бесплатный пакет, который я могу найти, называется cvxopt .
Мне нужна помощь, чтобы решить эту проблему, я не смог найти хорошего примера по этому поводу, и хотя я понимаю теорию, мне трудно перевести ее в код (я бы ожидал обратного, так как больше из опыта программирования).
Обратите внимание, что в какой-то момент я захочу решить ее, используя Ядра но я не уверен, каковы последствия решения этого в коде.
Любая помощь будет принята с благодарностью, я действительно потерялся в том, как реализовать это в Python. Если у вас есть лучший модуль для решения проблемы оптимизации, я бы тоже хотел прочитать об этом.
Общая форма вашей задачи оптимизации - это квадратичная программа , независимо от того, используете ли вы ядро или линейное ядро. Похоже,
cvxopt
этого будет достаточно для того, что вы пытаетесь сделать, но и другим питонавтам здесь повезло и с OpenOpt .источник