本质
假设: 函数Ф是一个从低维特征空间到高维特征空间的一个映射,那么如果存在函数K(x,z), 对于任意的低维特征向量x和z,都有:
称函数K(x,z)为核函数(kernal function);
核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。
本质: 核函数是一个低纬的计算结果,并没有采用低纬到高维的映射。只不过核函数低纬运算的结果等价于映射到高维时向量点积的值。
公式演绎
不妨还是从最开始的简单例子出发,设两个向量x = (μ + μ) 和x = (η + η) ,两个向量的点积是五维空间的映射,因此映射过后的内积为:
高维公式
而同时我们可以发现有以下公式:
低纬公式
可以发现两者之间非常相似,所以我们只要乘上一个相关的系数,就可以让这两个式子的值相等,这样不就将五维空间的一个内积转换为两维空间的内积的运算。
举例:
现有有两个两维的向量,进行二阶多项式扩展,然后进行内积计算,这个时候映射高高维后计算的计算量为:11次乘法+4次加法;采用近似计算的计算量为:3次乘法+2次加法;采用加系数后的近似计算的计算量为:4次乘法+2次加法;
计算过程
几种核函数
线性核函数
线性核函数(Linear Kernel): 即原函数,不做映射。
多项式核函数(Polynomial Kernel)
其中γ、r、d属于超参,需要调参定义;
类似上面的函数,上面的0.8476是调参出来的结果。
**
高斯核函数(Gaussian Kernel)
其中γ属于超参,要求大于0,需要调参定义;
高斯核在实际运用中特别多,不仅仅是因为需要调的参数比较少。
最重要的原因是:
在sklearn中,核函数是rbf,即Radial basis functionfuntion 径向基;其中真正用到的核函数算法是高斯核。
PS:之前在讲加权线性回归中提过相似度的度量,其中用到的就是类似高斯核的函数。
Sigmoid核函数
Sigmoid核函数(Sigmoid Kernel):其中γ、r属于超参,需要调参定义;
了解即可,这个核函数别去用它,垃圾得一塌糊涂。
该算法大致上就是把Sigmoid函数变成了tan函数。
Sigmoid核函数的几何意义
核函数的几何意义:
将原始数据映射到高维,然后找一个超曲面来分割它们。差不多就是我上一章一开始画的那个图。
几何意义
核函数总结
1、 核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;
Gram矩阵
2、核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算;
3、 通过核函数,可以将非线性可分的数据转换为线性可分数据;
高斯核公式证明
令z=x;那么进行多维变换后,应该是同一个向量,从而可以得到以下公式:
高斯核公式证明
了解核函数的构造方式,尤其是高斯核。
选择
一般用线性核和高斯核,也就是Linear核与RBF核
需要注意的是需要对数据归一化处理,很多使用者忘了这个小细节
然后一般情况下RBF效果是不会差于Linear
但是时间上RBF会耗费更多,其他同学也解释过了
下面是吴恩达的见解:
1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
即:
- 如果特征维数很高,往往线性可分(SVM 解决非线性分类问题的思路就是将样本映射到更高维的特征空间中),可以采用 LR 或者线性核的 SVM;
- 如果样本数量很多,由于求解最优化问题的时候,目标函数涉及两两样本计算内积,使用高斯核明显计算量会大于线性核,所以手动添加一些特征,使得线性可分,然后可以用 LR 或者线性核的 SVM;
- 如果不满足上述两点,即特征维数少,样本数量正常,可以使用高斯核的 SVM。