一直在用现成的包里的SVM函数做分类问题,但对SVM还是一知半解,尤其是支持向量这个概念不大理解。支持向量到底是指什么样子的向量?还是就是泛泛而指?
6个回答
你在画分割线区分红绿两类点的时候,可以问自己一个问题,你认不认为所有的点对于分割线的位置都是起决定性作用的?
其实在特别远的区域,哪怕你增加10000个样本点,对于分割线的位置,也是没有作用的,因为分割线是由几个关键点决定的(图上三个),这几个关键点支撑起了一个分割超平面,所以这些关键点,就是支持向量。
SofaSofa数据科学社区DS面试题库 DS面经所谓向量,其实就是样本点,因为每个样本都是一行数据,也就是向量。
SVM可以用下面这个图表示。
红线和蓝线分别是决策平面。决策平面上的样本点就是支持向量。
来个自己朴素的见解:
对于普通的求解一个二次凸规划的Vapnik型SVM(简称其为V-SVM)而言,所谓支持向量就是落在支撑平面上的数据点,“支撑平面”是两个和最终求解规划问题得到的划分平面在高维特征空间中平行的平面(高维指维度等于或高于训练点所在的维度,和核函数的选取相关),直观上来讲,这两个平面在高维空间中分别紧紧地贴合着训练点中的两个类别(一般是+、-表示),之所以说“紧紧贴着”,是因为两类点中有点落在了这两个平面上,这样来看,是不是就像是两个平面在高维空间里牢牢得把点“撑开”,以形成中间尽可能宽阔的无点地带,所以说“撑(support)”这个自己在我就是如上形象直观来理解的,那么落在这个支撑平面上的训练点就叫做“支撑向量”,那可能会奇怪,为什么要叫“向量”而不叫“支撑点”呢?因为我们在计算时都是使用点的全部坐标,而一个坐标的组合可以在空间内表示一个点,也可以说是一个由原点O作为起点的向量,那么命名者采用了向量去命名,其实就是点的意思(至于什么是促成选择“向量”命名而不是“点”来命名的具体逻辑其实我也不知道,有没有人来解惑一下)。经过对凸二次规划的求解可以发现,对于那些不在支撑平面上的点而言,其对于最终求得的划分平面的贡献为0(即其对应的拉格朗日乘数为0),那么就是说,在V-SVM中,只有支撑向量会决定划分平面的表达式;
那么还有一种情况,就是最小二乘支持向量机(LS-SVM),这个时候所谓“支持向量”就泛化了意思了,因为它的经验最小化项是准确的点与划分平面之间的误差,这使得所有的训练点都要参与计算,所有的训练带你都对最终的划分平面的表达式有影响,这样按照前面对于V-SVM的认知,就说,在LS-SVM中,所有的点都是支撑向量。
SofaSofa数据科学社区DS面试题库 DS面经soft margin的SVM的loss function
$$l(w)=\frac{1}{n}\sum_{i=1}^{n}max(0,1-y_i(w^Tx_i-b))+\lambda||w||^2$$
support vectors是$1-y_i(w^Tx_i-b)\geq 0$的点,或者说在loss function中有贡献的点。具体找support vectors,要用dual problem方法。假设已经找出所有support vectors,有
$$l(w)=\frac{1}{n}\sum_{i\in S}(1-y_i(w^Tx_i-b))+\lambda||w||^2$$
其中$S$是SV点集合。对$w$求导
$$\dfrac{dl(w)}{dw}=\frac{1}{n}\sum_{i\in S}(-y_ix_i)+\frac{\lambda}{2}w=0$$
$$w=\frac{2}{n\lambda}\sum_{i\in S}(y_ix_i)$$
设新输入点$x_i'=y_ix_i$,当$y_i=1$时,$x_i'=x_i$,当$y_i=-1$时, 把$x_i$沿原点翻转,得到新的标签为1的点$x_i'=-x_i$。最后$x'$就是所有标签都为1的点。求$x'$的平均正比于法线$w$(normal vector),也就决定了分割平面的方向。
$$w=\frac{2}{n\lambda}\sum_{i\in S}(x_i')$$
SofaSofa数据科学社区DS面试题库 DS面经