当前位置: 首页 > article >正文

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

核函数(Kernelsl function)

非线性数据的决策边界

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

假设我们在特征x_{1},x_{2}的坐标轴上标记三个点l^{(1)},l^{(2)},l^{(3)},设置新的输入变量为f_{1}=similarity(x,l^{(1)}) = e^{(-\frac{||x-l^{(1)}||^{2}}{2 \sigma^{2}})},后面三个点也是类似的计算公式,我们把相似度函数similarity称为核函数,这里展开的核函数是其中一种,叫做高斯核函数,其中||x-l^{(1)}||被称为欧式距离,也就是两个向量点之间距离的平方,一般记作k(x,l^{(i)})

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

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

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

核函数预测的决策边界

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

一般来说,我们会把训练集里的每个点都作为标记点,也就是说计算一个点x^{(i)}对于所有点包括自己的f_{m}^{(i)},将这些特征量像我们以前做的一样组装成向量,将函数写成\theta^{T}f \gg0 if(y=1)

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

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

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

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


http://www.kler.cn/a/392258.html

相关文章:

  • qt QProcess详解
  • Springboot 日志处理(非常详细)
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 《情商》提升:增强自我意识,学会与情绪共处
  • 深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅
  • LeetCode 328.奇偶链表
  • 【Lucene】原理学习路线
  • Redis架构模式有几种?适用哪些场景?
  • Three.js性能优化和实践建议
  • Leetcode 3350 Adjacent Increasing Subarrays Detection II
  • ResNet网络详解
  • 【Spring】@Autowired与@Resource的区别
  • 常用环境部署(二十三)——Docker部署ERPNext
  • C++学习笔记----11、模块、头文件及各种主题(一)---- 模板概览与类模板(8)
  • 深度学习-神经网络基础-激活函数与参数初始化(weight, bias)
  • [Linux]:IO多路转接之epoll
  • 鸿蒙next版开发:订阅应用事件(ArkTS)
  • EasyExcel 使用多线程按顺序导出数据
  • linux GPIO
  • 【Linux】进程状态与进程优先级
  • torch jit 动态获取buffer
  • upload-labs通关练习
  • 闲鱼监控助手货源获取技巧(轻松找到优质货源的方法)
  • 【大数据测试spark+kafka-详细教程(附带实例)】
  • Unity3D设置3D物体不超出相机视角范围(物体一直保持在相机视角范围内)