//想买mac pro,大陆价格贵得很,在找港台或者美帝的小伙伴代购。囧囧=。=以后不能玩烧显卡的游戏了,谁有mac的待机时间太吸引人了。
上一次我们学习了对偶形式,对偶形式的解决其实也是一个二次规划的问题,而且这个二次规划问题好像是和我们所在的空间没有关系。
但是实际上,是隐藏在了矩阵计算中。这就是我们的瓶颈所在。
在矩阵计算中,每一项都有zz‘相乘,因为z是x在z空间的转换,所以可以写成zz’=f(x)f(x'),因为有的符号这个页面编辑不太方面,相应换一下,能看懂就行=。=
按照我们正常的思路就是先做完转换再去做内积,显然这是一个很费力气的过程。我们现在考虑能不能把这两个步骤合起来,来减少我们的运算量
下面来看这样一个例子:
f2(x)=(1,x1,x2,...,xd,x1*x1.x1*x2,...,x1*xd,x2*x1,x2*x2,...,x2*xd,...xd*xd)其实就是一个二次式
那么按照普通的思路
这个计算过程还是比较容易理解吧=。=
我们观察这个式子,显然最后面那一堆可以看成是中间那一堆的平方嘛
显然我们最后可以只通过计算xx就能算出结论,不需要转换到Z空间。
我们就把上面这个转换和内积合在一起的计算机称为kernel function
那自然在我们刚才二次规划问题中,计算的时候,也可以采用这样的思想
q=yyzz=yyk(x,x),其中k代表了kernel function ,当然我这里的式子都是表达一下意思,并没有详细标明下标,要看最准确的还是看老师的原视频比较好,这里能够明白意思就好。
接着,上次讲了,我们应该如何求b,从支持向量里面选择一个
b=y-wz,这个时候,我们发现我们求b的时候又有z了,怎么办?
可是记得我们上次学得w是关于z的线性组合
所以可以代换,具体步骤见下图
上图还包括了,得到b以后,如何求出分类器的推导,很简单。
前面我们通过一个特殊的例子得到了一个二次的kernel,那是不是在二次的时候,我们只能用这儿kernel呢?
其实不是的,我们可以看下图
可以看到我们可以同调整这个γ来调整这个二次项前面的系数。
在调整后这个γ以后,其实都是映射到一个空间,同时配合一个w来算一个权值,但是不同的γ对应到的几何意义肯定不一样,那么对应的margin以及SVs肯定会发生变化
如图
其中方框框代表了SVs
当然不仅仅是2次项
显然这三个变量控制了这个kernel
当然按照我们的这场思维,太高次的kernel是不是会导致overfit呢,还好在我们的SVM里面,我们有一个larg-margin来帮助我们控制复杂度,所以可以看到利用SVM加上kernel不但可以有效的控制计算复杂度,还可以有效的控制复杂度。
那么我们现在有一个很疯狂的想法,无限多维的转换。
引入高斯kernel
看一下高斯kernel的步骤
中间用了一下泰勒展开,其他地方在数学上没有任何难度,大家应该都能看懂,泰勒展开忘了,可以去翻高数书=。=
想当年我高数也是考了98的,现在好多都忘了=。=,被吊打
那么带入我们刚才知道的利用kernel表示的g
得到
显然前面那个γ也是一个参数
其实仔细观察这个式子,我们可以发现,其实这个式子就是SVs的高斯函数组合,不是SVs的点,显然因为α是0,可以不考虑了
所以也被人称作Radial Basis Function(RBF)
当然这个γ的选择也是要注意的,虽然SVM有large-margin控制复杂度,但也只是控制,所以还是有可能出现overfit
如图
那我们上面提到这么多kernel,下边进行好坏对比
linear:安全,快,能看得比较明白,坏处自然是不能处理比较复杂的数据
polynomial:自然限制少,能够自己考虑这个Q,坏处对于Q很大的时候,数值计算会比较困难,参数选择比较困难,因为有3个参数需要选择、
gaussian :能做出复杂边界,宽松,gaussion数值困难小,参数选择较小,坏处是,不太好表达,不能很好表达,可能会出现overfit,最常用的
kernel不仅要对称还要半正定
我们现在都是要求在Z空间里面要线性可分,所以如果有noise,这样会导致overfitting
下一节来解决。