核函数与非线性支持向量机
一、上节回顾
线性可分与硬间隔最大化
线性可分与软间隔最大化
二、问题引入与探讨
对于这种线性不可分的数据,如何得到我们的分类模型?
多层感知机也就是神经网络算法可以,这里我们可以进行一个升纬试试。
feature mapping : Φ \Phi Φ: R 2 R^2 R2 ———— > — ———> ————> R 3 R^3 R3
( x 1 , x 2 ) (x_1,x_2) (x1,x2) — > —> —> ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3)= ( x 1 2 , 2 x 1 x 2 , x 2 2 ) (x_1^2,\sqrt{2}x_1x_2,x_2^2) (x12,2x1x2,x22)
Cover Theomem:高维空间比低维空间更易线性可分。
什么意思呢?分类问题中,对于严格不可分问题,我们引入一个特征映射函数
Φ
(
x
)
\Phi(x)
Φ(x)将原来的不可分的数据集变为可分的数据集,然后再来应用已有的模型(SVM)。往往将低维空间的数据集变为高维空间的数据集后,数据会变得可分(数据变得更为稀疏)
<
x
i
,
x
j
>
=
x
i
T
x
j
<x_i,x_j>=x_i^Tx_j
<xi,xj>=xiTxj
前面,我们再求解SVM过程中,将原问题转化为对偶问题,产生了两点的内积
x
i
T
x
j
x_i^Tx_j
xiTxj,对于已经特征映射的数据集
x
i
T
x
j
x_i^Tx_j
xiTxj计算将变为
Φ
(
x
i
)
T
Φ
(
x
j
)
\Phi(x_i)^T\Phi(x_j)
Φ(xi)TΦ(xj)计算。
这里就产生了一些问题:
- 特征映射函数 Φ ( x ) \Phi(x) Φ(x)纬度一般很高,难以确定。
- Φ ( x i ) T Φ ( x j ) \Phi(x_i)^T\Phi(x_j) Φ(xi)TΦ(xj)计算量大。
怎么办呢?不妨在特征空间任意取两个点 ( Φ ( x 1 ) , Φ ( x 2 ) ) (\Phi(x_1),\Phi(x_2)) (Φ(x1),Φ(x2))、 ( Φ ( x 1 ′ ) , Φ ( x 2 ′ ) ) (\Phi(x_1'),\Phi(x_2')) (Φ(x1′),Φ(x2′)),进行内积计算:
发现这个例子里面,特征空间两点的内积就等于输入空间这两点内积的平方,与特征映射函数
Φ
(
x
)
\Phi(x)
Φ(x)没有关系, 那么在这个例子中,我们直接把这个
<
x
,
x
′
>
2
<x,x'>^2
<x,x′>2定义为一个函数,称为核函数(kernel function):
κ
(
x
,
x
′
)
=
<
x
,
x
′
>
2
\kappa(x,x')=<x,x'>^2
κ(x,x′)=<x,x′>2
这样,我们即使不知道特征映射函数
Φ
(
x
)
\Phi(x)
Φ(x)是什么,直接通过
κ
(
x
,
x
′
)
\kappa(x,x')
κ(x,x′)函数就能得到数据在特征空间的内积。
什么意思呢?具体来说就是,对于一个具体的分类问题和数据集,如果我们能找到一个合适的核函数,它能计算在数据点在特征空间的内积,那么我们就能直接使用SVM,而与特征映射函数 Φ ( x ) \Phi(x) Φ(x)无关。
三、核方法、核技巧、核函数
讲人话的方式区分一下这几个概念!
核方法(kernel method):将数据点从输入空间映射到更高维度的特征空间,将非线性问题转化为线性问题。
核函数(kernel function):它是一个函数,接受两个输入空间数据点,并计算它们在高维特征空间中的内积。给定两个输入空间数据点x和y,核函数
κ
(
x
,
y
)
\kappa(x,y)
κ(x,y)的计算如下:
κ
(
x
,
y
)
=
φ
(
x
)
⋅
φ
(
y
)
\kappa(x,y)=φ(x) · φ(y)
κ(x,y)=φ(x)⋅φ(y)
φ(x) 和 φ(y) 是输入空间数据点x和y在高维特征空间中的映射。
核技巧(kernel trick):避免求 Φ ( x ) \Phi(x) Φ(x),再求内积,找到一个合适的核函数,直接计算。
如何判断一个函数能不能作为核函数
能不能根据定义来判断呢?将输入空间的数据表示为特征空间的内积。
显而不能,我们提出核函数的目的就是为了避免找特征映射函数 Φ ( x ) \Phi(x) Φ(x),希望能够通过核函数直接得到数据点在特征空间的内积。
看看核函数有什么特性呢?
-
核函数是对称的
-
核函数的gram matrix(格拉姆矩阵)是半正定的。
什么是gram matrix?
N维欧式空间中任意M个向量两两内积,所构成的矩阵称作gram matrix。
所以,核函数也有另外一个定义:
设 K \Kappa K : χ \chi χ X χ —— > R \chi——>R χ——>R, K ( x , z ) \Kappa(x,z) K(x,z)是对称的,且如果对任意的 x i x_i xi $ \epsilon$ $ \chi , , ,\Kappa(x,z) 对应的 g r a m m a t r i x 是半正定的,那么 对应的gram matrix是半正定的,那么 对应的grammatrix是半正定的,那么\Kappa(x,z)$可以作为核函数。
什么意思呢?我们可以通过第二个定义判断一个函数能不能作为一个核函数,对称且其Gram matrix半正定。
常用的一些核函数
- **多项式核函数 (polynomial kernel function) **
多项式核函数的数学形式通常表示为:
- ( x ) 和 ( y ) 是输入向量。
- ( a ) 是一个可调参数,用于控制多项式项的影响(通常设置为1)。
- ( c ) 是一个常数项,通常称为偏置项(bias term),用于控制模型的复杂度。
- ( d ) 是多项式的阶数(degree),即多项式的幂次。
-
高斯核函数(Gaussian kernel function)
高斯核函数的数学表达式为:
-
( x ) 和 ( y ) 是输入向量。
-
( |x - y|^2 ) 是 ( x ) 和 ( y ) 之间的欧氏距离的平方。
-
( sigma ) 是高斯核的宽度参数,控制函数的幅度。较小的 ( sigma ) 值会使得核函数在局部的影响范围更小,而较大的 ( sigma ) 值则会使得核函数的影响范围更大。
高斯径向基核函数(Gaussian Radial Basis Function Kernel):适用于一般情况,对于未知数据分布通常表现得较好。需要调整核函数的带宽参数。
四、非线性支持向量机
上面我们花了大量内容,说明了一件事:
利用核方法,我们可以将线性分类的学习方法应用到非线性分类中去,将线性支持向量机拓展到非线性支持向量机,只需要将线性支持向量机中对偶问题的内积换成核函数。后面求解模型的方法与线性支持向量机无二,不在赘述。
到这里其实还有一个问题没有回答。
我们知道如何判断一个函数能否作为核函数,但是似乎还不知道对于一个具体的分类问题和数据集,如何选择核函数?
- 理解不同类型的核函数:
- 数据分布和领域知识:
- 了解问题领域的特点和数据分布。不同的核函数可能在不同类型的数据上表现更好。
- 观察数据的散点图,了解数据的分布情况,以帮助选择合适的核函数。
- 交叉验证:
- 使用交叉验证来评估不同核函数的性能。通常,采用k折交叉验证来比较不同核函数的性能,以选择最合适的一个。
- 超参数调优:
- 对于每种核函数,需要调整相应的超参数。例如,多项式核函数需要调整多项式的阶数,高斯核函数需要调整带宽参数。可以使用网格搜索或随机搜索等技术来寻找最佳的超参数组合。
- 观察训练和测试结果:
- 观察训练和测试数据上的性能表现,包括准确率、召回率、F1分数等指标。选择核函数时,考虑其在测试数据上的性能表现。
- 集成方法:
- 可以考虑使用集成学习方法,如随机森林或梯度提升树,将多个SVM模型使用不同核函数的结果进行组合,以提高性能。
总之,选择合适的核函数需要一定的经验和实验。通常,需要尝试不同类型的核函数,并使用交叉验证和超参数调优来确定最佳的核函数及其参数设置。领域知识和数据分布的理解也对选择合适的核函数至关重要。
使用不同核函数的结果进行组合,以提高性能。
总之,选择合适的核函数需要一定的经验和实验。通常,需要尝试不同类型的核函数,并使用交叉验证和超参数调优来确定最佳的核函数及其参数设置。领域知识和数据分布的理解也对选择合适的核函数至关重要。