Support Vector Machine (1) : 简单SVM原理
目录
Support Vector Machine (1) : 简单SVM原理
Support Vector Machine (2) : Sequential Minimal Optimization
Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
Support Vector Machine Python 代码实现
Support Vector Machine(1) : 简单SVM原理
1. background
对一个二值的分类问题,perceptron algorithm 也能找到一个能完全分离样本的超平面。但是这个超平面与参数初始化的值和优化过程有关,并不能找到一个最好的解。
SVM使用margin的概念来实现找到一个最好的解,即达到一个最小generalization error(泛化误差)。泛化误差简单来说就是衡量从有限训练集训练得到的模型对实际问题的拟合程度。
2. 原理
首先我们要定义我们需要解决的问题:对于一个可分离的二元类数据集,我们要找出一个超平面,使得generalizaion error 最小。
然后,我们需要小小的跳一步,这个最小问题通过统计学习理论,可以转化为使得margin最大的时候就是最优解这样一个等价条件,Margin就是下面这个东西:
这其中是如何转化的这个问题就已经超出我们范围之外,这里我们就把它当做一个已知的东西来使用。
然后我们定义一个prediction function:
y(x) = WTx + b
其中 W 和 b 是这个model的参数。如果我们已经得到一个model的参数,那么对于一个待预测的样本x, 先计算其y(x)的值,如果y(x)大于零,则将其判为1;反之则判为-1 。那么可以看到,model的decision boundary 其实就是 WTx + b = 0 确定的平面。那么由我们上面对数据集的假设,应该是存在这么一个平面能将两类点完全分离。就如下图所示。
那么问题来了,我们可以从下图看出,这样的平面不止一个:
(图片来自网络,侵删)
那么哪个平面是最好的呢?那么这里就可以用到最开始由统计学习理论得到的一个等价条件,即使得margin最大的为最优解。现在的问题就是如何将margin表示出来,很明显我们可以用点到直线之间的距离公式来表示。任意一个点到分离平面的距离为|y(x)| / $||\mathbf{w}||$ ,其中$||\mathbf{w}||$暂时我们就当做其欧式平面内的长度。这里我们使用一点小技巧,假设x的标签为t $\epsilon$ {1,-1}。那么如果点在平面上方,则y(x)>0,t=1. |y(x)| = t·y(x);如果点在平面下方(这里的上方下方并不严格),则y(x) < 0,t=-1, |y(x)| = t·y(x) 。那距离公式就可以写为:
t·y(x) / $||\mathbf{w}||$
那么margin就是所有点到平面距离中最小的那个,即 min { tn·y(xn) / $||\mathbf{w}||$ }, 那么我们的问题就变为:
其中 Φ(x) 就是 x 。回到距离公式,如果我们把 W 和 b 变为 kW 和 kb,那么公式的结果不会变(可以自己验证)。那么如果到平面最近的点的 |y(x)| 为 k, 那么我们可以利用这个性质使得其值为1 。那么这样就得到在其他博客中经常看到的条件中的 1 的由来:
$t_ny(\mathbf{x}) \geqslant 1$
那么如果我们想要解决上面提到的maximize 问题,其实就是使得1 / ||W|| 最小(因为由上面归一化之后,min { tn·y(xn) / ||W|| } 就是 1),那么为了方便,我们优化目标变为使得||W|| 最小。那么定义Lost function:
$L = 1/2 ||\mathbf{w}||$ $t_ny(\mathbf{x}) \geqslant 1$
那么之后就是使用KKT条件将上述问题转化为其的dual representation。KTT条件描述如下:
假设在某些限制下最小化一个函数f(x),这些限制有等式$h_i(x) = 0$ ( i = 1,2,...,n),也有不等式$g_i(x) <= 0$ ( i = 1,2,...,m)。那么这个最优化问题可以转化为一个对偶问题:
$\nabla L^{*} = 0$ where $L^{*} = f(x) + \sum_i\mu_ig_i(x) + \sum_j\lambda_jh_j(x)$
其中$\mu$满足:
$\mu_i \geqslant 0$
$\mu_ig_i(x) = 0$
对于SVM中涉及到的最优化问题:
$L^{*}(\mathbf{w},b,\mathbf{a}) = 1/2 ||\mathbf{w}||^2 - \sum_{n}a_n\{t_n(\mathbf{w}^Tx+b)-1\}$
那么由 $\nabla L^{*} = 0$ 可得 $\mathbf{w} = \sum_na_nt_nx_n$ 和 $\sum_na_nt_n = 0$(分别$\mathbf{w}$和b求导)。把这两个等式代入$L^{*}(\mathbf{w},b,\mathbf{a})$ 得到:
$L^{*}(\mathbf{a}) = \sum_na_n - 1/2 \sum_n\sum_ma_na_mt_nt_mK(x_n,x_m)$ (1)
其中用$K(x_n,x_m)$表示两个向量相乘,这个表示也方便后面核函数方法的扩展;$\mathbf{a} 和 \mathbf{t}$ 满足:
$a_n \geqslant 0$ for n = 1,2,...,N (2)
$\sum_na_nt_n = 0$ (3)
那么式(1),(2),(3) 就是对偶问题的完整描述了。
有一点我想指出,就是在使用KKT条件时,有一个限制是 an( tn·y(xn) -1 ) = 0 。但是在dual representation的限制中并没有这个限制。这是因为这个限制太严格了,对解dual representation 并没有帮助。我们也可以看一下这个限制,如果数据n是所有点到平面中距离最小的一个,那么an 就可以不为零;如果不是,那么an就一定要为零。那么由KKT条件,n = 0 的点对其都没有贡献。那么只有到平面距离最小的点才对其有贡献,这也是support vector machine的由来,即只有这些点是support vectors。所以SVM的解仅依赖于一小部分数据,这也是其sparse solution的由来。
这里我们假设数据集完全可分离,那么如果数据集不完全可分离时,引入一个slack variables ,即soft SVM,也可以完成。此时只需要把对偶问题中$a_n \geqslant 0$ 改为 $ C \geqslant a_n \geqslant 0$ 即可。
同时SVM也可以实现regression的问题。如果能掌握最简单的SVM,这些扩展问题看起来也不会有多大问题。
Support Vector Machine (1) : 简单SVM原理的更多相关文章
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Support Vector Machine (2) : Sequential Minimal Optimization
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- 支持向量机(Support Vector Machine,SVM)—— 线性SVM
支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...
- A glimpse of Support Vector Machine
支持向量机(support vector machine, 以下简称svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本篇希望在正篇提供一个svm的简明阐述,附录则提 ...
- 机器学习算法 --- SVM (Support Vector Machine)
一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...
- 支持向量机SVM(Support Vector Machine)
支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...
- Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界
在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...
- 支持向量机 support vector machine
SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...
- 机器学习之支持向量机(Support Vector Machine)
转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...
随机推荐
- 关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型
#!/usr/bin/python指定用什么解释器运行脚本以及解释器所在的位置 # -*- coding: utf-8 -*-用来指定文件编码为utf-8的PEP 0263 -- Defining P ...
- ios学习之路
整合网络资源和自己的实际经验,表述于此. 1 Xcode详解 非常实用的xcode介绍,详情请见外部链接http://demo.netfoucs.com/shulianghan/article/det ...
- JS eval() 特殊用法
最近项目有 有个模块 有若干功能菜单,这些菜单查询部分都是一样的,所以就像提取一个通用的查询页面然后使用$('#ele').load('../**.aspx #searchID', {}, funct ...
- mysql存储过程详解(入门)
delimiter // #修改结束符号为// create procedure pro_wyx() /*创建存储过程*/ begin declare i int ; #定义变量 set i=1 ...
- 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误
使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 使用pip安装python插件的时候出现Microsoft Visual C++ 9.0缺失错误 : ...
- 电脑结构和CPU、内存、硬盘三者之间的关系
前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- JSBinding / About 2048 sample
2048 Source 2048 source code is here: https://github.com/gabrielecirulli/2048 Play here!http://gabri ...
- 微信接口access_token
//调用聚合网笑话接口 $url = 'http://japi.juhe.cn/joke/img/text.from?page=&pagesize=2&key=f0d06a1fe45b ...
- Android性能之启动时间篇
背景介绍 Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电了--应用耗电大: 2)首次/非首次启动应用,进入应用特别慢--应用启动慢: 3)应用使用过程中,越来越卡--CP ...
- Java入门教程总目录
Java入门教程总目录 持续更新中... 1.Java常识汇总 2.Java框架对比 3.Java技术路线 4.Java编码规范 5.Java环境变量配置 6.枚举 7.操作符 12.定时任务