算法强化 —— SVM(四)

核函数

线性不可分问题怎么解决
对svm 来讲,最好的当然是样本完全线性可分,就算差一点不是完全的我们也希望绝大部分眼本店线性可分。
但是我们可能碰到一种情况,样本点不是线性可分的
在这里插入图片描述
这种情况的一种解决办法就是,将二维线性不可分样本,映射到高维空间中,让样本点在高维空间线性可分,比如变成这样:
在这里插入图片描述
高维比低维更容易线性可分

什么是非线性SVM

对于有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机就是非线性SVM

我们将样本映射到的这个逢高维度的新空间叫做特征空间
我们现在用x来表示原来的样本点,用 ϕ ( x ) \phi(x) ϕ(x)表示x映射到特征空间之后的新向量。

那么分隔超平面可以表示为: f ( x ) = w ϕ ( x ) + b f(x)=w \phi(x)+b f(x)=wϕ(x)+b

由于上面的线性SVM的对偶问题,此处非线性SVM的对偶问题就变成了
min ⁡ ( 1 2 ∑ i = 1 m ∑ j = 1 m λ i λ j y i y j ϕ ( x i ) ⋅ ϕ ( x j ) − ∑ i = 1 m λ i )  s.t.  ∑ i = 1 m λ i y i = 0 0 ⩽ λ i ⩽ C , i = 1 , 2 , … , m \begin{array}{c} \min \left(\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \lambda_{i} \lambda_{j} y_{i} y_{j} \phi\left(x_{i}\right) \cdot \phi\left(x_{j}\right)-\sum_{i=1}^{m} \lambda_{i}\right) \\ \text { s.t. } \sum_{i=1}^{m} \lambda_{i} y_{i}=0 \\ 0 \leqslant \lambda_{i} \leqslant C, \quad i=1,2, \ldots, m \end{array} min(21i=1mj=1mλiλjyiyjϕ(xi)ϕ(xj)i=1mλi) s.t. i=1mλiyi=00λiC,i=1,2,,m
可以看到,和线性SVM唯一的不同就是:之前的 x i x_i xi x j x_j xj的内积(点乘)变成了 ϕ ( x i ) \phi(x_i) ϕ(xi) ϕ ( x j ) \phi(x_j) ϕ(xj)的内积

为什么要有核函数

我们可以看到,对于费现象函数来说,和之前不同的主要是 ϕ ( x i ) \phi(x_i) ϕ(xi) ϕ ( x j ) \phi(x_j) ϕ(xj)的内积。而由于是地位空间映射到高维空间,维度可能会很大,所以如果将全部样本点的点乘全部计算好,这样的计算量太大了
针对这个问题,我们的解决方式是先不算 ,用一个函数先替代,我们用
k ( x i , x j ) = ϕ ( x i ) ∗ ϕ ( x j ) k(x_i,x_j) = \phi(x_i)*\phi(x_j) k(xi,xj)=ϕ(xi)ϕ(xj)
这样子函数 k ( x i , x j ) k(x_i,x_j) k(xi,xj)称之为核函数。

假设我们现在有一个多项式核函数
k ( x , y ) = ( x ∗ y + 1 ) 2 k(x,y) = (x*y+1)^2 k(x,y)=(xy+1)2
对于这个核函数,如果带入样本的话,是这样的:
k ( x , y ) = ( ∑ i = 1 n ( x i ∗ y i ) + 1 ) 2 k(x,y) = (\sum_{i=1}^n (x_i*y_i)+1)^2 k(x,y)=(i=1n(xiyi)+1)2

式子展开:
∑ i = 1 n ( x i 2 ) ( y i 2 ) + ∑ i = 2 n ∑ j = 1 i − 1 ( 2 x i x j ) ( 2 y i y j ) + ∑ i = 1 n ( 2 x i ) ( 2 y i ) + 1 \sum_{i=1}^{n}\left(x_{i}^{2}\right)\left(y_{i}^{2}\right)+\sum_{i=2}^{n} \sum_{j=1}^{i-1}\left(\sqrt{2} x_{i} x_{j}\right)\left(\sqrt{2} y_{i} y_{j}\right)+\sum_{i=1}^{n}\left(\sqrt{2} x_{i}\right)\left(\sqrt{2} y_{i}\right)+1 i=1n(xi2)(yi2)+i=2nj=1i1(2 xixj)(2 yiyj)+i=1n(2 xi)(2 yi)+1
我们需要先把向量映射成:
x ′ = ( x n 2 , … , x 1 2 , 2 x n x n − 1 , … , 2 x n , … 2 x 1 , 1 ) x^{\prime}=\left(x_{n}^{2}, \ldots, x_{1}^{2}, \sqrt{2} x_{n} x_{n-1}, \ldots, \sqrt{2} x_{n}, \ldots \sqrt{2} x_{1}, 1\right) x=(xn2,,x12,2 xnxn1,,2 xn,2 x1,1)
然后再进行计算,可见这个映射不管是计算量还是存储量都是巨大的,但是有了核函数,就不需要做这样的映射,直接使用原样本维度的点进行计算即可

有了核函数,如何求解非线性SVM的问题

在有了核函数之后,非线性问题重新转变成了线性问题,和之前求解过程一样,先根据对偶函数求解$\lambda , 然 后 g e n u i n e ,然后genuine genuine\lambda$求解w,再根据支撑向量求解b即可。

一些常用的核函数

线性核函数

k ( x i , x j ) = x i T x j k(x_i,x_j) = x_i^T x_j k(xi,xj)=xiTxj
使用时无需指定参数,它直接计算两个输入向量的内积。经过线性核函数转换的样本,特征空间与输入空间重合,相当于并没有将映射到更高维度空间里去

多项式核函数(Polynomial Kernel)

k ( x i , x j ) = ( γ x i T x j + r ) d , γ > 0 , d ≥ 0 k(x_i,x_j) = (\gamma x_i^T x_j + r)^d ,\gamma > 0,d \geq 0 k(xi,xj)=(γxiTxj+r)d,γ>0,d0
需要指定三个参数: γ , r , d \gamma,r,d γ,r,d
这是一个不平稳的核,适用于数据做了归一化的情况

RBF核(Radial Basis Function Kernel)

k ( x i , x j ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) , γ > 0 k(x_i,x_j) = exp(-\gamma||x_i-x_j||^2),\gamma > 0 k(xi,xj)=exp(γxixj2),γ>0
RBF核又叫高斯核(Gaussian Kernel),是一个核函数家族,他会将输入空间的样本以非线性的方式映射到更高维度的空间(特征空间)里去,因此它可以处理类标签和样本属性之间是非线性关系的状况

它有一个参数 γ \gamma γ,这个参数的设置非常关键

如果设置过大,则整个RBF核会向线性核方向退化,向更高维度非线性投影的能力就会减弱;
但是如果设置过小,则会使得样本中噪声过大,从而干扰最终SVM的有效性

不过相对于多项式核的3个参数,RBF核只有一个参数需要调,还是相对简单的

当线性核效果不是很好时,可以用RBF试试,或者很多情况下直接使用RBF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值