интерпретировать модель результата из svnlight

Я хочу разделить некоторые точки двух классов в 3D плоскостью и подумал, что это возможно с помощью машины опорных векторов (SVM).

Поэтому я настроил следующий файл данных (data.txt) для анализа с помощью svmlight:

-1 1:1 2:1 3:0
 1 1:1 2:2 3:0
-1 1:3 2:2 3:0
 1 1:3 2:3 3:0
-1 1:5 2:3 3:0
 1 1:5 2:4 3:0
-1 1:7 2:4 3:0
 1 1:7 2:5 3:0
-1 1:1 2:1 3:2
 1 1:1 2:2 3:2
-1 1:3 2:2 3:2
 1 1:3 2:3 3:2
-1 1:5 2:3 3:2
 1 1:5 2:4 3:2
-1 1:7 2:4 3:2
 1 1:7 2:5 3:2

выполнять:

./svm_learn data.txt model

К сожалению, я не знаю, как интерпретировать модель и как описывается разделяющая плоскость.

Вы можете помочь?


person Jan    schedule 27.08.2012    source источник


Ответы (1)


В результате файл вашей модели должен выглядеть так:

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