Либлинейное смещение очень близко к нулю - PullRequest
0 голосов
/ 03 сентября 2011

Я пробую Liblinear для линейной классификации SVM на некоторых 2D точках (я использую простой графический интерфейс Python, чтобы добавить точки для 2 классов, а затем нарисую линию, разделяющую классы), но хотя я использую опцию смещения(-B 1) для обучения я получаю смещение, очень близкое к нулю (разделительная линия почти проходит через начало координат).

Я также пытался просто тренировать 2-точечный набор:

-1 1:10 2:30
+1 1:10 2:80

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

0.2003362041634111, 
-0.03465897160331861, 
0.0200336204163411 

Что я делаю не так?

1 Ответ

1 голос
/ 08 сентября 2011

Я не уверен, что вы делаете что-то не так.

Из liblinear FAQ:

Q: LIBLINEAR дает тот же результат, что и LIBSVM с линейным ядром?

Они должны быть очень похожи. Однако иногда разница может не быть маленьким Обратите внимание, что LIBLINEAR не использует термин смещения b по умолчанию. Если вы наблюдаете очень разные результаты, попробуйте установить -B 1 для LIBLINEAR. Это добавит термин смещения к функции потерь, а также к член регуляризации (w ^ Tw + b ^ 2). Тогда результаты должны быть ближе.

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

Нет особой причины предполагать, что регуляризация смещения обеспечит лучший классификатор, поэтому во многих других системах обучения он не входит в термин регуляризации. Однако в «реальных» задачах с очень высокой размерностью также очень вероятно, что данные можно отделить, не используя термин смещения, поэтому регуляризация не причиняет вреда и может быть проще в реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...