机器学习中的核技巧

核技巧、核函数

真正接触核方法应该是在 SVM ,正常情况下,感知机算法和支持向量机都是默认数据是线性可分的,这类问题叫做线性分类问题。当数据线性不可分的时候,但高维可分(这个不理解可以多看看书),我们仍然想用线性分类的方法去解决,这个时候就需要用非线性变换将非线性问题转换成线性问题。

于是,我们得到求解非线性分类问题的一个思路:
1. 用一个非线性变换,将数据特征从原空间映射到一个新的空间,这里的原空间是低维的输入空间(欧式空间或离散集合),新的空间是高维的特征空间(希尔伯特空间,完备的内积空间)
2. 在新的空间上使用线性分类算法求解。

(n)Φ(x)() 输 入 空 间 ( R n 或 离 散 集 合 ) Φ ( x ) → 特 征 空 间 ( 希 尔 伯 特 空 间 )

核函数的定义:
Φ(x) Φ ( x ) 是非线性变换的映射函数,则核函数 K(x,z)=Φ(x)Φ(z) K ( x , z ) = Φ ( x ) ⋅ Φ ( z ) ,定义为两个映射的内积。

一般特征空间是高维或者无穷维的,因此很难去定义一个特征空间以及输入空间到这个特征空间的映射,核技巧的想法是,在学习和预测中只定义核函数 K(x,z) K ( x , z ) ,而不显式地定义特征空间和映射,简化计算难度。

为什么是内积的形式呢,我的理解是一方面,在 SVM 或者感知机的对偶性只涉及到 xixj x i ⋅ x j ,另一方面,分类和回归任务可以分为两类:一类是参数学习,另一类是基于实例的学习,区别就在于在预测阶段基于实例的学习还会用到训练数据;针对基于实例的学习,内积关注的是判定两点之间的相似程度。

运用核函数等价于经过映射函数 Φ(x) Φ ( x ) 将输入空间的内积 xixj x i ⋅ x j 变换为特征空间的内积 Φ(x)Φ(z) Φ ( x ) ⋅ Φ ( z ) ,当映射函数是非线性函数时,学习到的模型就是非线性模型。

总的来说,在核函数 K(x,z) K ( x , z ) 给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题,学习是隐式地在特征空间进行,不需要显式地定义特征空间和映射,这样的技巧叫做核技巧。在实际应用中,往往依赖领域知识直接选择核函数。

如何自定义核函数以及验证核函数的有效性具体可以参考 《统计学习方法》中的 7.3.2 。

如何选择核函数

首先,常用的核函数有:线性核函数、多项式核函数、(高斯)RBF径向基核函数。
在 SVM 中,选择线性核函数和径向基核函数时,需要对数据进行归一化处理。

一般性建议,高维数据(数据维度大,是或者可以视为线性可分)的情况下,选择线性核函数,不行换特征,再不行换高斯核。
维度少的时候,如果可以的话提取特征使用线性核函数,不行再换高斯核函数,因为线性核函数最简单最快,高斯核复杂而慢,但是除了速度之外的性能一般都可以达到或优于线性核的效果。多项式核的参数比高斯核的多,参数越多模型越复杂;高斯核的输出值域在 0-1之间,计算方便;多项式核的输出值域在 0-inf 在某些情况下有更好的表现。

为什么高斯核能够映射到无穷维呢?多项式能够映射到高维(有限维),而高斯核的泰勒展开式是无限个不同维度的多项式核函数的和,因此可以映射到无穷维。关于这点我没推导过,这是知乎上解释。https://www.zhihu.com/question/35602879

你可能感兴趣的:(机器学习)