В результате файл вашей модели должен выглядеть так:
SVM-light Version V6.02
0 # kernel type
3 # kernel parameter -d
1 # kernel parameter -g
1 # kernel parameter -s
1 # kernel parameter -r
empty# kernel parameter -u
3 # highest feature index
16 # number of training documents
17 # number of support vectors plus 1
0.85699902 # threshold b, each following line is a SV (starting with alpha*y)
-0.035708292619498309405923208714739 1:5 2:3 3:0 #
-0.035708292619498309405923208714739 1:1 2:1 3:2 #
0.035708292619498309405923208714739 1:1 2:2 3:0 #
-0.035708292619498309405923208714739 1:1 2:1 3:0 #
0.035708292619498309405923208714739 1:7 2:5 3:2 #
-0.035708292619498309405923208714739 1:7 2:4 3:2 #
0.035708292619498309405923208714739 1:1 2:2 3:2 #
-0.035708292619498309405923208714739 1:5 2:3 3:2 #
0.035708292619498309405923208714739 1:3 2:3 3:0 #
0.035708292619498309405923208714739 1:7 2:5 3:0 #
-0.035708292619498309405923208714739 1:7 2:4 3:0 #
0.035708292619498309405923208714739 1:3 2:3 3:2 #
-0.035708292619498309405923208714739 1:3 2:2 3:0 #
0.035708292619498309405923208714739 1:5 2:4 3:0 #
-0.035708292619498309405923208714739 1:3 2:2 3:2 #
0.035708292619498309405923208714739 1:5 2:4 3:2 #
Это все параметры вашей модели. Первые 9 значений — это конфигурация вашей модели (используемое ядро и т.д.).
Вы можете прочитать информацию обо всех параметрах, выполнив ./svm_learn --help
, в частности, kernel=0 означает, что это линейное ядро (которое вы хотели использовать).
Файл модели содержит список опорных векторов, которые являются точками из тренировочного набора, которые являются «ближайшими» к разделяющей гиперплоскости, это основная идея svm - «поддерживать» только вашу границу решения. с подмножеством ваших данных. Этих векторов достаточно, чтобы определить разделение, просто используя средневзвешенное значение их значений. Эти веса являются alpha
параметрами, найденными в процессе оптимизации (и находящимися также в файле). Для простоты эти веса уже умножены на соответствующие метки (+1
или -1
), чтобы определить, с какой «стороны» разделяющей гиперплоскости они находятся.
Для линейного ядра интерпретация следующих опорных векторов довольно проста. у вас 17 параметров, сначала идет значение b
, свободный параметр вашей гиперплоскости, а потом - 16 опорных векторов. Чтобы преобразовать опорные векторы в форму
alphay_i 1:s_i_1 2:s_i_2 3:s_i_3
просто посчитайте сумму
w = SUM_i alphay_i (s_i_1,s_i_2,s_i_3) = SUM_i alphay_i s_i
что приводит к уравнению разделяющей гиперплоскости нормаль (перпендикулярный вектор). Все уравнение вашей разделяющей гиперплоскости теперь имеет форму:
<w,x> + b = 0
где w
- эта сумма, а b
- ранее определенный параметр "перехвата" (0.85699902
в вашем случае), а <w,x>
- стандартный скалярный продукт.
Таким образом, для линейного ядра это упрощается до
w'x + b = 0
В общем случае, когда вы используете какое-то более сложное ядро (например, RBF или даже полиномиальное), вы не можете получить фактические параметры гиперплоскости, так как этот объект находится в пространстве признаков (поэтому для случая RBF он имеет бесконечно много измерений). Вы можете иметь только его функциональную форму
<w,x> = SUM_i alphay_i K(s_i, x)
person
lejlot
schedule
23.08.2013