简单明了的阐述SVM支持向量机以及做法步骤
一:什么是SVM向量机
SVM向量机通俗来讲,是用于分类的一种算法。
举例来说,SVM要做的就是,1.将图中的黑点和白点分开 2.分割线要尽量离两边的样本点要远。图中的黑色实线即为分割线,黑色虚线即为俩边的样本到分割线最近的位置。我们假设白点样本到分割线的最近的距离为d1,黑色样本点到分割线的最近的距离为d2,我们必须保证d1=d2。若d1不等于d2,即分割线距离某个样本比另一个样本更近,这个分割线是不合适的,因为它会更偏袒某个样本。
由于样本离分割线的最近距离相同,即某个样本点距离分割线的距离相同,黑色
虚线是按照样本点来画的,所以在黑色虚线的样本点,即距离分割线最近的几个样本点,我们叫做支持向量,分割线叫做决策面,并且对于一组样本,通常有不同的决策面。
并且d要大,即距离应当更宽,因为分割线距离样本越宽,这个分割线就越“安全”。越不容易分错。下面来看一下怎么计算:
第一:我们可以从图像知道,决策面是一个直线函数,我们将其定义为 y = ax+b。
第二:因为也许会有不同的多个决策面,所以我们要决定出哪个决策面最好,根据决策面的条件,我们知道,支持向量到决策面的距离越宽越好。所以这个距离我们用点到直线的距离公式。
d = ∣ A x + B y + b ∣ ⌋ A 2 + B 2 ‾ d=\dfrac {\left| Ax+By+b\right| }{\rfloor \overline {A^{2}+B^{2}}} d=⌋A2+B2∣Ax+By+b∣
我们将公式向量化,A,B都是我们不知道的,x,y是样本点的坐标,是已知的,我们将已知的x,y和未知的A,B提出来,组成向量的形式,即 x i = [ x i , y i ] x_{i} =[ x_{i},y_{i}] xi=[xi,yi] ,i为第几组样本,w = [ A i , B i ] [ A_{i},B_{i}] [Ai,Bi] ,所以Ax + By = W i T X i W^{T}_{i}X_{i} WiTXi,大家很熟悉的向量形式吧, A 2 + B 2 {A^{2}+B^{2}} A2+B2即为||w||,这里||w|| = W T W W^{T}W WTW。
所以距离公式为 d = ∣ w T x i + b ∣ ∥ w ∥ d = \dfrac {\left| w^{T}x_{i}+b\right| }{\left\| w\right\| } d=∥w∥∣∣wTxi+b∣∣
第三:这里我们可以回想一下为什么距离公式的分子要加绝对值符号,因为会有正负(废话呀这是),但什么时候是正什么时候是负呢,当点在这条线下方的时候为负,在上面为正(不再解释),而我们SVM正号要对样本进行分类,我们可以把被决策面上方的一边的样本定义为+1,下面的定义为-1,我们可以定义一个标签向量y = {-1,1},我们便可以利用这个标签向量去掉绝对值符号。即
d = ( w T x i + b ) ∗ y i ∥ w ∥ , y i = − 1 或 1 d = \dfrac {\left( w^{T}x_{i}+b\right)*y_{i} }{\left\| w\right\| } ,y_{i} = {-1或1} d=∥w∥(wTxi+b)∗yi,yi=−1或1
第四:我们想要计算d的最小值,我们先对分子进行处理:
我们知道d是样本距离决策面的距离,且有正负,若大于d,则样本在决策面上面,被分到的标签是y =1 ,反之一样。则:
( w T x i + b ) ∗ y i ∥ w ∥ > = d , y i = 1 \dfrac {\left( w^{T}x_{i}+b\right)*y_{i} }{\left\| w\right\| }>=d ,y_{i} =1 ∥w∥(wTxi+b)∗yi>=d,yi=1
( w T x i + b ) ∗ y i ∥ w ∥ < = − d , y i = − 1 \dfrac {\left( w^{T}x_{i}+b\right)*y_{i} }{\left\| w\right\| }<=-d ,y_{i} =-1 ∥w∥(wTxi+b)∗yi<=−d,yi=−1
同时处以d,得:
( w T x i + b ) ∗ y i ∥ w ∥ d > = 1 , y i = 1 \dfrac {\left( w^{T}x_{i}+b\right)*y_{i} }{\left\| w\right\|d }>=1 ,y_{i} =1 ∥w∥d(wTxi+b)∗yi>=1,yi=1
( w T x i + b ) ∗ y i ∥ w ∥ d < = − 1 , y i = − 1 \dfrac {\left( w^{T}x_{i}+b\right)*y_{i} }{\left\| w\right\|d }<=-1 ,y_{i} =-1 ∥w∥d(wTxi+b)∗yi<=−1,yi=−1
设 W d = w ∥ W ∥ d W_{d}=\dfrac {w}{\left\| W\right\| d} Wd=∥W∥dw, B d = b ∥ W ∥ d B_{d}=\dfrac {b}{\left\| W\right\| d} Bd=∥W∥db
可得: W d T x i + B d > = 1 , y = 1 W^{T}_{d}x_{i}+Bd>= 1,y= 1 WdTxi+Bd>=1,y=1
W d T x i + B d < = − 1 , y = − 1 W^{T}_{d}x_{i}+Bd<= -1,y= -1 WdTxi+Bd<=−1,y=−1
将两式合并 ( W T x i + B d ) y i ≥ 1 \left( W^{T}x_{i}+Bd\right) y_{i}\geq 1 (WTxi+Bd)yi≥1
即 m i n [ ( w T x i + B d ) y i ] min[\left( w^{T}x_{i}+Bd\right) y_{i}] min[(wTxi+Bd)yi]的最小值为1
这样距离公式转化成了求 1 ∥ W ∥ \dfrac {1}{\left\| W\right\| } ∥W∥1的最大值
即 max (d) = max 1 ∥ W ∥ \dfrac {1}{\left\| W\right\| } ∥W∥1
即求 ∥ W ∥ \left\| W\right\| ∥W∥的最小值
求这么一个函数的最小值不一定好求,我们等效成求 1 2 ∥ W ∥ 2 \dfrac {1}{2}\left\| W\right\| ^{2} 21∥W∥2的最小值,转换成这样是易于求极小值
第五:我们这时候暂时总结一下(下面还有),判断求决策面是否合适转换成了求距离是否大,然后由距离公式不断推出,我们现在要求这个结果: m i n 1 2 ∥ W ∥ 2 min\dfrac {1}{2}\left\| W\right\| ^{2} min21∥W∥2
但是,别忘了这个式子是不全面的,这个式子是在约束条件 y i ( w T x i + b ) ≥ 1 y_{i}\left( w^{T}x_{i}+b\right) \geq 1 yi(wTxi+b)≥1得到的,所以要加上这个约束条件
m a x ( d ) = m i n 1 2 ∥ W ∥ 2 max(d)=min\dfrac {1}{2}\left\| W\right\| ^{2} max(d)=min21∥W∥2
s . t . y i ( w T x i + b ) ≥ 1 s.t. y_{i}\left( w^{T}x_{i}+b\right) \geq 1 s.t.yi(wTxi+b)≥1或者 s . t . y i ( w T x i + b ) − 1 ≥ 0 s.t. y_{i}\left( w^{T}x_{i}+b\right) -1\geq 0 s.t.yi(wTxi+b)−1≥0
第六,看见这个式子,学过高数的朋友应该心里想到了怎么求,用拉格朗日函数求解,设: L ( w , b , a ) = 1 2 ∥ W ∥ 2 − ∑ i = 1 n a [ y i ( w T x i + b ) − 1 ] L\left( w,b,a\right) =\dfrac {1}{2}\left\| W\right\| ^{2}-\sum ^{n}_{i=1}a[y_{i}\left( w^{T}x_{i}+b\right) -1] L(w,b,a)=21∥W∥2−i=1∑na[yi(wTxi+b)−1]
分别求L对w,b的偏导,得: ∂ L ∂ w = w − ∑ i = 1 n a ⋅ y i x i \dfrac {\partial L}{\partial w}=w-\sum ^{n}_{i=1}a\cdot y_{i}x_{i} ∂w∂L=w−i=1∑na⋅yixi ∂ L ∂ b = − ∑ i = 1 n a ⋅ y i \dfrac {\partial L}{\partial b}=-\sum ^{n}_{i=1}a\cdot y_{i} ∂b∂L=−i=1∑na⋅yi
第七:令偏导等于0: w = ∑ i = 1 n a ⋅ y i x i w = \sum ^{n}_{i=1}a\cdot y_{i}x_{i} w=i=1∑na⋅yixi 0 = ∑ i = 1 n a ⋅ y i 0=\sum ^{n}_{i=1}a\cdot y_{i} 0=i=1∑na⋅yi
对原式L(w,b,a)进行代入化简运算:
L ( w , b , a ) = ∑ i = 1 n a i − 1 2 ( ∑ i = 1 n a i x i y i ) T ∑ i = 1 n a i x i y i L\left( w,b,a\right) =\sum ^{n}_{i=1}a_{i}-\dfrac {1}{2}\left( \sum ^{n}_{i=1}a_{i}x_{i}y_{i}\right) ^{T}\sum ^{n}_{i=1}a_{i}x_{i}y_{i} L(w,b,a)=i=1∑nai−21(i=1∑naixiyi)Ti=1∑naixiyi = ∑ i = 1 n a i − 1 2 ∑ i j = 1 n a i a j y i y j x i T x i =\sum ^{n}_{i=1}a_{i}-\dfrac {1}{2}\sum ^{n}_{ij=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{T}x_{i} =i=1∑nai−21ij=1∑naiajyiyjxiTxi
别忘了约束条件 s . t . ∑ i = 1 n a i y i = 0 s.t.\sum ^{n}_{i=1}a_{i}y_{i}=0 s.t.i=1∑naiyi=0 a i > 0 , i = 1 , 2 , . . n a_{i}>0,i=1,2,..n ai>0,i=1,2,..n
基本上是完成了计算方式,下面还有优化
(我不想写了腰好疼哇啊啊啊啊啊,剩下的明天写吧)
简单明了的阐述SVM支持向量机以及做法步骤相关推荐
- 【Python】如何简单获取糗事百科?【详细步骤】
文章目录 本文目标 一.爬虫基本概念 二.Requests 库基本介绍 1.引入库 2.Beautiful Soup 库介绍 3.糗百爬虫代码 总结 本文目标 掌握爬虫的基本概念 Requests 及 ...
- 整理最近学习的算法:SVM支持向量机(简单)、kappa值、ROC曲线和AUC值
整理最近学习的算法:kappa值.ROC曲线和AUC值.SVM支持向量机(简单) 1.分类精度的检验 (1)kappa系数检验一致性和分类效果 下面给出公式: 其中,p0是每一类正确分类的样本数量之和 ...
- SVM支持向量机通俗导论(理解SVM的三层境界)
神文 转自july:http://blog.csdn.net/v_july_v/article/details/7624837 支持向量机通俗导论(理解SVM的三层境界) 作者:July .致谢:pl ...
- 惊呼——SVM支持向量机三重境界!
转载自:原文 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个 ...
- 网格向量必须包含特征点。_【专题研究】基于SVM支持向量机模型的选股策略
研究过集成学习中的随机森林和XGBoost后,本文将介绍一种更传统的机器学习方法:SVM支持向量机.SVM由于其较高的准确度,并且能够解决非线性分类问题,曾一度成为非常流行的机器学习算法.本文分别介绍 ...
- 机器学习(18)-- SVM支持向量机(根据身高体重分类性别)
目录 一.基础理论 二.身高体重预测性别 1.获取数据(男女生身高体重) 2.数据处理(合并数据) 3.设置标签 4.创建分类器(支持向量机) 4-1.创建svm分类器 4-2.设置分类器属性(线性核 ...
- SVM -支持向量机原理详解与实践之五
SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性 ...
- SVM支持向量机个人总结及理解
SVM支持向量机个人总结 最近在学习支持向量机的内容,总感觉对这块的东西比较模糊,为了加深自己的印象以及理解,写一篇note来帮助自己回忆(纯属个人理解,如有错误,烦请改正,谢谢各位!) 1.1简单介 ...
- 历经一个月,终于搞定了SVM(支持向量机)-附源代码解析
历经一个月,终于搞定了SVM(支持向量机)-附源代码解析 前言 其实整体算下来,断断续续的也得有快两个月了(原谅博主比较笨).中间也有好几次放弃,不想写这篇总结了,但是之前立下的誓言,要将学习到的每一 ...
最新文章
- mysql在建站起什么作用_数据库操作对比:Sql Server与MYSQL相比有哪些建站优势?...
- 结对编程--------四则运算 实验总结2
- Workaround for 1701 Cannot truncate a table referenced in a foreign key constraint using doctrine:
- selenium 获取href find_element_by_xpath
- linux中ctime,mtime,atime的区别
- Linq 中 Any与All
- google earth pro 64位_七彩虹秀精准刀工!iGame RTX 3060 Ti Advanced OC评测:烤机3小时64度...
- TensorFlow在Anaconda环境下创建
- 零基础学python尹会生_编程零基础应当如何开始学习 Python?
- linux命令行删除N天前的数据的命令
- rocketmq源码调试
- RHEL6.5 部署DNS服务器
- python 中获取数据etree.HTML打印问题
- 自学c语言难,自学C语言/C++到底难在哪里?
- 计算机网络路由交换技术运用,计算机网络路由交换的技术应用与发展趋势研究...
- 飞秋与虚拟机的有关IP设置
- 杂篇:随笔编程杂谈录--《隆中对》
- php微信调用摄像头拍视频,公众号调用摄像头录制视频
- 【FPGA】SPI协议
- html导出pdf及word,保留完成样式以及格式调研
热门文章
- error LNK2019:和error LNK2001:
- 自从被国家认定为新时代的农民工过后,国家又不让我 996 了.
- CVer最想知道的,简单分析下《2020年度中国计算机视觉人才调研报告》
- Spark入门(五)——Spark Streaming
- Python下openCV打开图片的几种方式/适应窗口大小
- TCP/IP协议,卷一第42页错误
- HDU-2094-产生冠军
- 第一遍Java学习笔记
- 视频教程免费分享:嵌入式stm32项目开发之心率检测仪的设计与实现
- 计算字符串的相似度/华为机试(C/C++)