支持向量机(SVM)公式整理
支持向量机可以分为三类:
- 线性可分的情况 ==> 硬间隔最大化 ==> 硬间隔SVM
- 近似线性可分的情况 ==> 软间隔最大化 ==> 线性支持向量机
- 线性不可分的情况 ==> 核技巧/软间隔最大化 ==> 非线性SVM
硬间隔向量机(hard margin svm)
任务:寻找一条与所有支持向量距离最远的决策边界,这条决策边界就是\(0 = w^T X + b\),即:
w^T X_i + b < 0 , y_i < 0
\]
所以问题可以描述为:
margin(w,b) = min \; distance(w,b,x_i) = min \frac{1}{|w|}|w^Tx_i+b|
\]
带换一下也就是
s.t. y_i(w^Tx_i+b)>0 \; ==>\; \exists r > 0 , min \; y_i(w^T+b)=r
\]
用r来表示就是:
\exists r > 0 , min \; y_i(w^T+b)=r
\]
这里我的理解是:因为\(wx_i+b=r\) ==> \(\frac{w}{r} x_i + \frac{b}{r}=1\),所以不管r取什么值,\(w=\frac{w_0}{r}\),\(b=\frac{b_0}{r}\), 所以r的取值所带来的影响会被最后的w和b所融合进去,所以r=1也没关系。最终的问题可以描述为(这里是N个不等式):
s.t. \; y_i(w^T+b)-1>=0 \qquad i=1,2,3,...,N
\]
构造拉格朗日函数,引入N个参数\(\alpha\),转换成对偶函数如下(大括号表示不出来我也很绝望):
s.t.\sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\
\alpha_i >=0 \; i = 1,2,3,.. N
\]
使用KKT条件,得到的解:
\]
\]
最终的解是:
\]
\]
软间隔向量机(soft margin svm)
软间隔向量机采用合页损失函数,真实数据中,严格线性可分的数据很少。合页损失函数允许分类时的一点点误差。损失函数如下:
1-y_{\overline{2}}\left(w^{\top} x_{i}+b\right) >0, \quad loss =1-y_{i}\left(w^{\top} x_{i}+b\right)
\]
也就是,正确分类并且函数间隔大于1时没有误差,错误分类时,距离决策边界越远的点,受到的惩罚越大。使用合页函数的做优化问题可以表示为:
\]
令\(\xi_{i}=1-y_{i}(w^{T} x_{i}+b), \quad \xi_{i} \geqslant 0\),则,分两种情况:
1、\(1-y_{i}(w^{T} x_{i}+b)>0\) ==> \(\xi_i =1-y_{i}\left(w^{T} x_{i}+b\right)\) ==> \(y_i(wx+b)=1-\xi_i\)
2、\(1-y_{i}(w^{T} x_{i}+b)\leqslant0\) ==> \(y_i(wx+b)\leqslant1\) ==> \(y_i(wx+b)\leqslant1-\xi_i\) (\(\xi_i=0\))
综合上面两种情况,可以直接写为:\(y_i(wx+b)\leqslant1-\xi_i\),这样的话,最优化函数就变成了下面的样子:
s.t. y_{i}\left(w^{T} x_{i}+b\right) \geqslant 1-\xi_{i}, \quad \xi_{i} \geqslant 0
\]
这两个式子是等价的。再《统计学习方法》中,先给出了后面的式子,再介绍了合页损失函数
这两个式子转换成等价的对偶函数如下:
s.t. \sum_{i=1}^{N}\alpha_iy_i=0 \qquad \\
0\leq \alpha_i \leq C, \;i=1,2,...N
\]
对偶函数的解是:
\]
\]
决策函数是:
\]
KKT条件
\]
\]
\]
\]
对于\(\lambda_{i}(1-y_{i}(w^{T} x_{i}+b))=0\) 只要 \(\lambda_i \neq0\) ,就有 \(1-y_{i}(w^{T} x_{i}+b=0\),也就是说\(x_i\)再决策边界上,\(x_i\)是支持向量
- 原问题与对偶问题育有强对偶关系 <===> 满足KKT条件
非线性支持向量机(核函数)
核函数可以对特征进行升维(当然,不一定非要是升维,也可能是转换到另一个空间),高维空间的运算量巨大,所以直接使用低维的计算结果,作为两个高维向量的内积:
= (x_1^2, \sqrt{2}x_1 x_2, x_2^2)(x_1^{'2}, \sqrt{2}x_1^{'} x_2^{'}, x_2^{'2}) \\\\
= (x_1 x_1^{'} + x_2 x_2^{'}) = (xx^{'})^2 =K(x, x^{'})
\]
核函数等价于两个映射哈函数的内积,不过,这个映射函数不需要手动指出。因为当两个映射函数相乘时,内积的结果可以用核函数表示。而映射函数在最优化问题中都是成对出现的。即出现映射函数的地方都可以用核函数替代。
如果用映射函数将x映射到高维空间,那么应该用高维向量替换x所在的位置:
\]
\]
\]
那么最终拟合的结果也应该是由高维向量表示的:
\]
\]
高斯核函数(RBF)
正太分布:
\]
高斯核函数:
\]
对于正态分布来说:\(\sigma\)是标准差,\(\sigma\)越小,曲线越窄。\(\sigma\)越大,曲线越宽
对于高斯核函数来说:\(\gamma\)的值越大,曲线越窄;\(\gamma\)的值越小,曲线越宽;
支持向量机(SVM)公式整理的更多相关文章
- 机器学习——支持向量机SVM
前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...
- 机器学习:Python中如何使用支持向量机(SVM)算法
(简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...
- 以图像分割为例浅谈支持向量机(SVM)
1. 什么是支持向量机? 在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- 支持向量机SVM——专治线性不可分
SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...
- 一步步教你轻松学支持向量机SVM算法之案例篇2
一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- OpenCV支持向量机(SVM)介绍
支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...
- 支持向量机SVM 参数选择
http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...
- 机器学习集成算法--- 朴素贝叶斯,k-近邻算法,决策树,支持向量机(SVM),Logistic回归
朴素贝叶斯: 是使用概率论来分类的算法.其中朴素:各特征条件独立:贝叶斯:根据贝叶斯定理.这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了.类别 y 的先验概率可以通过训练集算出 k-近邻 ...
- 转:机器学习中的算法(2)-支持向量机(SVM)基础
机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...
随机推荐
- Vim配置文件-详解(.vimrc)
Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim Vim分类 系统Vim配置文件/etc/vimrc 所有系统用户在启动 ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- CAD参数化功能的一些构想
cad二次开发人员通常对设计的具体业务不够理解,而设计人员对程序开发的学习成本也较高. 可否将cad的参数化功能搭建为二次开发人员与设计人员之间的桥梁. 如设计人员提前利用参数化功能建立对应的动态块, ...
- Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos
目录 1. 接着上一篇 2. 思路 3. 下载Sentinel源码 4. 看Gateway里面读取的配置信息 5. 修改Sentinel控制台源码 6. 熔断规则测试 7. 限流规则测试 8. 打包使 ...
- KingbaseES R6 集群一键修改集群和数据库参数测试案例
案例说明: 集群环境修改集群或数据库参数,需要在每个node上都要修改,在每个节点而执行修改操作,容易出现漏改或节点上参数不一致等错误:在KingbaseES V8R6的集群中增加了,一键修改参数 ...
- KingbaseES R3 读写分离集群在线扩容案例
案例说明: 1. 通过sys_basebackup创建新备库. 2. 将备库加入到Cluster nodes管理,可以用kingbase_monitor.sh一键启停. 3. 主备复制切换测试. 此次 ...
- PLSQL Developer安装详细步骤,小白,转发
下载软件可以直接在百度网盘里面下载 链接:https://pan.baidu.com/s/1bZNJ71d2-hvkM6PTbdpgAA 提取码:t9sh 然后直接参考这个链接进行安装https:// ...
- mpdf导出pdf,中文符号乱码
改源码: 打开vendor/mpdf/mpdf/src/Config/FontVariables.php 在最后一行加入: "gb" => [ 'R' => 'gb.t ...
- 使用Docker方式部署Gitlab,Gitlab-Runner并使用Gitlab提供的CI/CD功能自动化构建SpringBoot项目
1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runner,地址: ...
- useContext 解决函数父子组件传值
1在父组件外部定义变量A创建上下文,2在父组件使用变量A<A.Provider> <子组件/> </A.Provider> ,3.在子组件中创建变量使用useCon ...