回顾
上一篇讲到了svm的对偶问题:
将svm的算法维度(w维度)由vc维变成了跟数据量N,但是这样真的就完全简化了么?在我们求Q这个矩阵时,需要先将x转化为z,然后再做内积,复杂度是d^2。在这一篇我们就要介绍一种可以简化这个步骤的方法~传说中的核函数。
核函数
引入概念
假设我们要做的x到z的转换是一个二次转换:
然后我们做一下内积:
化简化简,突然发现先转换为z空间再做内积的步骤可以直接转化为关于x的内积了。一下子将复杂度减少成了d~好神奇!
写成公式表示过程:
直接用一步来代替了原来的两步。
应用场景
在计算Q矩阵时,计算参数b时,还有进行test的时候都可以用到核函数来进行提速。
在这里我们也彻底摆脱了对于数据vc维的依赖,完全只是依赖输入数据的维度:
最后问题变成了这样:
核函数变形
我们可以把之前的二次核函数做一些变形:
这样变换之后会对应不一样的内积结果,同样的也对应了不同的几何性质:
这里可以看出用不同的γ,对应出不同的边界和支持向量。
这个问题进一步扩展到更高次变换上:
Q对应了Q次的空间上的一种变换,当然Q越大,表述能力越强,但是也要小心更容易overfit。
所以这里可以想到最简单的核函数,线性核函数:
线性first是很好的习惯,有可能效果非常好:)
超级核函数
我们会想,有没有存在一种核函数,他可以表述无限大空间的变换呢?开心的告诉你~有的:
利用一个泰勒展开,就可以拆成一个无线维度的转换了,当然这个东西怎么被想出来的我也不知道~只能orz~
更概括的讲:
我们把这个种核函数叫做高斯核函数。
当使用高斯核函数时:
预测结果是多个高斯函数的再支持向量上的线性组合。又被成为RBF kernel。
不同参数的高斯核函数:
当γ过大时会产生很强的overfit,所以就算无限维度核函数svm依然不能摆脱过拟合的大坑~