SVM-核函数(Kernels)
非线性决策边界
对于下图中的数据集分类,我们一般会想到构造多项式特征变量:
![1.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0qwvqx6j20c507qgo2.jpg) ![3.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0qy5pm9j20bp07i0vi.jpg)
我们也可以写为:$ heta_0+ heta_1f_1+ heta_2f_2+...$,$f_1=x_1,f_2=x_2,...$,通过之前的知识可以看到加入这些多项式提供了更多的特征向量,然而有没有比这些高阶项更好的特征向量(因为这些高阶项的计算量是非常大的)。
现在我们在仅有x1和x2组成的特征轴上选取三个点-landmarks(忽略x0):(l^{(1)},l^{(2)},l^{(3)})。接下来按照以下方式定义新的特征变量:
给定x:f1= similarity((x,l^{(1)}))=exp((-frac{left |x-l^{(1)}
ight |^2}{2delta^2}))
f2= similarity((x,l^{(2)}))=exp((-frac{left |x-l^{(2)}
ight |^2}{2delta^2}))
f3= similarity((x,l^{(3)}))=exp((-frac{left |x-l^{()3}
ight |^2}{2delta^2}))
这里的相似度函数similarity为核函数(Gaussian kernels)
![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0qykhafj20o701z3za.jpg)
f1表示的意义:假设x很接近于$l^{(1)}$,我们有:
![5,jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0qz43z5j20bg01q0t1.jpg)
相反地,如果x很相距于$l^{(1)}$较远,我们有:
![6.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhf0qzjzg5j20g102lmxs.jpg)
为了更加直观的体现这种新的特征向量选取的特点,我们假设有两个特征x1和x2,假设第一个标记点$l^{(1)}$,其他假设如下:
![7.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf0qzuj5tj20dk02bweo.jpg)
尝试改变$delta$的取值,我们从下图可以看到随与标记点距离的远近不同,取值是有很大差异的(远处时已经几近于零了)。
![8.1jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0r0av4yj206c07uaar.jpg) ![8.2jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0r0oxmzj205s08pwew.jpg) ![8.3jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0r100wtj205a094mxu.jpg)
现在对于给定初识条件:
对于有一个训练样本x为图中红点处,模型设计算出参数值( heta_0=-0.5, heta_1=1, heta_2=1, heta_3=0),现在样本距离标点1处很近,而与标点2、3的距离较远,所以f1=1,f2=0,f3=0(实为近似,即约为)。
![10.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf0r1up1tj20a406gdg9.jpg)
此时根据预测函数:=-0.5+1+0+0=0.5>0 即判别为”1“,同样对应于图中的蓝点出,相距标点1、2、3都较远,因此有:=-0.5+0+0+0=-0.5<0即判别为“0”。
核函数-Kernels
上一小节中介绍了在非线性决策边界中,不使用原本的多项式特征量,而使用高斯核函数构成特征向量,但如何选择相应的标记点(landmarks),及是否有其他的核函数并未做说明。
对于给定的m个样本((x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})),选择标记点的选择为:
![1.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf5nebk5ij20b900ya9x.jpg)
对于任意样本x:
(f_1=similarity(x,l^{(1)})) (f_2=similarity(x,l^{(2)})) ....
特征向量为:,其中(f_0=1)
总结一下,对于任意样本(x(i),y(i))有:
对于参数theta的训练,按照以下公式(建议利用其他数值分析方面的高手提供的包来处理)
![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf5nffvi3j20nh02tdgj.jpg)
SVM-支持向量机的参数问题
-
C(=1/lambda)
C值较大时:高方差,低偏差 C值较小下:高偏差,低方差
-
(delta^2)如下图
(delta^2)较大时:特征很松散,高偏差,低方差
(delta^2)较小下:特征很紧凑,低偏差,高方差
![5.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf5ng90r3j206507oaa1.jpg)
使用SVM
一般使用SVM软件处理包(如:liblinear,libsvm,....)以解决参数theta的优化问题。
但之前需要明确:参数C的选择,核函数(相似度函数)的选择问题。
敝如:无核函数(“linear kernel”) -->当( heta^Tx ge 0),预测“y=1”
高斯核函数:,需要注意参数(delta^2)的选择。
![7.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf5ngvctrj20cz05ht96.jpg)
*注意:在使用高斯核函数之前,特征缩放是十分必要的!!*
核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数有:线性核函数,多项式核函数Polynomial'kernel ,径向基核函数,Sigmoid核函数和复合核函数,傅立叶级数核,B 样条核函数和张量积核函数等。
多类分类问题,如下图所示:
![8.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf5nhdgivj206n05j74a.jpg)
许多SVM包已经有很多内置的分类函数,但对多类问题也可用one-Vs-all方式。
逻辑回归vs神经网络vsSVMs
n=特征数目,m=训练样本数目
-
如果n的数目远远大于m:
使用逻辑回归或不含核(线性核)的SVM
-
如果n很小,m取值介于中间(m=10-10000)
使用带有高斯核的SVM
-
若n很小,m值很大(m=50000+)
创建/增加更多的特征,然后使用逻辑回归或不含核函数的SVM
-
神经网络对于上述较多的情形,但训练量很大,训练很慢