机器学习笔记之核函数
- 基本概念
- 举例理解核函数
- 常用的核函数
- 线性核函数
- 多项式核函数
- 高斯核函数(RBF)
- sigmoid核函数
- 核函数的选取原则
基本概念
核函数定义:
核函数:是映射关系的内积,映射函数本身仅仅是一种映射关系,并没有增加维度的特性,不过可以利用核函数的特性,构造可以增加维度的核函数,这通常是我们希望的。
例如这样一个图,数据集不是线性可分的:
该数据集在二维空间中,每个数据点都可用一个二维向量(x1,x2)’来表示(单引号’表示转置)。我们可以用一个椭圆形状的超平面在该2维空间中对数据集进行分类,我们写出椭圆的一般方程:
如果我们令:
你会发现,2维向量x被映射成另一个5维向量z后,分类超平面是一个线性超平面,数据点变得线性可分!也即是下面的变换:
也就是说,数据集在二维空间中线性不可分,若想实现线性可分,须把该数据集映射到一个5维空间中。
下图为效果图
结论:
在SVM的应用中,如果数据点在原空间中不是线性可分的,理想的做法是找到一个映射函数把数据映射到高维空间中,然后再进行分类。但是,映射后的目标空间往往是很高维甚至是无限维的,我们需要找到一个函数来代替求高维空间中向量内积的运算,我们命名它为核函数。一般的做法都是选择常用的核函数来使用,当然,你也可以自己构造核函数,前提是要满足Mercer条件。
举例理解核函数
用一个具体文本分类的例子来看看这种向高维空间映射从而分类的方法如何运作,想象一下,我们文本分类问题的原始空间是1000维的(即每个要被分类的文档被表示为一个1000维的向量),在这个维度上问题是线性不可分的。现在我们有一个2000维空间里的线性函数:
注意向量的右上角有个 ’ 哦。它能够将原问题变得可分。式中的 w’和x’都是2000维的向量,只不过w’是定值,而x’是变量(好吧,严格说来这个函数是2001维的,哈哈),现在我们的输入呢,是一个1000维的向量x,分类的过程是先把x变换为2000维的向量x’,然后求这个变换后的向量x’与向量w’的内积,再把这个内积的值和b相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。
你发现了什么?我们其实只关心那个高维空间里内积的值,那个值算出来了,分类结果就算出来了。而从理论上说, x’是经由x变换来的,因此广义上可以把它叫做x的函数(有一个x,就确定了一个x’,对吧,确定不出第二个),而w’是常量,它是一个低维空间里的常量w经过变换得到的,所以给了一个w 和x的值,就有一个确定的f(x’)值与其对应。这让我们幻想,是否能有这样一种函数K(w,x),他接受低维空间的输入值,却能算出高维空间的内积值<w’,x’>
?
如果有这样的函数,那么当给了一个低维空间的输入x以后,
这两个函数的计算结果就完全一样,我们也就用不着费力找那个映射关系,直接拿低维的输入往g(x)里面代就可以了(再次提醒,这回的g(x)就不是线性函数啦,因为你不能保证K(w,x)这个表达式里的x次数不高于1哦)。
万幸的是,这样的K(w,x)确实存在(发现凡是我们人类能解决的问题,大都是巧得不能再巧,特殊得不能再特殊的问题,总是恰好有些能投机取巧的地方才能解决,由此感到人类的渺小),它被称作核函数(核,kernel),而且还不止一个,事实上,只要是满足了Mercer条件的函数,都可以作为核函数。
常用的核函数
核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。
什么样的函数才可以叫核函数?
线性核函数
线性核,主要用于线性可分的情况,但线性内核的适用场景很多,很多线性可分,甚至线性不可分的数据集,使用线性的效果往往比非线性的要好。尤其是在数据集很大,且特征很多,或是特征远大于数据集时,线性内核便往往能够取得很不错的效果。且其相对于其他非线性内核,训练时要快的多。
多项式核函数
多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。通常d=2的多项式内核在用来特征选择的时候非常有用。
高斯核函数(RBF)
高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。
sigmoid核函数
α可以视为一个scaling 参数,常数C则是shifting参数。sigmoid内核起源于神经网络,activation函数使用的也是sigmoid function,而每个节点的数据向量也是线性权重组合。使用sigmoid内核的SVM模型等价于一个两层感知机。
核函数的选取原则
在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:
- 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
- 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
- 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
参考:
https://www.cnblogs.com/xingshansi/p/6767980.html
https://www.jianshu.com/p/70426f1a468e
https://blog.csdn.net/qll125596718/article/details/6908480
https://blog.csdn.net/wuyanxue/article/details/79642758
机器学习笔记之核函数相关推荐
- python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
算法 数据结构 机器学习笔记--模型调参利器 GridSearchCV(网格搜索)参数的说明 GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个 ...
- 机器学习笔记(二十八):高斯核函数
凌云时刻 · 技术 导读:核函数是机器学习算法中一个重要的概念.简单来讲,核函数就是样本数据点的转换函数.这一节我们来看看应用非常广泛的一个核函数,高斯核函数. 作者 | 计缘 来源 | 凌云时刻(微 ...
- 机器学习笔记(六) ---- 支持向量机(SVM)
支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高.性能好,在二分类问题上有广泛的应用. 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都 ...
- 机器学习笔记——支持向量机SMO算法完整版代码分析
机器学习笔记--支持向量机SMO算法完整版代码分析 代码大体分析 外循环 参数类 内循环 KKT条件判断 eCache参数 完整SMO代码 添加核函数代码 代码参考书籍:<机器学习实战> ...
- python中lcat是什么意思_lcatro/Machine-Learning-Note: 机器学习笔记
Machine Learning Note 机器学习笔记,后续整理一些Python 库使用方法与代码 学习资源 kNN k-邻近算法 优点:精度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高, ...
- 吴恩达机器学习笔记整理(Week6-Week11)
1. Week 6 1.1 应用机器学习的建议(Advice for Applying Machine Learning) 1.1.1 决定下一步做什么 到目前为止,我们已经介绍了许多不同的学习算法, ...
- Python机器学习笔记 使用scikit-learn工具进行PCA降维...
Python机器学习笔记 使用scikit-learn工具进行PCA降维 之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-lear ...
- Python机器学习笔记 使用scikit-learn工具进行PCA降维
Python机器学习笔记 使用scikit-learn工具进行PCA降维 之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-lear ...
- Python_ML_斯坦福机器学习笔记
斯坦福机器学习笔记 Introduction 线性回归 回归问题 线性回归与梯度下降 程序示例--梯度下降 正规方程 特征缩放 多项式回归 程序示例--多项式回归 欠拟合与过拟合 程序示例--局部加权 ...
最新文章
- 不明白点积的几何意义
- FastText情感分析和词向量训练实战——Keras算法练习
- notepad++安装
- LOL手游最能混分的英雄,前期刷野靠队友,迪丽阿巴亲自教学
- Python进阶(上下文管理器与with语句)
- Android Studio开启虚拟机报错!emulator: ERROR: x86 emulation currently requires hardware acceleration!解决办法梳理
- JavaScript中setInterval的参数传递个人归纳
- 2021-07-01小程序01
- FRR的ATOMIC 利用GCC的实现
- SSM物流管理系统(SSM毕业设计)
- Django官方中文文档
- PHP 面试知识点整理归纳
- NYOJ - 小柯的编译器
- Unity UI界面的设计(完整版)
- MVCC如何实现数据库读已提交和可重复读这两种隔离级别?
- matlab读取txt文件大全
- 计算机大赛数媒设计动漫游戏组,组一览表(计算机设计大赛).PDF
- citymaker 8 sketchup和3dsmax直接导出fdb
- 怎么将图片内容转换成文字?这两种方法可以轻松实现
- 数字逻辑综合工具实践-DC-07 ——综合优化(二)和RTL coding 和DFT
热门文章
- 万钢教授担任同济大学校长
- (PC+WAP)织梦模板渔具批发牧渔类网站
- 使用 Rancher 进行首次金丝雀部署
- 这里是离科学最近的地方——白春礼在国科大首届开学典礼上的致辞
- 网络信息安全_网络攻防实验_snort+BASE入侵检测系统_snort规则_ICMP/TCP攻击
- 如何给Python安装.whl文件
- [益智]:谁打碎了花瓶
- Java中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- mulesoft MCIA 破釜沉舟备考 2023.02.15.07
- 读完《三国》,我们学到了什么?