机器学习之核函数的理解与常见核函数

0x01. 到底什么是核函数?

最早的分类问题是线性分类,因此仅靠一条线可以进行划分。如图:
在这里插入图片描述

但是对求解非线性问题,则是通过某种非线性变换 φ ( x ) \varphi (x) φ(x),将输入空间映射到高维特征空间,从而找到一个超平面进行分类。其实在svm中,就用到了核函数的思想,为了更清晰的呈现,特意去找了个视频:

核函数思想

摘自油管

好了,看完视频,我们也知道了其实对于不可分的平面,在支持向量过程中,采用的是通过映射到高维空间后,从而可以形成一个超平面,最终实现了超平面分类。即多项式回归通过将数据从低维映射到高维,将原本线性不可分的情况变成了线性可分的情况。

0x02. 为什么引入核函数?

使用多项式回归,随着维度的增加,会存在一个问题,那就是计算量会以几何级数增加。这么说其实看官估计还是一脸懵逼,因此,我们先叙述核函数的定义:

核函数K(kernel function):指 K ( x , y ) = < f ( x ) , f ( y ) > K(x, y) = <f(x), f(y)> K(x,y)=<f(x),f(y)>,其中x和y是n维的输入值,f(·) 是从n维到m维的映射(通常,m>>n)。<x, y>是x和y的内积(inner product)(也称点积(dot product))。


在此假设定义两个向量:

x = ( x 1 , x 2 , x 3 ) x = (x_1, x_2, x_3) x=(x1,x2,x3) y = ( y 1 , y 2 , y 3 ) y = (y_1, y_2, y_3) y=(y1,y2,y3)

定义映射函数: f ( x ) = ( x 1 ​ x 1 ​ , x 1 ​ x 2 ​ , x 1 ​ x 3 ​ , x 2 ​ x 1 ​ , x 2 ​ x 2 ​ , x 2 ​ x 3 ​ , x 3 ​ x 1 ​ , x 3 ​ x 2 ​ , x 3 ​ x 3 ​ ) f(x)=(x_1​x_1​,x_1​x_2​,x_1​x_3​,x_2​x_1​,x_2​x_2​,x_2​x_3​,x_3​x_1​,x_3​x_2​,x_3​x_3​) f(x)=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3)

定义核函数: K ( x , y ) = ( < f ( x ) , f ( y ) > ) 2 K(x,y)=(<f(x),f(y)>)^2 K(x,y)=(<f(x),f(y)>)2

假设: x = ( 1 , 2 , 3 ) x = (1,2,3) x=(1,2,3) y = ( 4 , 5 , 6 ) y = (4,5,6) y=(4,5,6)


如果不用核函数,我们如何求解?

先通过映射函数转换:
f ( x ) = ( 1 , 2 , 3 , 2 , 4 , 6 , 3 , 6 , 9 ) f(x)=(1, 2,3,2,4,6,3,6,9) f(x)=(1,2,3,2,4,6,3,6,9)
f ( y ) = ( 16 , 20 , 24 , 20 , 25 , 36 , 24 , 30 , 36 ) f(y)=(16,20,24,20,25,36,24,30,36) f(y)=(16,20,24,20,25,36,24,30,36)
再进行内积运算:
< f ( x ) , f ( y ) > = 1 × 16 + 2 × 20 + 3 × 24 + 2 × 20 + 4 × 25 + 6 × 36 + 3 × 24 + 6 × 30 + 9 × 36 = 16 + 40 + 72 + 40 + 100 + 180 + 72 + 180 + 324 = 1024 <f(x),f(y)>=1 \times 16 + 2 \times 20 + 3 \times 24 + 2 \times 20 + 4 \times 25 + 6 \times 36 + 3 \times 24 + 6 \times 30 + 9 \times 36 \\ =16+40+72+40+100+180+72+180+324 \\=1024 <f(x),f(y)>=1×16+2×20+3×24+2×20+4×25+6×36+3×24+6×30+9×36=16+40+72+40+100+180+72+180+324=1024


使用核函数,求解:

K ( x , y ) = ( 1 × 4 + 2 × 5 + 3 × 6 ) 2 = ( 4 + 10 + 18 ) 2 = 322 = 1024 K(x,y)=(1 \times 4+2 \times 5+ 3 \times 6)^2=(4 + 10 + 18)^2 = 322=1024 K(x,y)=(1×4+2×5+3×6)2=(4+10+18)2=322=1024


我们可以看到计算成本是不是一下就减小了。这还只是三维的映射,那如果是10维度甚至更高维度的呢?不得把人算死了,因此回到刚抛出的问题:使用多项式回归,随着维度的增加,会存在一个问题,那就是计算量会以几何级数增加。是不是这下就能理解了~kernel其实就是帮我们省去在高维空间里进行繁琐计算的“简便运算法”。甚至,它能解决无限维空间无法计算的问题!

0x03. 核函数在哪里应用?

在参考的众多资料中,SVM中的应用最为经典。在SVM中,遇到线性不可分的样本时,SVM就通过一个非线性映射的核函数把样本映射到一个线性可分的高维空间中,在此高维空间中建立线性函数(如二维空间的直线、三维空间的平面和高维空间的超平面)来划分样本的高维空间,此高维空间的线性分类面对应到输入样本空间的话就是一个非线性的分类面。结合第一部分的视频,是不是也很容易理解了划分的真实含义。

此处再借用一张图:
在这里插入图片描述

0x04. 常见的核函数

  1. 线性核函数: K ( v 1 , v 2 ) = < v 1 , v 2 > K(v_{1}, v_{2}) = <v_{1}, v_{2}> K(v1,v2)=<v1,v2>
  2. 多项式核函数: K ( v 1 , v 2 ) = ( γ < v 1 , v 2 > + c ) n K(v_{1}, v_{2}) = (\gamma<v_{1}, v_{2}>+c)^{n} K(v1,v2)=(γ<v1,v2>+c)n
  3. sigmoid核函数: K ( v 1 , v 2 ) = t a n h ( γ < v 1 , v 2 > + c ) K(v_{1},v_{2}) = tanh(\gamma<v_{1}, v_{2}>+c) K(v1,v2)=tanh(γ<v1,v2>+c)
  4. 高斯核函数: K ( v 1 , v 2 ) = e x p ( − ∣ ∣ v 1 − v 2 ∣ ∣ 2 2 σ 2 ) K(v_{1}, v_{2}) = exp(-\frac{||v_{1} - v_{2}||^{2}}{2\sigma^{2}}) K(v1,v2)=exp(2σ2∣∣v1v22)
  5. 拉普拉斯核函数: K ( v 1 , v 2 ) = e x p ( − ∣ ∣ v 1 − v 2 ∣ ∣ σ ) K(v_{1}, v_{2}) = exp(-\frac{||v_{1} - v_{2}||}{\sigma}) K(v1,v2)=exp(σ∣∣v1v2∣∣)

0x05. 参考

  1. https://yaoyz.blog.csdn.net/article/details/88071930?spm=1001.2014.3001.5502
  2. https://zhuanlan.zhihu.com/p/30009055?utm_source=qq
  3. https://blog.csdn.net/kateyabc/article/details/79980880
  4. https://www.zhihu.com/question/30371867
  5. http://songcy.net/posts/story-of-basis-and-kernel-part-2/
  6. https://blog.csdn.net/sinat_40624829/article/details/100894160
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值