引入
核函数的功能是将一组数据映射到更高维的特征空间,这样可以让在低维无法线性分类的数据能够在高维空间下被分类。
可以证明,如果原始数据是有限的维度,那么一定存在一个高维特征空间使得样本线性可分。
文章内容由《机器学习》相关内容,网络资源,GPT回答和个人理解组成。
回顾
支持向量机(1)
在特征空间内划分超平面的模型可以表示为:
f ( x ) = w ⃗ T x ⃗ + b f(x)=\vec{w}^{T}\vec{x}+b f(x)=wTx+b
假如我们将特征向量 x x x以某种方式映射到了更高维的空间中,得到的新特征向量记作 ϕ ( x ⃗ ) \phi (\vec{x}) ϕ(x)。那新的模型可以表示为:
f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=wTϕ(x)+b
于是我们可以改写支持向量机中的命题:
min w ⃗ , b ∣ ∣ w ⃗ ∣ ∣ \min_{\vec{w}, b}||\vec{w}|| minw,b∣∣w∣∣
s.t. y i ( w ⃗ T ϕ ( x ⃗ i ) + b ) ≥ 1 , i = 1 , 2 , . . . , m y_{i}(\vec{w}^{T}\phi (\vec{x}_{i})+b) \ge 1, i=1,2,...,m yi(wTϕ(xi)+b)≥1,i=1,2,...,m
其对偶命题为:
g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) g(α)=∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjϕ(xi)Tϕ(xj)
max α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxαg(α)
s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi≥0, ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)
∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 ∑i=1mαiyi=0
核函数应用
由于\phi (\vec{x})的维度可能很高,甚至可能无穷维,上式中的 ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) ϕ(xi)Tϕ(xj)可能并不好计算。于是我们设想这样一个函数(这被称为核技巧):
κ ( x ⃗ i , x ⃗ j ) = < ϕ ( x ⃗ i ) , ϕ ( x ⃗ j ) > = ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \kappa (\vec{x}_{i},\vec{x}_{j})=<\phi(\vec{x}_{i}), \phi(\vec{x}_{j})>=\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) κ(xi,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)
这个函数的意义是我们直接研究 ϕ ( x ⃗ i ) \phi (\vec{x}_{i}) ϕ(xi)和 ϕ ( x ⃗ j ) \phi (\vec{x}_{j}) ϕ(xj)的内积,而不直接计算两者的具体值。于是问题转化为了:
g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x ⃗ i , x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\kappa (\vec{x}_{i},\vec{x}_{j}) g(α)=∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjκ(xi,xj)
max α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxαg(α)
s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi≥0, ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)
∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 ∑i=1mαiyi=0
对于不同的
ϕ
(
⋅
)
\phi(\cdot )
ϕ(⋅),显然对应着不同的
κ
(
⋅
,
⋅
)
\kappa (\cdot,\cdot)
κ(⋅,⋅),选定合适的
ϕ
(
⋅
)
\phi(\cdot )
ϕ(⋅)后可以提前求出
κ
(
⋅
,
⋅
)
\kappa (\cdot,\cdot)
κ(⋅,⋅),就可以减少计算量。
基于上述求解后得到:
f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=wTϕ(x)+b
= ∑ i = 1 m α i y i ϕ ( x ⃗ i ) T ϕ ( x ⃗ ) + b =\sum_{i=1}^{m}\alpha _{i}y_{i}\phi(\vec{x}_{i})^{T}\phi(\vec{x}) + b =∑i=1mαiyiϕ(xi)Tϕ(x)+b
= ∑ i = 1 m α i y i κ ( x ⃗ , x ⃗ i ) =\sum_{i=1}^{m}\alpha _{i}y_{i}\kappa (\vec{x},\vec{x}_{i}) =∑i=1mαiyiκ(x,xi)
这里 x ⃗ \vec{x} x是测试数据点, x i x_{i} xi为每一个训练数据点
上式显示出模型最优解可以通过训练样本的核函数展开,被称为支持向量展式。
寻找核函数
接下来就是确定一个合适的核函数。合适的核函数是否一定存在呢?什么样的函数适合作核函数呢?我们有以下定理:
对称性很好理解,而半正定性则有以下原因:
概括以下就是保持原有问题的凸性不变,维持束缚条件,保证参数的合理性和收敛性。(个人理解)
需要注意的是,在不知道特征映射的形式时,我们是无法知道什么样的核函数是合适的。如果核函数选择不当,将会成为影响模型性能的最大变数。
常用的核函数有:
名称 | 表达式 | 参数 | 用途&补充 |
---|---|---|---|
Linear Kernel(线性核函数) | κ ( x ⃗ i , x ⃗ j ) = x ⃗ i T x ⃗ j \kappa (\vec{x}_{i},\vec{x}_{j})=\vec{x}_{i}^{T}\vec{x}_{j} κ(xi,xj)=xiTxj | 不进行任何映射,适用于线性可分的数据。 | |
Polynomial Kernel(多项式核) | κ ( x ⃗ i , x ⃗ j ) = ( x ⃗ i T x ⃗ j + c ) d \kappa (\vec{x}_{i},\vec{x}_{j})=(\vec{x}_{i}^{T}\vec{x}_{j}+c)^{d} κ(xi,xj)=(xiTxj+c)d | d ≥ 1 d \ge 1 d≥1为多项式的次数 | 用于捕捉数据的非线性关系。 |
Gaussian Kernel(高斯核) | κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid ^{2}}{2\sigma ^{2}} ) κ(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2) | σ > 0 \sigma > 0 σ>0为高斯核的带宽 | 控制数据点的局部影响。非常强大的非线性核函数,常用于复杂的分类和回归任务。 |
Laplacian Kernel(拉普拉斯核) | κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ σ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{\sigma} ) κ(xi,xj)=exp(−σ∣∣xi−xj∣∣) | σ > 0 \sigma > 0 σ>0 | 拉普拉斯核完全等价于指数核,唯一的区别在于前者对参数的敏感性降低,也是一种径向基核函数。 |
Exponential Kernel(指数核) | κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{2\sigma^{2}} ) κ(xi,xj)=exp(−2σ2∣∣xi−xj∣∣) | σ > 0 \sigma > 0 σ>0 | 指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样改动会对参数的依赖性降低,但是适用范围相对狭窄。 |
Sigmoid Kernel(Sigmoid 核) | κ ( x ⃗ i , x ⃗ j ) = t a n h ( β x ⃗ i T x ⃗ j + θ ) \kappa (\vec{x}_{i},\vec{x}_{j})=tanh(\beta\vec{x}_{i}^{T}\vec{x}_{j}+\theta) κ(xi,xj)=tanh(βxiTxj+θ) | β > 0 \beta>0 β>0, θ < 0 \theta<0 θ<0 | 这个核函数试图模仿神经网络中的Sigmoid激活函数,但在某些情况下可能不会产生半正定核矩阵。 |
Laplace核 | κ ( x ⃗ i , x ⃗ j ) = e x p ( − γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid) κ(xi,xj)=exp(−γ∣∣xi−xj∣∣) | 与高斯核类似,但使用Laplace分布而非高斯分布。 | |
ANOVA Kernel(方差分析内核) | κ ( x ⃗ i , x ⃗ j ) = ∏ t = 1 n e x p ( − γ ( x i , t − x j , t ) 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=\prod_{t=1}^{n}exp(-\gamma(x_{i,t}-x_{j,t})^{2}) κ(xi,xj)=∏t=1nexp(−γ(xi,t−xj,t)2) | 主要用于分析方差(ANOVA)问题 | |
Wave Kernel(波形核) | κ ( x ⃗ i , x ⃗ j ) = e x p ( − 1 2 σ 2 s i n 2 ( π L ∣ x i − x j ∣ ) ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{1}{2\sigma ^{2}}sin^{2}(\frac{\pi }{L}\mid x_{i}-x_{j}\mid)) κ(xi,xj)=exp(−2σ21sin2(Lπ∣xi−xj∣)) | σ > 0 \sigma >0 σ>0控制相似性衰减的速度, L L L | |
L 是周期长度 | 适用于语音处理场景 | ||
Log Kernel(对数核) | κ ( x ⃗ i , x ⃗ j ) = l o g ( 1 + γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=log(1+\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid^{2}) κ(xi,xj)=log(1+γ∣∣xi−xj∣∣2) | 一般在图像分割上经常被使用 |
一般根据经验,文本数据通常用线性核,情况不明时可以采用高斯核。
我们还可以通过变形与组合已有核函数的方式来创造新的核函数,如:
(1)若 κ 1 \kappa_{1} κ1和 κ 2 \kappa_{2} κ2为核函数,则对任意正数 γ 1 , γ 2 \gamma_{1},\gamma_{2} γ1,γ2,其线性组合也是核函数。
γ 1 κ 1 + γ 2 κ 2 \gamma_{1}\kappa_{1}+\gamma_{2}\kappa_{2} γ1κ1+γ2κ2
(2)若 κ 1 \kappa_{1} κ1和 κ 2 \kappa_{2} κ2为核函数,则核函数的直积也为核函数。
κ 1 ⊗ κ 2 ( x ⃗ , z ⃗ ) = κ 1 ( x ⃗ , z ⃗ ) κ 2 ( x ⃗ , z ⃗ ) \kappa_{1}\otimes \kappa_{2}(\vec{x},\vec{z})=\kappa_{1}(\vec{x},\vec{z})\kappa_{2}(\vec{x},\vec{z}) κ1⊗κ2(x,z)=κ1(x,z)κ2(x,z)
(3)若 κ 1 \kappa_{1} κ1为核函数,则对任意函数 g ( x ⃗ ) g(\vec{x}) g(x),如下定义的 κ \kappa κ也是核函数。
κ ( x ⃗ , z ⃗ ) = g ( x ⃗ ) κ 1 ( x ⃗ , z ⃗ ) g ( z ⃗ ) \kappa(\vec{x},\vec{z})=g(\vec{x})\kappa_{1}(\vec{x},\vec{z})g(\vec{z}) κ(x,z)=g(x)κ1(x,z)g(z)
总结
核函数的使用使得机器学习算法能够在复杂的特征空间中进行操作,而无需显式地计算该空间中的特征值,从而避免了“维度灾难”。核方法允许算法在高维空间中工作,同时保留了数据的原始维度,这在处理大量数据和高维数据集时非常有用。
在实际应用中,选择合适的核函数对于模型的性能至关重要,这通常取决于问题的特性以及数据的分布和结构。