机器学习基石--学习笔记02--Hard Dual SVM
背景
上一篇文章总结了linear hard SVM,解法很直观,直接从SVM的定义出发,经过等价变换,转成QP问题求解。这一讲,从另一个角度描述hard SVM的解法,不那么直观,但是可以避免feature转换时的数据计算,这样就可以利用一些很高纬度(甚至是无限维度)的feature转换,得到一些更精细的解。
拉格朗日乘子式
首先,回顾一下SVM问题的定义,如下:
			

线性约束很烦,不方便优化,是否有一种方法可以将线性约束放到优化问题本身,这样就可以无拘无束的优化,而不用考虑线性约束了。拉格朗日大神提供了一种方法,可以达到这个目的,称之为拉格朗日乘子式(更通用的方法参考文章"简易解说拉格朗日对偶"),形式如下,

这个公式是不是很奇怪,无端的多处了N个变量,但是再看下面的变化,就知道这个拉格朗日乘子式的厉害了。

什么,SVM问题等于右边那个min max?没错,虽然初看感觉不科学,但是仔细分析,的确如此。首先,由于,令f(w,b) = ,
当f(w,b) > 0,在w,b固定的情况下,,max会将放大到;
当f(w,b)0,那么,那么。

所以,综合两种情况,SVM问题与min max变换公式等价。是不是很奇妙,不得不佩服拉格朗日大神。
对偶变换
上面的问题中min max的形式不方便求解,不过可以通过一番变化,导出max min的形式,这样就可以从内到外,先计算里面的min,然后计算外面的max。这种变化叫对偶变化。
首先选任意一个固定的,并且,那么有

两边通过w,b取min,等式仍然成立,即

有多重选择,但是上面的不等式一致成立,所以在众多的选择一个最大,上面的等式变形为,

这样,min max就和max min建立了一定的联系,但是由于是"",称之为弱对偶(week duality)。""强对偶(strong duality)如何才能成立呢?需要满足下面的条件,

- 原始问题是凸问题
 - 原始问题线性可分
 - 线性约束条件
 
太桥了,SVM问题完全符合上述约束,所以是对偶,这样可以通过解右边max min的问题来得到最终解!
问题化简
经过上面的对偶变化,下面来一步一步的简化我们的原始问题,

首先对b求偏导数,并且为0,有如下结果

带入这个结果到上面的公司,化简

接下啦,对w求偏导数,

所以,向量w为

将w带入,并且去掉min,得到如下

执行到这里,现在目标函数只与有关,形式满足QP,可以轻易得到,也就是得到w。但是在计算过程中,需要计算一个中间矩阵Q,维度为N*N,这个是主要计算开销。上一讲无需计算这个Q,因为Q的形式十分简单。
问题来了,如何求解b,上面的目标函数中,在之前的简化过程中消去了b,已经与b无关。
计算b
现在只剩下最后一个问题,如何计算b? 在之前的简化过程中消去了b,上面的QP解与无关。
KKT条件帮助我们解决这个问题。如果原始问题和对偶问题都有最优解,且解相同,那么会满足KKT条件。这也是一个充分必要条件,其中很重要的一点是complementary slackness(互补松弛性),该条件有下面等式成立,

由于(对偶条件),且(原始条件),那么两者有一个不为0时,另外一个必然为0。所以,只要找到一个,就可以利用这个性质计算出b,计算方法如下:

两边乘以,

理论来说,只需要一个点就可以,但是实际上由于计算有误差,可能会计算所有的b,然后求平均。并且这些可以计算出b的点,就是支持向量,因为他们满足了原始问题中支撑向量的定义。但是,并不是所有的支撑向量,都有对应的。一般的,我们只用的向量称为支撑向量,而那些满足支撑向量定义的向量称之为候选支撑向量,有如下关系

并且,为了简化计算,在计算w的时候,的计算均可以省去,如下

w的哲学
通过上面的计算,其实最后w是()的线性组合。同样的,PLA中w也是()的线性组合。只是SVM利用支撑向量求解这个线性组合,PLA使用错误的向量。同理,逻辑回归,线性回归也有类似规律,称这种现象为"w represented by data"。

总结
本节使用对偶问题,从另外一个侧面求解了SVM,并且数据学推导相对复杂,计算量也增加了许多,因为需要求解一个N*N维度的矩阵Q。但是,为什么要做这些事情呢,hard linear SVM要简单许多复?其实换成对偶问题是为了利用kernel做铺垫,改kernel可以将维度转化的计算省略,从而可以计算很复杂的转化,这一点下一节讨论。
PS:划线部分段落是由于包含公式,无法正常显示,所以采用图片方式在下方显示。
机器学习基石--学习笔记02--Hard Dual SVM的更多相关文章
- 机器学习基石--学习笔记01--linear hard SVM
		
背景 支持向量机(SVM)背后的数学知识比较复杂,之前尝试过在网上搜索一些资料自学,但是效果不佳.所以,在我的数据挖掘工具箱中,一直不会使用SVM这个利器.最近,台大林轩田老师在Coursera上的机 ...
 - 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
		
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
 - 软件测试之loadrunner学习笔记-02集合点
		
loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...
 - opencv学习笔记(七)SVM+HOG
		
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
 - OpenCV 学习笔记 02 使用opencv处理图像
		
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
 - TensorFlow机器学习框架-学习笔记-001
		
# TensorFlow机器学习框架-学习笔记-001 ### 测试TensorFlow环境是否安装完成-----------------------------```import tensorflo ...
 - SaToken学习笔记-02
		
SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...
 - Redis:学习笔记-02
		
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
 - 机器学习技法--学习笔记04--Soft SVM
		
背景 之前所讨论的SVM都是非常严格的hard版本,必须要求每个点都被正确的区分开.但是,实际情况时很少出现这种情况的,因为噪声数据时无法避免的.所以,需要在hard SVM上添加容错机制,使得可以容 ...
 
随机推荐
- checkbox和radio使用
			
jQuery获取Radio选择的Value值: jQuery C# VB C++ Java jQuery设置Radio的Value值: 语法解释: 1. $("input[n ...
 - git -- 如何撤销本地工作目录的修改
			
git checkout -- 文件名(包含路径) 撤销本地全部修改 git checkout .
 - 关闭 selinux 和防火墙
			
1.关闭 selinux 修改 它的配置文档 /etc/selinux/conf 修改 SELINUX=disabled 或者permissive 2. 关闭 防火墙 输入命令 systemctl d ...
 - delphi常用快捷键(我自己经常使用的)
			
代码编辑器: Home 回到当前行的头部 End 回到当前行的尾部 Insert 插入代码,覆盖后面的代码,(按回车无效), 再按撤回效果 Delete 删除 F1 双击一个单词后,按F1调用自带的L ...
 - LDO-XC6216C202MR-G
			
XC6216C202MR-G 1.改产品是特瑞士(TOREX)公司电源管理芯片,输入电压可达28V,输出可调23V,最大输出电流150mA.压差最小为300mV.该系列有固定式输出和可调式 ...
 - iOS手势(滑动)返回的实现(自定义返回按钮)
			
如果各位使用的是storyboard布局的话,且用的是系统的返回按钮,那么是自动会有滑动返回效果的,但是相信各位做项目的,一般都是用的自定义的返回按钮,所以我贴几行代码,看看怎么实现系统自带的滑动返回 ...
 - slick-pg v0.1.5 发布
			
这个版本的更新主要是: 增加了对 json 的支持 (PostgreSQL 9.3 正式版已经发布了,所以我适时加入了对 pg json 的支持.功能其实前两个星期就已经开发测试好了,但公司跟联邦政府 ...
 - mssql的日期函数,如何取得当前年月日,当前时间,当前月份,当前天数,一年中第几天?
			
mssql函数DATENAME 语法 DATENAME ( datepart , date ) 参数 datepart 是返回的 date 的一部分.下表列出了所有有效的 datepart 参数.用户 ...
 - Dynamic CRM 2013学习笔记(三十九)流程2 - 业务流程(Business Process Flows)用法详解
			
业务流程(Business Process Flows)是CRM 2013 里一个新的流程,它提供了可视化的流程表现.业务人员创建有效.流线型的业务流程让最终用户知道当前在哪.下一步要做什么,用户可以 ...
 - django CSRF token missing or incorrect
			
django 异步请求时提示403 按照一般情况权限问题,python文件没有问题,仔细看了下response里有一句 CSRF token missing or incorrect.这个肯定是因为安 ...