a) для чего используется значение объекта?
Каждый экземпляр из n объектов рассматривается как точка в n-мерном пространстве, прикрепленная к данной метке, скажем + 1 или -1 (в вашем случае 1 или 2). Линейный SVM пытается найти лучшую гиперплоскость, чтобы разделить этот экземпляр на два набора, скажем, SetA и SetB. Гиперплоскость считается лучше, чем у других, если SetA содержит больше экземпляров, помеченных +1, а SetB содержит больше экземпляров с -1. то есть более точный. Лучшая гиперплоскость сохраняется как модель. В вашем случае гиперплоскость имеет формулировку:
f(x)=w^T x
, где w - модель, например (0,33741,0,0.33741, -0.33741, -0.33741) в вашем первом случае.
Вероятность (для LR) формулировка:
prob(x)=1/(1+exp(-y*f(x))
, где y = + 1 или -1. См. Приложение L LIBLINEAR paper .
b) Я хотел понять, почему этот тестовый документ, содержащий одну особенность, которая присутствует только в одном классе, не является строго предсказанным для этого класс?
Не только 1 5:1
дает слабую вероятность, такую как [0.42,0.58]
, если вы прогнозируете 2 2:1 4:1 5:1
, вы получите [0.337417,0.662583]
, что, как кажется, решатель также не очень уверен в результате даже входные данные точно совпадают с набором обучающих данных.
Фундаментальная причина - это значение f (x), или его можно просто рассматривать как расстояние между x и гиперплоскостью. Он может быть на 100% уверен, что x принадлежит к определенному классу, только если расстояние бесконечно велико (см. Prob (x)).
c) Я не ожидаю, что в функции. Есть ли какие-либо другие последствия увеличения значения каждого элемента с 1 до чего-то еще? Как я могу определить это число?
TL; DR
Увеличение как тренировочного, так и тестового набора похоже на увеличение параметра штрафа C (- c вариант). Поскольку большее C означает более строгое наказание за ошибку, интуитивно говоря, решатель имеет больше уверенности в предсказании.
Расширение каждой функции обучающего набора похоже на имея меньший C. В частности, регрессия logisti c решает следующее уравнение для w.
min 0.5 w^T w + C ∑i log(1+exp(−yi w^T xi))
(уравнение (3) из LIBLINEAR paper )
Для большинства случаев yi w^T xi
положительно и больше xi
означает меньшее ∑i log(1+exp(−yi w^T xi))
. Таким образом, эффект чем-то похож на меньший C, а меньший C подразумевает меньший | w |.
С другой стороны, увеличение тестового набора такое же как имеющий большой | ш |. Следовательно, эффект от увеличения как тренировочного, так и тестового набора в основном равен
(1). Having smaller |w| when training
(2). Then, having larger |w| when testing
Поскольку эффект более драматичен c в (2), чем (1), в целом увеличение как тренировочного, так и испытательного набора похоже на имея большую | w | или большую C.
. Мы можем работать с набором данных и умножать все функции на 10 ^ 12. С C = 1 у нас есть модель и вероятность
> cat model.bin.m1e12.c1
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
3.0998430106024949e-12
0
3.0998430106024949e-12
-3.0998430106024949e-12
-3.0998430106024949e-12
0
> cat test.out.m1e12.c1
labels 1 2
2 0.0431137 0.956886
Далее мы запускаем исходный набор данных. При C = 10 ^ 12 мы имеем вероятность
> cat model.bin.m1.c1e12
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
3.0998430101989314
0
3.0998430101989314
-3.0998430101989314
-3.0998430101989314
0
> cat test.out.m1.c1e12
labels 1 2
2 0.0431137 0.956886
Следовательно, поскольку большее значение C означает более строгое наказание за ошибку, поэтому интуитивно решатель будет более уверенным в прогнозировании.
d) Могут ли мои изменения негативно повлиять на другие более сложные тренировки?
Из (c) мы знаем, что ваши изменения похожи на увеличение C, и это приведет к в лучшей точности обучения. Но почти можно быть уверенным, что модель больше подходит , чем тренировочный набор, когда C становится слишком большим. В результате модель не может выдержать шум в тренировочном наборе и будет плохо работать в тестовой точности.
Что касается поиска хорошего C, популярным способом является перекрестная проверка (опция -v).
Наконец,
это может быть не так c, но вы можете посмотреть, как предварительно обрабатывать текстовые данные. Обычно (например, предложенный автором liblinear здесь ) нормализует данные по экземплярам.
По классификации документов наш опыт показывает, что если вы нормализуете каждый документ на единицу длины, то не только время обучения будет меньше, но и производительность будет лучше.