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的更多相关文章

  1. 二分类模型之logistic

    liner classifiers 逻辑回归用在2分类问题上居多.它是一个非线性的回归模型,其最大的好处恰恰是可以解决二元类问题,目前在金融行业,基本都是使用Logistic回归来预判一个用户是否为好 ...

  2. Regression:Generalized Linear Models

    作者:桂. 时间:2017-05-22  15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 本文主要是线性回归模型,包括: ...

  3. 壁虎书5 Support Vector Machine

    SVM is capable of performing linear or nonlinear classification,regression,and even outlier detectio ...

  4. Generalized Linear Models

    作者:桂. 时间:2017-05-22  15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 主要记录python工具包:s ...

  5. scikit-learn:class and function reference(看看你究竟掌握了多少。。)

    http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition Reference This is t ...

  6. Coursera, Machine Learning, SVM

    Support Vector Machine (large margin classifiers ) 1. cost function and hypothesis 下面那个紫色线就是SVM 的cos ...

  7. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  8. LibLinear(SVM包)使用说明之(一)README

    转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...

  9. 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 ...

  10. Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介

    Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Le ...

随机推荐

  1. JAVA 调用控件开发

    最近homoloCzh有个小伙伴接到一个需求说是把一个c# 写的具备扫描.调阅等功能 winfrom 影像控件嵌入到java Swing当中,让小伙伴很苦恼啊,从年前一直研究到年后,期间用了很多种方法 ...

  2. 见异思迁:K8s 部署 Nginx Ingress Controller 之 kubernetes/ingress-nginx

    前天才发现,区区一个 nginx ingress controller 竟然2个不同的实现.一个叫 kubernetes/ingress-nginx ,是由 kubernetes 社区维护的,对应的容 ...

  3. hadoop local、伪分布 模式

    local模式: 把安装包 解压到 /usr/local  下 [hadoop@master local]$ sudo tar -zxvf hadoop-2.7.3.tar.gz   创建一个软连接 ...

  4. Linux Shell 计算脚本执行过程用了多长时间

    #!/bin/bash starttime=`date +'%Y-%m-%d %H:%M:%S'` #执行程序 endtime=`date +'%Y-%m-%d %H:%M:%S'`start_sec ...

  5. redis系列-开篇

    0x0 缘起 笔者所在的公司有一款大DAU(日活)的休闲游戏.这款游戏的后端架构很简单,可以简单理解为通讯-逻辑-存储三层结构.其中存储层大量使用了redis和mysql. 虽然存量用户的增加,red ...

  6. 寒假答辩作品:Java小游戏

    目录 java入门小游戏[test] 游戏界面 前言 (可直接跳到程序介绍) 前期入门小项目 前期收获 后期自创关卡 后续 java入门小游戏[test] 游戏界面 github地址: https:/ ...

  7. C# 一个帮您理解回调函数的例子(新手必看)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 回调函数 ...

  8. JavaScript的算数,赋值,比较和逻辑运算符

    类似a=1+1这样的表达式称为运算符,js的运算符分为算数,赋值,比较和逻辑运算符:常见的算数有:+ - * / %(加减乘除,取模),比方说5/4=4*1+1:5%4=1,js算数顺序:从左往右,先 ...

  9. linux 基础入门(8) 软件安装 rpm、yum与源码安装详解

    8.软件 RPM包安装 8.1rpm安装 rpm[选项]软件包名称 主选项 -i 安装 -e卸载 -U升级 -q查找 辅助选项 -ⅴ显示过程 -h --hash 查询 -a-all查询所有安装的包 - ...

  10. opencv —— equalizeHist 直方图均衡化实现对比度增强

    直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...