我想用平面分离3D中的2个类的一些点,并认为这应该可以使用支持向量机(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
不幸的是,我不知道如何解释模型以及如何描述分离平面。
你能帮忙吗?
答案 0 :(得分: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)