林轩田机器学习技法(Machine Learning Techniques)笔记(四)

我突然发现是不是记得有点详细了?感觉进度变慢了。
林轩田机器学习技法(Machine Learning Techniques)笔记(一)
林轩田机器学习技法(Machine Learning Techniques)笔记(二)
林轩田机器学习技法(Machine Learning Techniques)笔记(三)

P14 4.1
怎么减少Gaussian SVM的overfitting

  1. 有点φ(转换)太powerful
  2. 可能会注意到了,一直坚持要把资料完美分开,这样不见得是最好的分类方法,会被不可避免的noise影响

回想以前怎么避免noise:
pocket:找一条错误最小的线就可以了
因此,我们可以像pocket一样容忍一些错误,可以把它俩合体,用C来权衡错误和正确:
在这里插入图片描述
因此得到:soft-margin SVM
[ y n ̸ = s i g n ( w T z n + b ) ] = 0 [y_n \not= sign(w^Tz_n+b)]=0 [yn̸=sign(wTzn+b)]=0的时候说明分类正确,此时要求 y n ( w T z n + b ) > = 1 y_n(w^Tz_n+b)>=1 yn(wTzn+b)>=1 [ y n ̸ = s i g n ( w T z n + b ) ] = 1 [y_n \not= sign(w^Tz_n+b)]=1 [yn̸=sign(wTzn+b)]=1的时候,此时出现错误,然后会记录下错误,C表示错误在整体所占的权重,然后此时要求 y n ( w T z n + b ) > = − ∞ y_n(w^Tz_n+b)>=-\infty yn(wTzn+b)>=
但这样,蓝色的地方不是线性的,然后dual、kernel啥的也不成立。而且记录错误个数的话,小的错误和大的错误视为一样,效果就会不好。因此需要确定一个线性常数 ζ n ζ_n ζn ,变成记录的是犯了多大的错,而不是犯错的个数,这样又是个QP问题了。
在这里插入图片描述
ζ n ζ_n ζn表示每个点的犯错程度,就是红框里,那个violation距离。大的C表示容忍程度低,小的相反。然后因为加了个 ζ n ζ_n ζn,变量个数则为d~+1+N,因为加上 ζ n > = 0 的 规 定 ζ_n>=0的规定 ζn>=0,所以有2N个约束(constraint):
在这里插入图片描述


P15 4.2
接下来推导dual问题,然后用kernel来解决。
同样,设出α和β:
在这里插入图片描述
取L对ζ的梯度为0,可用α来表示β,代入之后得到新的式子:
在这里插入图片描述
得到的新的式子其实就跟之前的hard-margin一样,只不过条件有点变化,这里是 0 <= α <= C :
在这里插入图片描述
在这里插入图片描述
这个QP问题,是N个变量因为有 α n α_n αn,有2N+1个约束:因为每个 α n α_n αn有一个下限0和一个上限C,所以有2N个,加上1个 ∑ \sum ,就有2N+1个约束:
在这里插入图片描述


P16 4.3
现在我们可以利用QP算出α了,但是b的值不知道,因为之前是利用KKT的第四个条件算的,但现在因为是soft而不是hard,所以就没有这个条件了:
在这里插入图片描述
对比于hard,要想解出,就得解出ζ,想解出ζ,就得知道b,有点像“打不过boss要解锁技能,但解锁技能要打boss”:
在这里插入图片描述
因此定义free support vector( 点 α s 范 围 为 0 &lt; a s &lt; C 点α_s范围为0&lt;a_s&lt;C αs0<as<C),根据第二个式子,就是让 ζ s = 0 ζ_s=0 ζs=0,这样就有一个b了,当然这个b不固定,只要满足条件就可以了。而且一般情况下,会至少存在一组SV使 α s &lt; C α_s &lt;C αs<C红色石头)。
在这里插入图片描述
虽然现在有了soft的保护,但是C的取值还是不能乱取,否则可能会overfit:
在这里插入图片描述
现在,图上点可以划分成三种类型:
α n α_n αn的取值是0~C
①:非SV的( a n = 0 a_n=0 an=0) :这里根据第二个式子,ζ = 0,说明该点没有犯错,但是 a n = 0 a_n = 0 an=0表示这些点不是SV,所以这些点大部分在胖胖的边界的外头(极少数在边界上)
②:free SV的( 0 &lt; α n &lt; C 0&lt;α_n&lt;C 0<αn<C):这里根据第二个式子,ζ = 0,说明该点没有犯错,但是这些点是SV,所以就刚好是在边界上。因为ζ = 0,所以根据第一个式子,可以算出b。
③:bounded SV( a n = C a_n=C an=C):这些点在边界内(极少数边界上),这里 ζ 表示这些点违反的程度,即到边界的距离。
在这里插入图片描述


P17 4.4
可以用交叉验证(CV)来验证选的参数好不好,选出cv最小的那一组参数:
在这里插入图片描述
在SVM的leave one out Cross Validation中(不记得是啥的点这里,大致就是取数据集为N-1,测试集为k=1),然后这里有证明了Eloocv <= SV(的数量)/N :因为non-SV的err=0,即边界外的点对SVM的err不做贡献,而 eSV <= 1,所以Eloocv <= SV(的数量)/N
在这里插入图片描述
然后可以用 SV / N 来简单筛选掉比值高的,因为SV太多可能意味着模型不是太好。简单排除之后可以在别的模型上进一步做CV。
在这里插入图片描述
总结:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Only_Wolfy/article/details/89537802