十一城

跬步千里,小流江海。

Home Linux ML Python Java Thoughts KmKg BookCan Links About

2018-03-20
机器学习-SVMs-核方法

• 分类: ml • 标签:

核方法、核技巧

pass

核函数

核函数是内积,而不是映射,但其定义了映射。

其主要是将线性不可分的数据映射到高位空间再进行线性分类,他是映射到新的特征空间后的内积运算,因为最终核函数的结果表达式中只需要内积的形式,

kernel的本质是给出了任意两个样本之间关系的度量。如果不严谨的形象解释,分类器有两种,一种是找到一个分类面函数,这个函数只要输入一个样本的特征就知道类别。还有一大类分类器(比如knn),他们的思想就是和我像的样本类别一定大概率和我一样,而kernel就是定义了什么叫“像”。所以带kernel的svm也不是能解决任意非线性分类问题,是否能解决某一类问题,取决于它的kernel定义出的“像”是否能让这个问题里互相比较“像”的样本具有同样类别的概率大。

但是kernel确实可以定义一个映射,而且确实是一个非常强大的映射,很多方法在这个映射下是可以直接推广到kernel space的,包括SVM,logistic regression, least squre,dimension reduction。

核函数的种类

  • 线性核
    • 线性核$$\kappa(x_1,x_2)= \left<x_1,x_2\right>$$,实际上就是原始空间中的内积。这个核存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上统一起来了(意思是说,咱们有的时候,写代码,或写公式的时候,只要写个模板或通用表达式,然后再代入不同的核,便可以了,于此,便在形式上统一了起来,不用再分别写一个线性的,和一个非线性的)
    • 主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想。
    • 线性核函数是RBF的一个特例
  • 多项式核
  • RBF核——例如高斯核
    • 高斯核是用的最多的核函数,对训练数据分类效果最好
    • 主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时
    • 容易过拟合,需要更多的样本、泛化能力弱
  • Sigmoid核

核函数的选择

  1. 如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了
  2. 如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果
  3. 如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样
  4. 对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法

联想线性方程组

参考


dzzxjl

Home Linux ML Python Java Thoughts KmKg BookCan Links About