核函数是 SVM 的最重要的部分,我们可以通过设置不同的核函数来创造出非常复杂的、非线性的支持向量机。

1.核(Kernel)

首先来看看什么是核函数。如图所示,假设有一个样本 xx 有两个特征 x1,x2x_1,x_2,我们可以根据与地标(landmarks) l(1),l(2),l(3)l^{(1)},l^{(2)},l^{(3)} 的接近程度(proximity),或者说相似性(similarity),来产生新的更多的特征 ,假如我们有如下三个地标,注意地标的维数和特征的维数是相同的(后面会解释什么是地标,以及地标是怎么产生的):


在这里,我们定义新特征 f1,f2,f3f_1,f_2,f_3为:

f1=similarity(x,l(1))=e−‖x−l(1)‖22σ2f2=similarity(x,l(2))=e−‖x−l(2)‖22σ2f3=similarity(x,l(3))=e−‖x−l(3)‖22σ2

f_1=similarity(x,l^{(1)})=e^{-\frac{\Arrowvert x-l^{(1)}\Arrowvert^2}{2\sigma^2}}\\ f_2=similarity(x,l^{(2)})=e^{-\frac{\Arrowvert x-l^{(2)}\Arrowvert^2}{2\sigma^2}}\\ f_3=similarity(x,l^{(3)})=e^{-\frac{\Arrowvert x-l^{(3)}\Arrowvert^2}{2\sigma^2}}
为了看得清楚点,我们用 exp(x)exp(x) 来表示 ee 的 xx 次方:

f1=exp(−‖x−l(1)‖22σ2)f2=exp(−‖x−l(2)‖22σ2)f3=exp(−‖x−l(3)‖22σ2)

f_1=exp(-\frac{\Arrowvert x-l^{(1)}\Arrowvert^2}{2\sigma^2})\\ f_2=exp(-\frac{\Arrowvert x-l^{(2)}\Arrowvert^2}{2\sigma^2})\\ f_3=exp(-\frac{\Arrowvert x-l^{(3)}\Arrowvert^2}{2\sigma^2})
上面的这个 exp(−‖x−l(i)‖22σ2)exp(-\frac{\Arrowvert x-l^{(i)}\Arrowvert^2}{2\sigma^2}) 即是一个核函数,这个核函数叫做 高斯核(Gaussian Kernel)。高斯核有一个重要的参数 σ\sigma,后面会讲到它的性质和用处。


2.核与相似性(Kernels ans Similarity)

我们已经知道,对于一组地标(landmarks),我们定义输入 xx 与 地标 l(i)l^{(i)} 的相似性为:

fi=exp(−‖x−l(i)‖22σ2)=exp(−∑nj=1(xj−l(i))22σ2)

f_i=exp(-\frac{\Arrowvert x-l^{(i)}\Arrowvert^2}{2\sigma^2})=exp(-\frac{\sum_{j=1}^n(x_j-l^{(i)})^2}{2\sigma^2})
所以有:

WhenWhen exp(−‖x−l(i)‖22σ2)exp(-\frac{\Arrowvert x-l^{(i)}\Arrowvert^2}{2\sigma^2})
x≈l(i)x\approx l^{(i)} 时 有 exp(−022σ2)≈1exp(-\frac{0^2}{2\sigma^2})\approx 1
xx 和 l(i)l^{(i)} 离得很远时 有 exp(−largenumber22σ2)≈0exp(-\frac{large\,number^2}{2\sigma^2})\approx 0

下面再来看看核函数的参数 σ\sigma。


2.核函数的参数(Parameter sigma)

上面提到了,核函数的参数是 σ\sigma。我们通过几张图来一览它的性质。假设有一个地标 l1=[35]l_1=\left[ \begin{matrix} 3\\5 \end{matrix}\right],样本 x=[x1x2]x=\left[ \begin{matrix} x_1\\x_2 \end{matrix}\right]。
1)当 σ2=1\sigma^2=1 时,有:


上面有两幅图,上面的是函数 f1=exp(−‖x−l(1)‖22σ2)f_1=exp(-\frac{\Arrowvert x-l^{(1)}\Arrowvert^2}{2\sigma^2}) 的函数图像,下面为对应的等高线密度图像。

2)当 σ2=0.5\sigma^2=0.5 时,有:

3)当 σ2=3\sigma^2=3 时,有:

从上面三幅图可以很清楚地知道了,当 σ\sigma 比较小的时候,随着 xx 的变化,新特征 ff 的变化会非常剧烈,当 σ\sigma 比较大的时候,随着 xx 的变化,新特征 ff 的变化会比较平缓。


3.预测演示

说了这么多,下面我们来演示一下采用高斯核的支持向量机是如何对输入进行预测的。假设我们有如下三个地标 l(1),l(2),l(3)l^{(1)},l^{(2)},l^{(3)}


因为是预测,所以假设我们已经得到了参数 θ0=−0.5,θ1=1,θ2=1,θ3=0\theta_0=-0.5,\theta_1=1,\theta_2=1,\theta_3=0。回忆一下,当假设函数 hθ(x)=θ0+θ1f1+θ2f2+θ3f3≥0h_\theta(x)=\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3 \ge 0 时,我们的预测值为 11。现在我们的假设函数为:

hθ(x)=−0.5+f1+f2

h_\theta(x)=-0.5+f_1+f_2

举如下两种情况为例:
如上图,当输入 xx(图中紫色的点)非常接近 l(1)l^{(1)} 时,xx 离 l(2)l^{(2)} 和 l(3)l^{(3)} 都比较远,我们有 f1≈1,f2≈0,f3≈0f_1\approx1,f_2\approx0,f_3\approx0。所以预测值 hθ(x)≈−0.5+1+0+0=0.5≥0h_\theta(x)\approx-0.5+1+0+0=0.5 \ge 0,所以预测为1。
当输入 xx(图中天蓝色的点)离 l(1),l(2),l(3)l^{(1)},l^{(2)},l^{(3)} 都比较远时,我们有 f1≈f2≈f3≈0f_1\approx f_2\approx f_3\approx0。所以预测值 hθ(x)≈−0.5+0+0+0=−0.5<0h_\theta(x)\approx-0.5+0+0+0=-0.5 ,所以预测为0。
注意:输入 xx 与地标的距离对输出产生的影响由核函数的参数 σ\sigma 决定,例如当 σ\sigma 较小时,只有离地标非常近的 xx 才会被预测为1。

通过上面这个例子我们知道,对于一个支持向量机,当输入 xx 比较接近地标时,支持向量机为对该输入预测为1,否则预测为0。同时,我们可以选取较多的地标,将维数较低的特征映射到维数较高的特征上,以此达到对线性不可分的样本进行分类的功能。


4.选择地标(Choosing Landmarks)

上面我们一直将 landmarks 当作已知量,现在我们就来看看如何选择 landmarks。通常,如果训练集为 {(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))}\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(n)},y^{(n)})\},我们选择 l={l(1)=x(1),l(2)=x(2),...,l(n)=x(m)}l=\{l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},...,l^{(n)}=x^{(m)}\} 作为 landmarks,其中 mm 表示样本的数量,这里一共有 mm 个 landmarks。所以对于一个给定的样本 (x(i),y(i))(x^{(i)},y^{(i)}),我们可以把输入的特征值映射到特征 ff 上:

x(i)⟶⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪f(i)0=1f(i)1=similarity(x(i),l(1))=exp(−‖x(i)−l(1)‖22σ2)f(i)2=similarity(x(i),l(2))=exp(−‖x(i)−l(2)‖22σ2)...f(i)i=similarity(x(i),l(i))=exp(−‖x(i)−l(i)‖22σ2)=1...f(i)m=similarity(x(i),l(m))=exp(−‖x(i)−l(m)‖22σ2)

x^{(i)} \longrightarrow \begin{cases} f_0^{(i)}=1\\ f_1^{(i)}=similarity(x^{(i)},l^{(1)})=exp(-\frac{\Arrowvert x^{(i)}-l^{(1)}\Arrowvert^2}{2\sigma^2})\\ f_2^{(i)}=similarity(x^{(i)},l^{(2)})=exp(-\frac{\Arrowvert x^{(i)}-l^{(2)}\Arrowvert^2}{2\sigma^2})\\ ...\\ f_i^{(i)}=similarity(x^{(i)},l^{(i)})=exp(-\frac{\Arrowvert x^{(i)}-l^{(i)}\Arrowvert^2}{2\sigma^2})=1\\ ...\\ f_m^{(i)}=similarity(x^{(i)},l^{(m)})=exp(-\frac{\Arrowvert x^{(i)}-l^{(m)}\Arrowvert^2}{2\sigma^2}) \end{cases}所以有:

f(i)=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢f(i)0=1f(i)1f(i)2...f(i)i=1...f(i)m⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(f(i)∈Rm+1)

f^{(i)}=\left[ \begin{matrix} f_0^{(i)}=1\\f_1^{(i)}\\f_2^{(i)}\\...\\f_i^{(i)}=1\\...\\f_m^{(i)} \end{matrix}\right] \quad (f^{(i)}\in R^{m+1})
所在使用高斯核的时候,我们首先要做的就是根据输入 xx 计算新特征 f∈Rm+1f\in R^{m+1}。


5.SVM的参数

带高斯核的 SVM 有两个参数 CC 和 σ2\sigma^2。
对于 C=1λC=\frac{1}{\lambda} ,就像逻辑回归中的 λ\lambda 一样能控制过拟合与欠拟合之前的平衡。有如下性质:

Cases Effect
Large CC Lower bias, higher variance
Small CC Higher bias, lower variance

对于 σ2\sigma^2,参考上面的第二节。有如下性质:

Cases Effect
Large σ2\sigma^2 Higher bias, lower variance
Small σ2\sigma^2 Lower bias, higher variance

6.使用SVM

使用 SVM 时我们可以直接调用现成的库,比如一个很不错的 SVM 库: libsvm,其官网地址为:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

因为训练 SVM 涉及到 凸二次优化 以及一些数值计算技巧,所以非常不推荐自己写代码来训练 SVM,因为很多前辈花了数十年才把 SVM 优化到现在这个复杂度任然很高的程度,所以自己花时间写是非常不明智的。但是我们可以在开源库中去阅读 SVM 的训练代码来提高我们对 SVM 的认知程度。

虽然不用自己写代码训练,但是我们也要设定参数 CC 和 σ\sigma,同时,我们也要自己写核函数,还有很重要的一点就是需要做 Feature Scaling。


以上就是 SVM 的核函数的大概内容,希望能帮助到大家。
如有错误的地方,还请不吝留言指正。

机器学习笔记09:支持向量机(二)-核函数(Kernels)相关推荐

  1. 机器学习--SVM(支持向量机)核函数原理以及高斯核函数

    最近小小地研究了一下SVM,发现这个算法还是相当有意思,今天来给大家讲讲其原理. 首先假设每个样本的特征值为X1.X2...到Xn,即有n个特征值.θ1.θ2.θ3...θn为对应权值. 那么要将上图 ...

  2. 机器学习笔记之降维(二)样本均值与样本方差的矩阵表示

    机器学习笔记之降维--样本均值与样本方差的矩阵表示 引言 场景介绍 样本均值与样本方差 样本均值与样本方差的矩阵表示 样本均值的矩阵表达 样本方差的矩阵表达 中心矩阵的性质 引言 上一节介绍了维数灾难 ...

  3. 白板机器学习笔记 P28-P35 支持向量机

    视频地址:https://www.bilibili.com/video/BV1aE411o7qd?p=28 笔记地址:https://www.yuque.com/books/share/f4031f6 ...

  4. [吴恩达机器学习笔记]12支持向量机3SVM大间距分类的数学解释

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.3 大间距分类背后的数学原理- Mathematic ...

  5. [吴恩达机器学习笔记]12支持向量机2 SVM的正则化参数和决策间距

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.2 大间距的直观理解- Large Margin I ...

  6. 机器学习笔记(六)支持向量机

    6.支持向量机 6.1间隔与支持向量 对于给定的训练集D={(x1,y1),(x2,y2),-,(xm,ym)},yi∈{-1,+1},分类学习的初衷就是基于训练集在样本空间中找到一个可以有效划分样本 ...

  7. 机器学习笔记:支持向量机(SVM)详细推导以及sklearn.svm.SVC的简单简介

    线性可分支持向量机: 举一个简单的例子: 我们需要将下面的圆圈和叉分开 这里存在无数多条线可以将圆圈和叉分开,因此,我们要规定一个性能指标,对于每一条线,都有对应的一个性能指标. 我们将每一条可以分开 ...

  8. python如何处理spark上的数据_spark机器学习笔记:(二)用Spark Python进行数据处理和特征提取...

    下面用"|"字符来分隔各行数据.这将生成一个RDD,其中每一个记录对应一个Python列表,各列表由用户ID(user ID).年龄(age).性别(gender).职业(occu ...

  9. 吴恩达机器学习笔记:(二)代价函数

    代价函数 本例中如下图所示:代价函数实际目的是为了通过寻找 θ1, θ2两个参数实现拟合的直线最接近数据点. 本例中代价函数的定义 θ1, θ2 寻找θ1,θ2参数最优值 寻找 θ1的最优解 当θ1 ...

最新文章

  1. java 对象内存布局_Java--对象内存布局
  2. docker安装wget_Docker: docker pull, wget, curl, git clone 等如何更快?
  3. 并发学习笔记 (5)
  4. C语言socket()函数解析(创建套接字)af地址族,ip地址类型(Address Family)INET(Inetnet)PF(Protocol Family)
  5. boost::fusion::fused用法的测试程序
  6. linux自动挂起什么意思,Linux中进行挂起(待机)的命令说明
  7. EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#
  8. 设计模式 接口隔离原则
  9. oracle学习小结3之索引
  10. [postgresql]postgresql的VACUUM 介绍
  11. 打开pdf文件提示文件过大_如何把pdf文件进行分割?拆分pdf文件的方法分享
  12. Layui实现Eharts图表
  13. 2018 年 8 月面试路:6 天 21 家公司
  14. windows 定时清理指定目录文件bat
  15. chrome浏览器安装infinity插件
  16. Java语言Switch语句详解(一)
  17. 京东EB级全域大数据平台的演进与治理历程
  18. COB小间距的工艺技术,cob小间距相比常规表贴(SMD)小间距有何优势?
  19. CAD 2008英文版下载(含注册机)
  20. 金海佳学C++primer 练习9.18/9.19

热门文章

  1. JQuery $(function(){})和$(document).ready(function(){})
  2. 【微机汇编语言学习笔记(四)】十进制数的ASCII转换为BCD码
  3. 模型优化中的过拟合与欠拟合
  4. SpringSecurity系列之基于数据库认证
  5. 学习笔记二:接口与继承(内部类)
  6. 网路学员面试常见问题:
  7. 使用Python代码下载网易音乐歌曲
  8. Python中文社区开源项目计划:ImagePy
  9. 「解析」正则化 DropPath
  10. 2020大疆校招B卷第二题