从0开始学习机器学习--Day24--核函数

核函数(Kernelsl function)

非线性数据的决策边界

对于非线性问题来说,决策边界在很多时候都是曲线,需要我们在假设函数中加入高阶多项式来拟合原始数据,这对于算法来说需要很长的运行时间去计算这些高阶多项式,那么有没有更高效的方法呢?

假设我们在特征的坐标轴上标记三个点,设置新的输入变量为,后面三个点也是类似的计算公式,我们把相似度函数称为核函数,这里展开的核函数是其中一种,叫做高斯核函数,其中被称为欧式距离,也就是两个向量点之间距离的平方,一般记作

虽然看起来很奇怪,但我们从函数内部的性质来剖析,就能知道为什么这个核函数可以用来解决分类问题了。假如 ,意味着,此时结果为真,相反如果之间的距离很远,说明函数展开式中两点的距离非常大,那么,从而表示结果为假。而核函数里的分母则代表了从1下降到0的速度,分母越大,下降速度越慢,反之则越快,如下图所示:

不同的sigma对应的等高线图和凸函数图

而在放在假设函数中,假设我们已经知道了参数分别为-0.5,1,1,0,那么函数在预测时就会通过计算与三个标记点的距离,带入到假设函数与0比较大小,大于等于0即为1,否则为0,类似于下图:

核函数预测的决策边界

但我们还有另一个问题,我们该如何去定义这些标记点,尤其是对于复杂的问题来说,标记点的数量也会随之上升。

一般来说,我们会把训练集里的每个点都作为标记点,也就是说计算一个点对于所有点包括自己的,将这些特征量像我们以前做的一样组装成向量,将函数写成

当然,在使用SVM算法的过程中,有很多细节跟之前不太一样。例如, 输入特征之前都会做归一化,毕竟有些点和标记点之间的距离本来就很大,不作归一化处理容易出现畸形的决策边界;挑选核函数,像之前由于我们的训练样本较少,函数里的特征量较多,为了避免过拟合,我们都是使用了线性核函数,也就是普通的的形式输入,但并不是所有符合情景的核函数都是能使用的,需要满足的一个规定叫默塞尔定理(对于形如2q - 1的整数,只有在q本身也是一个素数的情况下,它才有可能是素数,同理,可以要求算法在用数值技巧不要脱离对于参数的定义),要求所用的SVM算法能满足优化方法,且能快速求得参数。

还有一些可能经常会用到的核函数,一个是多项式核函数,形式写作,其中C为常数,当预测样本和标记点很接近时,k值会非常大,所以其使用的前提是样本的特征值都大于0;字符串核函数,当涉及到文本处理的时候会使用。

最后,要注意输入特征和样本都非常少的情况,这种时候应该做的是先增加或创造某些特征(这些可能是根据市场或者科学原理推导出来的),再使用逻辑回归或线性核函数。

视频学习链接:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=75

相关推荐
Main. 2423 分钟前
从0到1学习Qt -- 创建第一个Hello World项目
学习
壹号用户37 分钟前
python学习之生成器&三者关系
学习
new coder43 分钟前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
星域智链1 小时前
宠物智能用品:当毛孩子遇上 AI,是便利还是过度?
人工智能·科技·学习·宠物
呱呱巨基1 小时前
vim编辑器
linux·笔记·学习·编辑器·vim
"菠萝"2 小时前
C#知识学习-017(修饰符_6)
学习·c#
早睡冠军候选人2 小时前
Ansible学习----Ansible Playbook
运维·服务器·学习·云原生·容器·ansible
楼田莉子2 小时前
C++学习:C++11扩展:constexpr特性
开发语言·c++·学习
懒羊羊不懒@2 小时前
Java基础语法—最小单位、及注释
java·c语言·开发语言·数据结构·学习·算法
qq_398586542 小时前
Threejs入门学习笔记
javascript·笔记·学习