[置顶] SVM——线性支持向量机
2016-06-03 21:41
357 查看
线性支持向量机 希望我写的对大家会有所帮助。 微信公众号:计算机金融阅读。
昨天写了点支持向量机的东西,然后自己看了一遍,写的什么鬼,完全是一坨shit,估计过段时间我自己都看不懂了,所以今天准备详细写一遍。
我想大家都知道,SVM会得到一条分类的线,且这条分类线是最好的那条,问题来了,为什么呢?下面我们一步一步来推。
1.想得到那条最好的线需要什么呢,首先肯定要保证这条线能将所有样本分类正确吧,然后求出每个样本点到分类线的距离,找出距离最近的点,然后再最大化这个距离。如图所示:支持向量机其实就是这样一个步骤
2.光看着这两个式子有点复杂,更不知道如何解决,求出最大的margin。所以接下来就是化简这个式子。首先看distance那一项,即表示所有样本点到线或平面或更高维度分类界面的距离,我想在点到平面的距离大家都会求:不会的可以百度:
推到之后会得出距离的公式,接着消去distance中的绝对值,因为我们考虑的分类界面可以将样本分开,所以1中公式可化简为:
3.继续化简,整个式子现在还是很复杂,因为分类界面的表达方式有很多种,举个简单的例子:x+y=0和3x+3y=0等价。所以我们可以将margin后半部分进行缩放值margin刚好等于1:
那么此时的margin=1/||w||。那么此时的问题变成这样:
此时第一排条件变简单了,第三排还是需要保证最小XX项(图中有)要等于1,同时可以保证第二排的条件。
那么此时问题变成这样:
4.由于minimize那一项比较复杂,可以继续简化,现在是min后面那一项需要等于1,可以讲条件扩大为:
此时有人可能会说,在求加最优化问题是,将条件扩大了,会对解造成影响,比如:所有都大于1,没有等于1的。所以紧接着做一个操作让解能落在原来的范围,如果最佳解落在了范围外,那么我们就进行这样一个操作:
对,就是给b跟w进行一个放缩,除以最小的那个大于1的数。
那么此时问题就变成这样了:
相比之前变得相当简单了,在继续简化第一行,max 1/||w||,可以简化为min ||w||。而||w||即自己的内积,最终形式为:
5.此时线性SVM问题变成这样有条件的最优化问题了,很明显这个问题叫做二次优化,在很多软件中都有相应的函数求解二次优化问题,下面就是二次规划的标准形式:
那么根据前面的条件,找出二次规划中需要的参数Q,p,A,c即可求解SVM问题了。
昨天写了点支持向量机的东西,然后自己看了一遍,写的什么鬼,完全是一坨shit,估计过段时间我自己都看不懂了,所以今天准备详细写一遍。
我想大家都知道,SVM会得到一条分类的线,且这条分类线是最好的那条,问题来了,为什么呢?下面我们一步一步来推。
1.想得到那条最好的线需要什么呢,首先肯定要保证这条线能将所有样本分类正确吧,然后求出每个样本点到分类线的距离,找出距离最近的点,然后再最大化这个距离。如图所示:支持向量机其实就是这样一个步骤
2.光看着这两个式子有点复杂,更不知道如何解决,求出最大的margin。所以接下来就是化简这个式子。首先看distance那一项,即表示所有样本点到线或平面或更高维度分类界面的距离,我想在点到平面的距离大家都会求:不会的可以百度:
推到之后会得出距离的公式,接着消去distance中的绝对值,因为我们考虑的分类界面可以将样本分开,所以1中公式可化简为:
3.继续化简,整个式子现在还是很复杂,因为分类界面的表达方式有很多种,举个简单的例子:x+y=0和3x+3y=0等价。所以我们可以将margin后半部分进行缩放值margin刚好等于1:
那么此时的margin=1/||w||。那么此时的问题变成这样:
此时第一排条件变简单了,第三排还是需要保证最小XX项(图中有)要等于1,同时可以保证第二排的条件。
那么此时问题变成这样:
4.由于minimize那一项比较复杂,可以继续简化,现在是min后面那一项需要等于1,可以讲条件扩大为:
此时有人可能会说,在求加最优化问题是,将条件扩大了,会对解造成影响,比如:所有都大于1,没有等于1的。所以紧接着做一个操作让解能落在原来的范围,如果最佳解落在了范围外,那么我们就进行这样一个操作:
对,就是给b跟w进行一个放缩,除以最小的那个大于1的数。
那么此时问题就变成这样了:
相比之前变得相当简单了,在继续简化第一行,max 1/||w||,可以简化为min ||w||。而||w||即自己的内积,最终形式为:
5.此时线性SVM问题变成这样有条件的最优化问题了,很明显这个问题叫做二次优化,在很多软件中都有相应的函数求解二次优化问题,下面就是二次规划的标准形式:
那么根据前面的条件,找出二次规划中需要的参数Q,p,A,c即可求解SVM问题了。
相关文章推荐
- 《Java编程思想》学习笔记(第一章):Java世界里的“对象”(上)
- sed简单使用(二)编号
- python zip()
- GUI图形用户接口的基本使用
- STM32学习笔记之 关于电池检测滤波算法
- 第二阶段工作总结08
- C++实验7-最大公约和最小公倍数
- Java并发包解析01
- java数据结构之线性队列的实现
- SICP bank-modify
- 堆结构的C++模板类实现
- 图像处理的算法SIFT具有尺度不变性
- spring aop记录操作日志和错误日志
- JavaScript创建对象的几种模式
- .length()与.length与.size()
- 强悍的 ubuntu —— 命令行执行完毕通知(undistract-me)
- 剑指Offer----面试题14:调整数组顺序使奇数位于偶数前面
- gcd实现单例模式其一
- 我写的那六本开源计算机书
- am335x_gpio