解密SVM系列(二):SVM的理论基础(转载)

解密SVM系列(二):SVM的理论基础     原文博主讲解地太好了  收藏下

解密SVM系列(三):SMO算法原理与实战求解

支持向量机通俗导论(理解SVM的三层境界)

上节我们探讨了关于拉格朗日乘子和KKT条件,这为后面SVM求解奠定基础,本节希望通俗的细说一下原理部分。

一个简单的二分类问题如下图: 
这里写图片描述 
我们希望找到一个决策面使得两类分开,这个决策面一般表示就是WTX+b=0,现在的问题是找到对应的W和b使得分割最好,知道logistic分类 机器学习之logistic回归与分类的可能知道,这里的问题和那里的一样,也是找权值。在那里,我们是根据每一个样本的输出值与目标值得误差不断的调整权值W和b来求得最终的解的。当然这种求解最优的方式只是其中的一种方式。那么SVM的求优方式是怎样的呢?

这里我们把问题反过来看,假设我们知道了结果,就是上面这样的分类线对应的权值W和b。那么我们会看到,在这两个类里面,是不是总能找到离这个线最近的点,向下面这样: 
这里写图片描述 
然后定义一下离这个线最近的点到这个分界面(线)的距离分别为d1,d2。那么SVM找最优权值的策略就是,先找到最边上的点,再找到这两个距离之和D,然后求解D的最大值,想想如果按照这个策略是不是可以实现最优分类,是的。好了还是假设找到了这样一个分界面WTX+b=0,那么做离它最近的两类点且平行于分类面,如上面的虚线所示。好了再假设我们有这两个虚线,那么真实的分界面我们认为正好是这两个分界面的中间线,这样d1就等于d2了。因为真实的分界面为WTX+b=0,那么就把两个虚线分别设置为WTX+b=1WTX+b=1可以看到虚线相对于真实面只是上下移动了1个单位距离,可能会说你怎么知道正好是一个距离?确实不知道,就假设上下是k个距离吧,那么假设上虚线现在为WTX+b=k,两边同时除k可以吧,这样上虚线还是可以变成WT1X+b1=1,同理下虚线也可以这样,然后他们的中线就是WT1X+b1=0吧,可以看到从k到1,权值无非从w变化到w1,b变到b1,我在让w=w1,b=b1,不是又回到了起点吗,也就是说,这个中间无非是一个倍数关系。所以我们只需要先确定使得上下等于1的距离,再去找这一组权值,这一组权值会自动变化到一定倍数使得距离为1的。

好了再看看D=d1+d2怎么求吧,假设分界面WTX+b=0,再假设X是两维的,那么分界面再细写出来就是:w1x1+w2x2+b=0。上分界线:w1x1+w2x2+b=1,这是什么,两条一次函数(y=kx+b)的曲线是不是,那么初中就学过两直线的距离吧,d=|c2c1|w21+w22−−−−−−−√=1||W||

这里W=(w1,w2),是个向量,||W||为向量的距离,那么||W||2=WTW。下界面同理。这样D=d1+d2=2||W||=2WTW−−−−−√2WTW,要使D最大,就要使分母最小,这样优化问题就变为min(12WTW),乘一个系数0.5没影响,但是在后面却有用。

我们知道,如果一个一次函数分界面为WTX+b=0,那么线上方的x可以使得WTX+b>0,下方的x可以使得WTX+b<0吧,那么对于上界面以上的点就有WTX+b>1,下界面以下的点就有WTX+b<1。我们现在再假设上界面以上的点的分类标签为1,下界面以下的点的分类标签为-1。那么这两个不等式再分别乘以他们的标签会怎么样?是不是可以统一为yi(WTxi+b)1了(这也是为什么SVM在使用之前为什么要把两类标签设置为+1,-1,而不是0,1等等之类的了)。好了假设分界面一旦确定,是不是所有点都得满足这个关系。那么最终的带约束的优化问题转化为: 

min12WTWs.t.yi(Wxi+b)1

把约束条件换成小于号的形式:

s.t.1yi(Wxi+b)0

注意的是这可不是一个约束条件,而是对所有的每个样本xi都有一个这样的约束条件。 
转换到这种形式以后是不是很像上节说到的KKT条件下的优化问题了,就是这个。但是有一个问题,我们说上节的KKT是在凸函数下使用的,那么这里的目标函数是不是呢?答案是的,想想WTW,函数乘出来应该很单一,不能有很多极点,当然也也可以数学证明是的。

 

好了那样的话就可以引入拉格朗日乘子法了,优化的目标变为: 

L(w,b,α)=12wTw+α1h1(x)+...+αnhn(x)=12wTwα1[y1(wx1+b)1]...αn[yn(wxn+b)1]=12wTwi=1Nαiyi(wxi+b)+i=1Nαi


然后要求这个目标函数最优解,求导吧, 

Lw=wi=1Nαiyixi=0w=i=1NαiyixiLb=i=1Nαiyi=0i=1Nαiyi=0


这两个公式非常重要,简直是核心公式。 
求导得到这个应该很简单吧,那我问你为什么WTW对w求导是w呢?如果你知道,那么你很厉害了,反正开始我是一直没转过来。其实说起来也很简单,如果光去看看为什么求导以后,转置就没了,不太好想明白,设想一下假设现在是二维样本点,也就是最终的W=(w1,w2),那么WTW=w1w1+w2w2那么对w1求导就是2w1,对w2就是2w2,这样写在一起就是对w求导得到(2w1,2w2)=2w了,然后乘前面一个1/2(这也就是为什么要加一个1/2),就变成w了。

 

好了得到上面的两个公式,再带回L中把去w和b消掉,你又可能发现,w确实可以消,因为有等式关系,那b怎么办?上述对b求导的结果竟然不含有b,上天在开玩笑吗?其实没有,虽然没有b,但是有那个求和为0呀,带进去你会惊人的发现,b还真的可以消掉,就是因为了那个等式。简单带下: 

W(α)=L(w,b,α)=12(i=1Nαiyixi)T(j=1Nαjyjxj)i=1Nαiyi((i=1Nαiyixi)xi+b)+i=1Nαi=12(i,j=1Nαiyiαjyjxixj)i,j=1Nαiyiαjyjxixj+bi=1Nαiyi+i=1Nαi=12(i,

转载于:https://www.cnblogs.com/Vae1990Silence/p/8393103.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cout输出数组_让程序从1开始一直执行++操作,10秒钟能输出最大的数是多少

问题描述如果写一段代码&#xff0c;让程序从 1 开始一直执行 操作&#xff0c;在规定的 10s 钟内&#xff0c;你能输出的最大数是多少&#xff1f;并将它打印到屏幕上。乍一看&#xff0c;你会觉得它是一道算法题&#xff0c;再细想&#xff1a;不对&#xff01;这可能是一道…

微信公众号管理

微信公众号图文编辑 在新建图文时&#xff0c;如果有想插入的视频&#xff0c;可以采取获取视频链接再导入的方法&#xff0c;这样会更高效美观。 摘要和多个图文信息的重叠 新建图文信息&#xff0c;在设置封面旁边有图文摘要&#xff0c;图文摘要会在发送出去的界面旁边有显…

页面模板

找了半天的公众号模板&#xff0c;有点坑&#xff0c;微信公众号更新太快了&#xff0c;几个月不看都找不到使用功能了。 页面模板位置 页面模板在现在的话题专辑&#xff0c;如图: 在页面排版中可以实现我一直想要的菜单整理化功能 可以将文章整理后&#xff0c;发布在菜单…

SQL语句输出

select ,print均可以做输出 但如果想用print同时输出字符串和数字时&#xff0c;就需要遇到转换函数convert: declare allstudents int e.g.print’毕业人数为’convert(char,allstudents) 在执行时可能会遇到结果中显示了你的输出信息&#xff0c;而在消息中却没有&#xff0…

.NET面试题解析(04)-类型、方法与继承

转自:http://www.cnblogs.com/anding/p/5248973.html 常见面试题目: 1. 所有类型都继承System.Object吗&#xff1f; 2. 解释virtual、sealed、override和abstract的区别 3. 接口和类有什么异同&#xff1f; 4. 抽象类和接口有什么区别&#xff1f;使用时有什么需要注意的吗&a…

初学python的format之美

初学python的format之美 *区别于C语言的输出语句的是python的输出用的是"print"而不是“printf”。 1.简单的字符串和变量一起输出 python中的替代使用的是“{}” nameinput("请输入一个人的名字") countryinput("请输入一个国家的名字") prin…

20.链式队列

运行截图: 完整代码: 1 #include <stdio.h>2 #include <stdlib.h>3 4 #define datatype int5 6 typedef struct queue7 {8 datatype data;9 struct queue *pNext; 10 }Queue,*PQueue; 11 12 //入队 从尾部入,从头部出 13 PQueue enq(PQueue phead, dataty…

1到n阶乘算法的改进

1到n阶乘算法的改进 之前用到过好几次了&#xff0c;但总是很长时间不用就会忘了&#xff0c;所以这次直接把它扔进来了。 之前总是喜欢用双层循环&#xff0c;其实一个单层循环足以&#xff0c;下面将用Python和C两种语言进行展示 C&#xff1a; #include<iostream> …

lua 调用文件中的函数调用_深入Lua:调用相关的指令

前言这一节我们来深入解析与调用相关的指令&#xff0c;这些指令是&#xff1a;OP_CALL 调用OP_TAILCALL 尾调用OP_VARARG 可变参数OP_RETURN 返回解析这些指令的过程中&#xff0c;最重要的是时刻跟踪栈的变化情况。简单调用OP_CALL 的语法是&#xff1a;R(A), ... ,R(AC-2) :…

算法基础——列表查找

whats the 算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制。也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输…

Python画板画图之美

Python画板画图之美 *turtle.done() #可让画板窗口停止*1.绘制同切圆 pensize为画笔宽度 circle(n),n为半径大小&#xff0c;两者单位均为像素 import turtle turtle.pensize(2) #画笔宽度&#xff0c;单位为像素 turtle.circle(10) #圆半径&…

python request库_【Python爬虫】Request库入门

什么是爬虫&#xff1f; 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还…

world文档粘贴图片进去看不到

在大学做实验报告的时候经常要插入一些截图&#xff0c;往往会遇到直接复制粘贴图片会看不到的情况&#xff0c;会很烦&#xff0c;我自己也找了好多方法&#xff0c;下面是我最喜欢的简便方法的一种。 解决方法如下: 可以点击鼠标右键选择段落&#xff0c;将行距修改为1.5倍即…

c盘users的用户名怎么改_怎么修改iPhone备份文件夹路径 iPhone C盘路径修改教程【详解】...

iPhone备份文件夹路径怎么修改_iPhone C盘备份路径修改教程 我们都知道iPhone默认的备份是在C盘&#xff0c;不过现在各种视频、照片体积那么大&#xff0c;小小的C盘只怕是负荷不了了&#xff0c;那么有什么办法去修改备份路径呢&#xff0c;下面小编就为大家介绍一下。需要注…

javaweb开发的准备工作——配置篇

1.配置 a. jdk配置&#xff08;用于web开发编程&#xff0c;此处不需要配置path&#xff0c;只需配置环境变量即可&#xff09; b. tomcat配置 打开Tomcat&#xff08;打开bin目录下的startup.bat文件&#xff09; 检验是否打开成功(两个网址都可以&#xff0c;出现汤姆猫即为…

阅读引擎开源项目调研总结

农历腊月初二&#xff0c;也是冬至后的第四个九天&#xff0c;俗称“四九”。冬至这一天开始数九&#xff0c;这就是人们所说的“提冬数九”。数上9天是一九&#xff0c;再数9天是二九……数到“九九”就算“九”尽了&#xff0c;“九尽杨花开”&#xff0c;那时天就暖了。《九…

ftp 上传文件夹_命令行连接FTP服务器

Windows下&#xff1a;打开命令行窗口&#xff0c;输入 ftp&#xff0c;进入ftp命令模式&#xff1a;输入 open ip地址 端口&#xff0c;进入ftp服务器&#xff0c;如open 172.16.3.77 2121。如下图&#xff1a;输入Windows下的用户名&#xff0c;然后输入密码&#xff08;注意…

创建实现一个简单的web项目

创建一个新的web项目 注意要选择Dynamic Web Project&#xff0c;第一次用可能要找一下&#xff0c;也可以直接搜索栏搜web&#xff0c;就会出来 图片是我自己照片照的&#xff0c;不好截图&#xff0c;看到有个人影勿慌哈哈哈哈&#xff0c;不是你眼睛的问题。 然后在web文件目…

eclipse xml文件报错_Maven教程6: Maven与Eclipse整合

点击上方“Java技术前线”&#xff0c;选择“置顶或者星标”与你一起成长一、安装Maven插件下载下来的maven插件如下图所示&#xff1a;&#xff0c;插件存放的路径是&#xff1a;E:/MavenProject/Maven2EclipsePlugin进入到eclipse中的dropins目录下&#xff0c;新建三个txt文…

C语言#define宏定义可能注意不到的地方

#define使用的核心:直接替换 我也觉得自己很清楚这一点&#xff0c;但看到这一道输出程序片段结果题&#xff0c;还是懵了。大家也可以在不看我下方答案的情况下&#xff0c;自己做一下&#xff0c;题目如下: #include<stdio.h> #define P 3 #define S(a) P*a*a int mai…