[机器学习&数据挖掘]SVM---核函数
1、核函数概述:
核函数通俗的来说是通过一个函数将向量的低维空间映射到一个高维空间,从而将低维空间的非线性问题转换为高维空间的线性问题来求解,从而再利用之前说的一系列线性支持向量机,常用的核函数如下:
多项式核函数:

高斯核函数:

比如硬间隔种的目标函数为:

而核函数替换后的目标函数为:

从这个两个目标函数找共同点,其实会发现核函数是作用在特征向量上,开始的目标函数一次计算是利用了两个特征向量,而接下来的核函数是对两个特征向量做函数运算,假如将核函数利用在一次运算利用三个特征向量的计算,这时核函数就会对这三个特征向量做核函数,其实就是一个替换的问题,将两个特征向量点积运算换成一个核函数的值,仅此而已。
2、SMO算法概述:
因此接下来的处理还是求解拉格朗日乘子、w、b,因此引入SMO(序列最小最优化算法)
首先SMO算法要解决的对偶问题如下:

SMO算法是一种启发式算法,基本思路:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化的问题的解就得到了,SMO算法其实就是在求解拉格朗日算子。SMO算法子问题:先选择两个变量,然后固定其他变量,针对此两个变量构建二次规划问题,子问题由两个变量,一个是违反KKT条件最严重的变量,另一个由约束条件自动确定,然后对此子问题求解,当此两个变量都满足KKT条件,则子问题求解完成。SMO算法就是将问题不断的分解为此子问题,直到所有的变量的解都满足此问题的KKT条件,从而结束算法
通过以上的对偶问题可以将子问题写成(此处假定选择两个变量alpha1、alpha2):


注意:此子问题的目标函数是从上面的对偶问题得来,在推导的过程中会发现有一些项没有,是因为这个时候只有alpha1和alpha2是变量,其他的都看作固定的值,就类似求min(f(x))和min(f(x)+C)的解x是一样的(C为常数)
3、alpha计算公式:
接下来几个公式用于每次计算:

注:Ei是g(x)对xi的预测值对yi的值之差


此计算的是alpha2未经过处理的值,因为各个alpha都由一个范围的,具体如下分段函数:

通过alpha2可以求得alpha1的新值如下:

4、变量选择:
(1)首先面临的是第一个变量的选择,在SMO算法的概述中我也介绍过,就是最不满足此问题的KKT条件,KKT条件为何看如下(KKT是相对于每个样本点来说的即(xi,yi)):

g(xi)如上述的式子
第一个变量的选择是SMO的外层循环,在检验过程中,首先遍历所有满足0<alpha<C条件的样本点,即在间隔边界上的支持向量点,检验其是否满足KKT条件,如果都满足,则遍历整个训练集是否满足KKT条件,选择最不满足的点为第一个变量。
(2)其次是第二个变量的选择:第二个变量的选择是SMO的内层循环,首先假定已经选定了第一个变量,第二个变量的选择是希望能使alpha2有足够大的变化,一种简单的做法是其对应的|E1-E2|最大。在特殊的情况下,通过以上方法不能使目标函数有足够的下降,则采用向下启发规则继续选择alpha2,遍历所有的间隔边界上的支持向量点,依次将其作为alpha2试用,直到目标函数有足够的下降,若找不到则便利整个训练集;若仍找不到,则放弃alpha1,通过外层循环继续选择另外的alpha1.
(3)计算b和差值Ei
因为在每次完成两个变量的优化之后,都需要重新计算b和Ei,主要是Ei的计算需要用的b,公式如下:




[机器学习&数据挖掘]SVM---核函数的更多相关文章
- 【机器学习】SVM核函数
知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2. Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...
- 机器学习:SVM(核函数、高斯核函数RBF)
一.核函数(Kernel Function) 1)格式 K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x'.y',K(x, y) 就是返回新的样本经过计算得到的值: 在 SVM 类 ...
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- 常用的机器学习&数据挖掘知识点【转】
转自: [基础]常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Le ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- 常见的机器学习&数据挖掘知识点
原文:http://blog.csdn.net/heyongluoyao8/article/details/47840255 常见的机器学习&数据挖掘知识点 转载请说明出处 Basis(基础) ...
- 机器学习四 SVM
目录 引言 SVM 线性可分SVM 线性不可分SVM Hinge Loss 非线性SVM 核函数 总结 参考文献 引言 在深度神经网终(Deep Neural Network, DNN) 大热之前, ...
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...
- [resource-]Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
reference: http://www.52nlp.cn/python-%e7%bd%91%e9%a1%b5%e7%88%ac%e8%99%ab-%e6%96%87%e6%9c%ac%e5%a4% ...
随机推荐
- 使用kubeadm安装kubernetes高可用集群
kubeadm安装kubernetes高可用集群搭建 第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...
- 【MOOC EXP】Linux内核分析实验四报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...
- docker简易实践
docker简易实践 实验环境 操作系统:deepin 15.4 安装步骤 1.安装docker sudo apt-get install docker.io 2.启动docker服务 sudo se ...
- Visual Studio 2013安装及简单的单元测试
Visual Studio 2013安装部分首先到观望下载了英文版和简体中文的语言包.但是更新语言包时总是失败,安装vs需要等待的时间也很大.后来重新装了一遍系统(这个卸载也很麻烦),从其他网站下了中 ...
- github优缺点
以前bitbucket沒有支援git github可以直接在網站上瀏覽push的圖片 github 可以針對code行數直接留言與回覆 github Markdown支援很好 github 的issu ...
- Window环境下RabbitMQ的安装和配置教程
一.安装 首先,RabbitMQ基于Erlang语言环境,所以需要先安装Erlang. Erlang下载地址:http://www.erlang.org/downloads 按照安装程序默认安装完成就 ...
- TestNG简单介绍以及安装—学习笔记1
TestNG是什么 到这里,大家肯定已经运行了一些关于Selenium的测试用例了(这里主要是站着一个自动化测试工程师的角度来看待TestNG的,所以这里所说的也都是基于Web测试的验证点来说的,而不 ...
- kubectl 命令记录 转帖自: https://www.kubernetes.org.cn/doc-45
kubectl annotate – 更新资源的注解. kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本. kubectl apply – 通过文件名或控制 ...
- [转帖] mysql 用户 权限 密码等操作记录
前言 From :https://blog.csdn.net/yu12377/article/details/78214336 mysql5.7版本中用户管理与以前版本略有不同,在此记录,以备忘 登陆 ...
- python day4 ---------------文件的基本操作
1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' str3 = ' '.joi ...