liner-classifiers-SVM
1支持向量机
参考看了这篇文章你还不懂SVM你就来打我
第一遍看完确实有想打死作者的冲动,但是多看几遍之后,真香~
【SVM---这可能是最直白的推导了】
个人觉得这篇文章讲的很清楚,条理清晰,数学推导也很明白,因此基于此做笔记,当然也参考周志华老师机器学习以及其他大佬的博客等。
1.1 SVM定义
- SVM与logistic一样就是一种二类分类模型,它的基本模型是的定义在特征空间上的间隔最大的线性分类器,SVM的学习策略就是间隔最大化。
维基百科的官方解释:有点多
支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
1.1.1 直观解释
- 通过上图凭直观感受应该觉得是H3分类更好。首先H1不能把类别分开,这个分类器肯定是不行的;H2可以,但分割线与最近的数据点只有很小的间隔,如果测试数据有一些噪声的话可能就会被H2错误分类(即对噪声敏感、泛化能力弱)。H3以较大间隔将它们分开,这样就能容忍测试数据的一些噪声而正确分类,是一个泛化能力不错的分类器。
- 对于支持向量机来说,数据点若是p维向量,我们用p-1维的超平面来分开这些点。但是可能有许多超平面可以把数据分类。最佳超平面的一个合理选择就是以最大间隔把两个类分开的超平面。因此,SVM选择能够使离超平面最近的数据点的到超平面距离最大的超平面。
- 以上介绍的SVM只能解决线性可分的问题,为了解决更加复杂的问题,支持向量机学习方法有一些由简至繁的模型:
1.1.2 线性可分SVM
当训练数据线性可分时,通过硬间隔(hard margin,什么是硬、软间隔下面会讲)最大化可以学习得到一个线性分类器,即硬间隔SVM,如上图的的H3
1.1.3 线性SVM
当训练数据不能线性可分但是可以近似线性可分时,通过软间隔(soft margin)最大化也可以学习到一个线性分类器,即软间隔SVM。
1.1.4 非线性SVM
当训练数据线性不可分时,通过使用核技巧(kernel trick)和软间隔最大化,可以学习到一个非线性SVM。
1.1.5 SVM三宝
- 最大间隔
- 对偶问题
- 核函数
1.2 线性可分SVM——硬间隔
线性可分:假设有猪狗两类样本,若在特征空间中存在一个超平面将猪狗完全准确分开,那么就称这个猪狗样本集线性可分。在二维空间时,超平面就是一条直线。SVM的任务就是找到最佳啊超平面。
有一个线性可分的训练集:
\(\left(X_{1}, y_{1}\right),\left(X_{2}, y_{2}\right), \dots,\left(X_{n}, y_{n}\right)\)
其中\(X_{i}\)是一个含有\(d\)个元素的列向量, 即\(X_{i} \in \mathbf{R}^{d}\);\(y_{i}\)是标量,\(y \in+1,-1, y_{i}=+1\),\(y_{i}=+1\)时表示\(X_{i}\)属于正类别,\(y_{i}=-1\)时表示\(X_{i}\)属于负类别.\(X,X_{i},W\)都是列向量
回忆一下感知机的目标: 找到一个超平面使其能正确地将每个样本正确分类。感知机使用误分类最小的方法求得超平面,不过此时解有无穷多个(例如图1.1的H2和H3以及它俩的任意线性组合)。而线性可分支持向量机利用间隔最大化求最优分离超平面,这时解是唯一的
1.2.1 超平面与间隔
- 最佳超平面必须具有更好的泛化能力,对噪声更为不敏感,即更好的鲁棒性。从几何角度来说,两样本到超平面的间隔越大,抗干扰能力越强,所以最佳超平面就是以最大间隔把样本分开的超平面,也称之为最大间隔超平面知乎学者
间隔是两侧样本到超平面的距离之和,即margin = d1+d2,多个样本就有多个间隔值,那是不是每个间隔对超平面的贡献都一样的呢?答案是否定的,离超平面越近的样本越容易划分错误,因此离超平面越近的样本对超平面的影响越大,所以为了找到最大间隔超平面,首先要找到两侧离超平面最近的样本点,求出其到超平面的距离之和,即margin = min(d1+d2)。然后不同超平面,margin不同,为了找到最佳超平面,我们需要最大化margin,可以理解为泛化能力最大的那个超平面,即max margin
一个超平面由法向量\(W\)和截距\(b\)决定,其方程为\(X^{T}W+b=0\), 可以规定法向量指向的一侧为正类,另一侧为负类。下图画出了三个平行的超平面,法方向取左上方向
-为了找到最大间隔超平面,我们可以先选择分离两类数据的两个平行超平面,使得它们之间的距离尽可能大。在这两个超平面范围内的区域称为“间隔(margin)”,最大间隔超平面是位于它们正中间的超平面(最大间隔的超平面是唯一的)。这个过程如上图所示.
1.2.2 最大间隔
以上叙述转为数学表达,即max margin = max min(d1+d2)
点到直线的距离d:点W(\(X_{w},Y_{w}\))到直线AX+BY+C=0的距离等于
\(d=\frac{\left|A X_{w}+B Y_{w}+C\right|}{\sqrt{A^{2}+B^{2}}}\)
现在假设在样本集中,存在一个超平面 \(W^{T}X+b=0\) ,使得样本集线性可分,那么样本到超平面的距离d为:
\(d=\frac{\left|W^{T} X+b\right|}{\|W\|}\),其中\(\|W\|=\sqrt{w_{0}^{2}+w_{1}^{2}+\ldots+w_{n}^{2}}\),
所以,maxmargin \(=\max _{w, b} \min _{x_{i}}\left(2 * \frac{\left|W^{T} X_{i}+b\right|}{\|W\|}\right)\)
因为\(\frac{\left|W^{T} X_{i}+b\right|}{\|W\|}>0\),即\(\left|W^{T} X_{i}+b\right|>0\),所以一定存在一个k>0,使得\(\left|W^{T} X_{i}+b\right|=k\)
k取多少对超平面是没有影响的,因为只是平移 \(W_{T}X+b=0\)的k个单位,因此为了方便后面的计算,使|\(W_{T}X+b=1\)|,那么
maxmargin\(=\max _{W, b} \min _{x_{i}}\left(2 * \frac{1}{\|W\|}\right)=\max _{W, b}\left(2 * \frac{1}{\|W\|}\right)\)
就这样,将寻找最大间隔超平面的问题转化为数学优化问题,但这里有一个前提,就是这个超平面能把样本正确分类,这个大前提的数学表达式为
\(\left\{\begin{array}{l}{W^{T} X_{i}+b \leq-1, y_{i}=-1} \\ {W^{T} X_{i}+b \geq 1, y_{i}=1}\end{array} \Rightarrow y_{i}\left(W^{T} X_{i}+b\right) \geq 1\right.\)
另外求优化问题时,我们更喜欢转为凸优化,因为\(\max \frac{1}{\|W\|} \Leftrightarrow \min \|W\|\),且||W||是个带根号的值,为了方便运算,将||W||等同于 \({||W||}^2\) , 且乘上系数 1/2方便求导,因此最终优化问题表达式为:
\(\min _{W, b} \frac{1}{2}\|W\|^{2}\),约束条件,\(y i\left(W^{T} x_{i}+b\right) \geq 1\)
1.3 支持向量
在线性可分的情况下,训练数据集的样本点中与分离超平面距离最近的数据点称为支持向量(support vector),支持向量是使\(X_{i}^{T} W+b \geq+1, y_{i}=+1\)和\(X_{i}^{T} W+b \leq-1, y_{i}=-1\)中的约束条件取等的点,即满足
在决定最佳超平面时只有支持向量起作用,而其他数据点并不起作用。如果移动非支持向量,甚至删除非支持向量都不会对最优超平面产生任何影响。也即支持向量对模型起着决定性的作用,这也是“支持向量机”名称的由来
1.4 对偶问题
那么怎么求解呢?对于高维数据、样本量非常大的时候,无法通过简单运算求解,这时候就会通过对偶、核技巧等方法求解。在求解之前先简单介绍一下带约束与不带约束的凸优化问题都是怎么求解的
- 1) 不带约束条件:
不带约束条件的求解是很容易得到的,直接求导求最小值就可以了。 - 2) 带等式约束条件:
带等式约束条件的一般会先通过拉格朗日乘子法转化为无约束后,再通过求导求解。
给定约束条件 \(h_{x}=0\),求min f(x) 的问题,可以先定义如下拉格朗日函数(λ为拉格朗日乘子): \(L(x, \lambda)=f(x)+\lambda h(x)\) ,即将等式约束转为无约束了,求解时分别对x,λ求导即可。
- 3) 带不等式的约束条件
带不等式的约束条件的优化问题,一般会先转化为带等式约束,再通过拉格朗日乘子法求解。如:给定约束条件 \(g(x)=0\) ,求min f(x) 的问题,首先定义一个k值,使得
\(h(x, k)=g(x)+k^{2}=0\),接着定义如下拉格朗日函数(λ为拉格朗日乘子)\(L(x, \lambda, k)=f(x)+\lambda h(x, k)=f(x)+\lambda g(x)+\lambda k^{2}, \lambda \geq 0\)即将不等式约束转为无约束了,最后分别对各个参数求导即可.
1.4.1带不等式的约束条件时怎么求解的
这里我直接放个图
最终得到的条件也称为不等式约束优化问题的KKT条件,也是强对偶的必要条件
另外,从上图星号的公式也可以知道,当时, \({\lambda}_i}=0\) ,\(1-y_{i}\left(W^{T} x_{i}+b\right)<0\)此时约束条件是不起约束作用,只有当\({\lambda}_i}>0\)时, \(1-y_{i}\left(W^{T} x_{i}+b\right)=0\) ,约束条件才起约束作用,此时点 \((x_{i},y_{i})\) 称为支持向量。这也是为什么这个算法叫支持向量机的原因,真正对最佳超平面起作用的点只有支持向量,因此大大降低了的运算消耗。
1.4.2 强对偶能解决什么问题呢
强对偶可以根据计算的难度、复杂度在minmax与 maxmin之间转换
那么对偶问题是怎么应用到我们的优化问题当中的呢?现在我们的优化问题可以写成:
公式推导到这里 :
\(\max _{\lambda}\left(-\frac{1}{2} \sum_{i=0}^{n} \sum_{j=0}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=0}^{n} \lambda_{i}\right), \# \mapsto \sum_{i=0}^{n} \lambda_{i} y_{i}=0, \lambda_{i} \geq 0\)
可以看出来其实这是个二次规划问题,常用SMO序列最小算法解析算法求解,最终得出最佳参数\(\lambda^{*}\)
在已知 \(W^{*}\)(KKT条件), \(\lambda^{*}\) 的前提下,因为对最佳超平面起作用的只有支持向量,那么设点 \((x_{k},y_{k})\) 是一个支持向量,则 \(y_{k}\left(W^{* T} X_{k}+b\right)=1\),求得 \(b^*\)
最终最佳超平面的表达式为
\(f(x)=\operatorname{sign}\left(W^{* T} X+b^{*}\right)\)
\(W^{*}=\sum_{i=0}^{n} \lambda_{i} y_{i} x_{i}, b^{*}=y_{k}-\sum_{i=0}^{n} \lambda_{i} y_{i} x_{i} x_{k}\)
1.4.3 为何转化为对偶问题
- 对偶问题更易求解,由下文知对偶问题只需优化一个变量\(\alpha\)且约束条件更简单;
- 能更加自然地引入核函数,进而推广到非线性问题
以上都是解决线性问题or近似线性问题的
1.5 核函数
非线性SVM的解决方式
将线性支持向量机推广到非线性支持向量机。需要注意的是,不仅仅是SVM,很多线性模型都可以用核技巧推广到非线性模型,例如核线性判别分析(KLDA)
1.5.1 核函数的定义
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高维空间中这个内积,即K( x, x′) =<φ( x) ⋅φ( x′) > 。那么支持向量机就不用计算复杂的非线性变换,而由这个函数 K(x, x′) 直接得到非线性变换的内积,大大简化了计算。这样的函数 K(x, x′) 称为核函数。
官方解释真的复杂
liner-classifiers-SVM的更多相关文章
- 二分类模型之logistic
liner classifiers 逻辑回归用在2分类问题上居多.它是一个非线性的回归模型,其最大的好处恰恰是可以解决二元类问题,目前在金融行业,基本都是使用Logistic回归来预判一个用户是否为好 ...
- Regression:Generalized Linear Models
作者:桂. 时间:2017-05-22 15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 本文主要是线性回归模型,包括: ...
- 壁虎书5 Support Vector Machine
SVM is capable of performing linear or nonlinear classification,regression,and even outlier detectio ...
- Generalized Linear Models
作者:桂. 时间:2017-05-22 15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 主要记录python工具包:s ...
- scikit-learn:class and function reference(看看你究竟掌握了多少。。)
http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition Reference This is t ...
- Coursera, Machine Learning, SVM
Support Vector Machine (large margin classifiers ) 1. cost function and hypothesis 下面那个紫色线就是SVM 的cos ...
- EasyPR--开发详解(6)SVM开发详解
在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...
- LibLinear(SVM包)使用说明之(一)README
转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...
- Decision Boundaries for Deep Learning and other Machine Learning classifiers
Decision Boundaries for Deep Learning and other Machine Learning classifiers H2O, one of the leading ...
- Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介
Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Le ...
随机推荐
- 题解 SP375 【QTREE - Query on a tree】
\[ \texttt{Preface} \] 这题在 \(\text{Luogu}\) 上竟然不能交 \(C++\) ,会一直 \(Waiting\) ,只能交非 \(C++\) 的语言. 所以打完了 ...
- Springboot全局事务处理
什么是全局事务 Spring Boot(Spring)事务是通过aop(aop相关术语:通知(Advice).连接点(Joinpoint).切入点(Pointcut).切面(Aspect).目标(Ta ...
- 06-HTML
今日知识 1. HTML基本语法 2. 特殊符号表示 3.总结 HTML 1. Hyper Text Mark Language 超文本标记语言 * 超文本: * 超文本是用超链接的方法,将各种不同空 ...
- js+css页面横屏
<!DOCTYPE html> <html lang='zh'> <head> <meta charset="utf-8" /> & ...
- 杭电--1009 C语言实现
思路:要用有限的猫粮得到最多的javabean,则在房间中得到的javabean比例应尽可能的大. 用一个结构体,保存每个房间中的javabean和猫粮比例和房间号,然后将结构体按比例排序,则从比例最 ...
- 微信小程序入门笔记-使用云开发(4)
1.云数据库 一.介绍 云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象.一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数 ...
- GMOJ5409.【GDOI2017模拟一试4.11】平行宇宙
https://gmoj.net/senior/#main/show/5051 Solution 首先注意到每个点有且只有一条出边,也就是说这是一个环套树(森林). 那么我们可以贪心. 首先这个森林里 ...
- html基本标签表单实现交互原理,单选框,复选框,下拉框介绍
表单是什么?表单是前端和服务器做交互的一种机制,表单收集用户输入信息,之后发送或者提交给服务器.用户在输入的信息称之为内容,内容的文本分为普通和密码型,用户通过单选框.复选框.下拉框(也就是下拉菜单) ...
- js删除对象数组
若用remove删除某个对象数组,使用for循环遍历数组中的每个对象进行删除,则必须从数组的最后一个元素倒序删除,否则每次删除都只能删除数组的一半元素,因为把索引为0的子节点删除后那么很自然的原来索引 ...
- 小白的linux学习笔记10:安装nginx和第一个网页
sudo yum install nginx sudo systemctl status nginx sudo systemctl start nginx 检查端口:netstat -tlpn sud ...