1

我想用一个平面将 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

不幸的是,我不知道如何解释模型以及如何描述分离平面。

你能帮我吗?

4

1 回答 1

2

因此,您的模型文件应如下所示:

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)
于 2013-08-23T10:35:16.120 回答