【自学笔记】支持向量机(2)——核函数

引入

核函数 的功能是将一组数据映射到更高维 的特征空间,这样可以让在低维无法线性分类 的数据能够在高维空间下被分类。

可以证明,如果原始数据是有限的维度,那么一定存在一个高维特征空间使得样本线性可分。

文章内容由《机器学习》相关内容,网络资源,GPT回答和个人理解组成。

回顾

支持向量机(1)

在特征空间内划分超平面的模型可以表示为:

f ( x ) = w ⃗ T x ⃗ + b f(x)=\vec{w}^{T}\vec{x}+b f(x)=w Tx +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)=w Tϕ(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(w Tϕ(x i)+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ϕ(x i)Tϕ(x j)

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}) ϕ(x i)Tϕ(x j)可能并不好计算。于是我们设想这样一个函数(这被称为核技巧):

κ ( 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}) κ(x i,x j)=<ϕ(x i),ϕ(x j)>=ϕ(x i)Tϕ(x j)

这个函数的意义是我们直接研究 ϕ ( x ⃗ i ) \phi (\vec{x}{i}) ϕ(x i)和 ϕ ( x ⃗ j ) \phi (\vec{x}{j}) ϕ(x j)的内积,而不直接计算两者的具体值。于是问题转化为了:

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κ(x i,x j)

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)=w Tϕ(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ϕ(x i)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 ,x i)

这里 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} κ(x i,x j)=x iTx j 不进行任何映射,适用于线性可分的数据。
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} κ(x i,x j)=(x iTx j+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}} ) κ(x i,x j)=exp(−2σ2∣∣x i−x j∣∣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} ) κ(x i,x j)=exp(−σ∣∣x i−x j∣∣) σ > 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}} ) κ(x i,x j)=exp(−2σ2∣∣x i−x j∣∣) σ > 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) κ(x i,x j)=tanh(βx iTx j+θ) β > 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) κ(x i,x j)=exp(−γ∣∣x i−x j∣∣) 与高斯核类似,但使用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}) κ(x i,x j)=∏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)) κ(x i,x j)=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}) κ(x i,x j)=log(1+γ∣∣x i−x j∣∣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 )

总结

核函数的使用使得机器学习算法能够在复杂的特征空间中进行操作,而无需显式地计算该空间中的特征值,从而避免了"维度灾难"。核方法允许算法在高维空间中工作,同时保留了数据的原始维度,这在处理大量数据和高维数据集时非常有用。

在实际应用中,选择合适的核函数对于模型的性能至关重要,这通常取决于问题的特性以及数据的分布和结构。

相关推荐
吉大一菜鸡21 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
CCSBRIDGE3 小时前
Magento2项目部署笔记
笔记
xiaoshiguang33 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
别NULL3 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇3 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
亦枫Leonlew3 小时前
微积分复习笔记 Calculus Volume 2 - 5.1 Sequences
笔记·数学·微积分
爱码小白4 小时前
网络编程(王铭东老师)笔记
服务器·网络·笔记
yuanbenshidiaos5 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习5 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法