关于支持向量机,没有尝试去使用代码去实现,而是重点试着增加对支持向量机工作原因的理解。以下是学习笔记。
PART ONE: 关于对支持向量机核函数的理解
针对上图中:
选择三个点l(1)、l(2)、l(3),那么针对一个点X(i)到l(1)、l(2)、l(3)三个点的距离,按照正常的思维逻辑来理解:如果l(1)、l(2)是正样品,那么x(i)离这两个点越近,代表最终y=1的机率应该是越高的;反之,如果远离这两个点,则代表y=0的机率应该是越高的。
带着这个现象,我们再看下支持向量机的核函数。
假设:y=θ0+θ1*f1+θ2*f2;
其中f1,f2是核心函数。
设:f=exp(-||x-l(i)||2/2σ2)
这里面涉及到的几个数学公式:
1、exp(f(x)),f(x)代表一个复合函数(不要和上面的f1、f2混了,这是两个东西),那么这就代表是以e为底数,f(x)为指数的方程,数学曲线如下:
我们实际在使用exp(f(x))函数时,真正使用到,其实上面红线框出一部分内容,因为这里的f(x)=-||x-l(i)||2/2σ2,这里面的x∈(-∞,0]。
从这里面可以看到,如果x和l(i)两个重合或者非常接近,则-||x-l(i)||2–>0,则f(x)=1;相反,如果x点远离l(i)点,则-||x-l(i)||2值就会变小,f(x)–>0
2、||x-l(i)||2代表x点到l(i)的距离。
PART TWO:代价函数
关于C的取值:
C过大,可能导致过拟合;
C过小,可能导致欠拟合;
原因:主要是由于参数C决定着两个部分(Part1,Part2)的权重,如果C过大,则Part1部分的数据调整,对整体的影响较大,则会尽量会去降低Part1的值,从而导致过拟合现象的产生;
关于高斯函数中σ2的取值:可以假设以f点为圆点,σ2越大,则影响的距离越远(越广);反之则影响的距离越小
如果σ2大的话,我们也许可以得到这样的一个圈图:
而如果σ2小的话,我们也许可以得到这样的一个圈图:
所以具体的σ2需要根据实际项目的情况来进行判断、取值。
PART THREE:如何选择线性核函数还是高斯核函数?
很好的缩放比例:
||x(i)-l(i)||2,设u=x(i)-l(i),则就相当于u的向量。
||u||2=u12+u22+u32+u42…+un2
也就相当于(x1-l1)2+(x2-l2)2+(x3-l3)2+(x4-l4)2+…+(xn-ln)2
如果不进行特征的缩放,则会导致某个特征的偏差特别大,大而干扰到其它项。假设上述例子中,如果x1代表是房子的面积(单位:平方尺),x2代表房子的房间数,两个样本之前,房子的面积相差可能成百上千,而房间数可能就是相关2,3那么如果不进行缩放,则房间数的特征就会被房子的面积所忽略。
如果特征特别多,并且训练的样本比较小的情况下,一般可以使用逻辑回归或者线性核函数的支持向量机;
如果特征较小(例如:1到1000,一般情况下工作,自己的工作中的特征应该都是在这个区间的),而有适量的训练数据(适量的训练数据一般是小于百万,例如几百到几万)可以选择使用高斯核心函数;
如果训练集在几百万,则使用高斯核心函数的性能就会比较差。可以使用以下思路尝试解决:1、创建更可能多的特征;2、使用逻辑回归或者线性核函数;