Добавление аффинного термина к целевой функции линейной SVM / логистической регрессии - PullRequest
5 голосов
/ 08 февраля 2012

В настоящее время я работаю над проблемой, в которой мне нужно решить либо L2-регуляризованную логистическую регрессию, либо задачу L2-reg с линейным SVM, где у меня добавлен аффинный термин.

Так, например, моя проблема:

min_ w {C*sum_i max(1-w*x_i*y_i,0) + 0.5*||w||^2_2 + w * v }

где v - постоянный вектор.

Конечно, это выпуклая проблема, и ее можно решить обычными методами, но мне нужно решить много крупных задач этого типа., поэтому я очень хотел бы использовать стандартную библиотеку, такую ​​как liblinear .

Мой вопрос заключается в том, существует ли способ преобразования данных x, меток y или весового коэффициентаC (возможно, в отдельном C_i для каждого экземпляра), так что эта проблема будет эквивалентна стандартной SVM с потерей шарнира или логистической регрессии?

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Я не могу придумать, как превратить его во что-то, что может быть обработано чем-то вроде liblinear. Однако эту проблему оптимизации можно легко решить с помощью одной из библиотек оптимизации плоскости резки общего назначения. Все, что вам нужно сделать, это написать код для вычисления элемента субградиента (который в вашем случае просто w + v - C sum_i x_i y_i) и значения цели. Тогда подпрограмма плоскости резки может найти оптимальный w.

В Shogun имеется оптимизатор CPA, а также в dlib . Я не использовал версию Shogun, но я использовал ее в dlib для многих проблем (я также являюсь автором dlib).

0 голосов
/ 27 ноября 2012

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

Заполните квадрат на двух последних терминах:

  0.5 ||w||^2 + w'v 
= 0.5 ||w+v/2||^2 - v'v/2

затем введите изменение переменной

u = w+v/2

Ваша оптимизация тогда эквивалентна

min_u C*sum_i max(1-(u-v/2)*x_i*y_i,0) + 0.5*||u||^2_2

, что при b_i = 1 + v'x_i * y_i / 2 эквивалентно

min_u   C*sum_i max(b_i - u*x_i*y_i ,0) + 0.5*||u||^2_2

Итак, если ваш алгоритм обучения позволяет вам заменить 1 на b_i по вашему выбору для каждой точки данных, это может решить эту проблему.

Практически в каждом пакете так или иначе размещается b_i. Например, приведенное выше эквивалентно

min_u   C*sum_i b_i  max(1 - u*x_i*y_i/b_i ,0) + 0.5*||u||^2_2

(при условии, что b_i> 0), поэтому, если ваш пакет позволяет вам по-разному оценивать каждую точку, вы можете решить вышеуказанную проблему.

...