从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

相关推荐
量子-Alex几秒前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
吉大一菜鸡5 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
爱吃西瓜的小菜鸡3 小时前
【C语言】判断回文
c语言·学习·算法
小A1593 小时前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
岁岁岁平安3 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA4 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
qq_589568104 小时前
数据可视化echarts学习笔记
学习·信息可视化·echarts
兔C4 小时前
微信小程序的轮播图学习报告
学习·微信小程序·小程序
海海不掉头发5 小时前
苍穹外卖-day05redis 缓存的学习
学习·缓存
小木_.6 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器