学习SVM时,关于类别选择问题陷入了一个误区,现在把这个过程记录下来,希望有同样疑问的童鞋也能注意一下。
如图1所示,直线方程为x+y-4=0,设直线上方的"o"为正例,直线下方的"+"为负例。当样本点被超平面正确分类时,满足yi(w*xi +b) > 0条件,但是这个前提是假设**直线上方的点为正例,下方的点为负例。
现在换一种打标签的方式,现在我设直线下方的点为正例,上方的点为负例,显然yi(w*xi +b) < 0(比如说取直线下方的点(0,0),代入直线方程得w*xi+b=0+0-4<0,而此时yi=+1,所以yi(wxi +b) < 0),也就是说,即使我把数据点正确分类了,但是此时满足的是yi(wxi +b) < 0而不是yi(w*xi +b) > 0。那岂不是说明,如果我这样打标签的话,SVM理论就不成立了?
答案当然不是,但看似这样想也没错,问题究竟出在哪呢?
这是因为我们先入为主了,想像一下,如果让你自己解决这个分类问题,你怎么解决?现在已知的是数据点和它对应的标签,但你并不知道这条直线方程,好,现在我们的目标当然是求这个直线方程。
(1)假设直线上方数据点是正例,下方的是负例,根据SVM算法,我们求出直线方程是x+y-4=0,此时数据点被正确分类,满足yi(w*xi +b) > 0。
(2)再假设直线上方数据点是负例,下方的是正例,根据SVM算法,我们求出直线方程是-x-y+4=0,注意,现在的直线方程虽然与x+y-4=0是一样的,但却反映了不同的问题,此时数据点被正确分类,满足yi(w*xi +b) > 0。(读者可以把正例点(0,0)代入验证一下。)
最后再举一个简单的例子来阐述一下这个问题:
引用李航老师《统计学习方法》中的例7.1:已知一个如图1所示的训练数据集,其正例点是x1=(3,3)',x2=(4,3)',负例点是x3=(1,1)',('表示转置)试求最大间隔分离超平面。
解:
根据训练数据集构造约束优化问题:
解得:w1=w2=0.5,b=-2,所以最大间隔分离超平面为:0.5x1+0.5x2-2=0。数据点被正确分类。
现在把题目改动一下,设x1,x2为负例点,x3为正例点,则优化问题变成:
解得:w1=w2=-0.5,b=2,所以最大间隔分离超平面为:-0.5x1-0.5x2+2=0。数据点被正确分类。
也就是说,对于二分类问题,不管选哪一类为正例,哪一类为负例,都不影响分类的正确性,分离超平面也是一样的。不同的是,一个超平面为w*x+b=0,另一个超平面为-w*x-b=0,虽然表示的都是同一个超平面,但本质是不同的。这个差别保证了超平面一侧的点代入w*x+b后的符号与相应的标签y是一致的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。