1. 了解SVM

1. Logistic regression回顾

Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic function(或称作sigmoid function)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。

假设函数

 其中$x$是$n$维特征向量,函数$g$就是logistic function。
    而的图像是
 

可以看到,将输出从无穷映射到了(0,1)。

而假设函数就是特征属于y=1的概率。

 
 
 

从而,当我们要判别一个新来的特征属于哪个类时,只需求 $h_θ(x)$ 即可,若$h_θ(x)$大于0.5就是y=1的类,反之属于y=0类。

此外,$h_θ(x)$ 只和$θ^Tx$有关,$θ^Tx > 0$,那么$h_θ(x) > 0.5$,而$g(z)$只是用来映射,真实的类别决定权还是在于$θ^Tx$。

再者,当$θ^Tx \gg 0$时,$h_θ(x)=1$,反之$h_θ(x)=0$。如果我们只从$θ^Tx$出发,希望模型达到的目标就是让训练数据中y=1的特征$θ^Tx \gg 0$,而是y=0的特征$θ^Tx \ll 0$。Logistic回归就是要学习得到$θ$,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。

接下来,尝试把logistic regression做个变形。首先,将使用的结果标签$y = 0$和$y = 1$替换为$y = -1,y = 1$,然后将 $θ^Tx=θ_0+θ_1x_1+...+θ_nx_n,(x_0=1)$ 中的 $θ_0$替换为$b$,最后将后面的$θ_1x_1+θ_2x_2+...+θ_nx_n$替换$W^Tx$。如此,则有了$θ^Tx=W^Tx+b$。

也就是说除了y由y=0变为y=-1外,线性分类函数跟logistic regression 的形式化表示$h_θ(x)=g(θ^Tx)=g(W^Tx+b)$没区别。

2. 间隔与支持向量

给定训练样本集$D={(x_1,y_1), (x_2, y_2),...,(x_m, y_m)}$, $y_i\in{-1, +1}$, 分类学习最基本的想法就是基于训练集$D$在样本空间中找到一个划分超平面,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,如下图:

直观上来看,应该去找位于两类训练样本“正中间”的划分超平面,即上图中最粗的那条,因为该划分超平面对训练样本局部扰动的“容忍”性最好。例如,由于训练集的局限性或噪声的因素,训练集外的样本可能比上图中训练样本更接近两个类的分个界,这将使许多划分超平面出现错误,而中间最粗的超平面受影响最小。换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的范化能力最强。

在样本空间中,划分超平面可通过如下线性方程来描述:

$W^Tx+b = 0$

其中$W=(w_1;w_2;...;w_K)$为超平面法向量,决定了超平面的方向;$b$为位移项,决定了超平面与原点之间的距离。在超平面确定的情况下,$\lvert{W^Tx+b}\rvert$能够表示点$x$距离超平面的远近,而通过观察 $W^Tx+b$的符号与类标记$y$的符号是否一致可判断分类是否正确。于是引出了“函数间隔”的概念:

$\hat{\gamma} = \lvert{W^Tx+b}\rvert = y*(W^Tx+b)$

但这样定义间隔有问题,即如果我们成比例改变$(W,b)$,函数间隔值也会改变,所以加上约束条件引入真正的间隔--“几何间隔”

给定一个超平面 $W^Tx+b=0$, 样本空间中任意点$x$到超平面$(W,b)$的距离(几何间隔)为:

$\gamma=\frac{\hat{\gamma}}{\lVert{W}\rVert}=\frac{\lvert{W^Tx+b}\rvert}{\lVert{W}\rVert}=\frac{y*(W^Tx+b)}{\lVert{W}\rVert}$

而超平面(w,b)关于D中所有样本点(xi,yi)的函数间隔最小值(其中,x是特征,y是结果标签,i表示第i个样本),便为超平面(w, b)关于训练数据集D的几何间隔:

$\gamma= \min \gamma_i$

假设超平面$(W,b)$能将训练样本正确分类,即对于$(x_i, y_i)\in{D}$, 若 $y_i= +1$ 则有 $W^Tx_i+b>0$;若 $y_i= -1$ 则有 $W^Tx_i+b<0$. 我们令:

$W^Tx_i+b \ge +1, y_i = +1;$
$W^Tx_i+b \le -1, y_i = -1.$

这里也就是令这个超平面关于训练集的函数间隔为

如下图所示,距离超平面最近的这几个训练样本使得上式的等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为

$\gamma = \frac{2}{\lVert{W}\rVert}$

它被称为“间隔”。

而对于一个数据集进行分类,当超平面离数据集的“间隔”越大,分类确信度也越大。所有,为例获得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值,即

$\max \limits_{W,b}\frac{2}{\lVert{W}\rVert}$

s.t. $y_i(W^Tx_i+b) \ge 1, i=1,2,...m.$

显然,为了最大化间隔,仅需最大化 ${\lVert{W}\rVert}^{-1}$. 这等价于最小化 ${\lVert{W}\rVert}^{2}$, 于是,上式可重写为:

 

$\min \limits_{W,b}\frac{1}{2}{\lVert{W}\rVert}^{2}$

s.t. $y_i(W^Tx_i+b) \ge 1, i=1,2,...m.$

这里的意思就是找到合适的$W$和$b$,使得每个样本都能正确分类且每个样本到这个超平面的“函数间隔”都大于1的前提下,能最小化${\lVert{W}\rVert}^{2}$。到这里为止,这就是支持向量机(Support Vector Machine)的基本型。

2. 对偶问题

我们希望求解 1 式来得到最大间隔划分超平面所对应的模型:

  $f(x) = W^Tx + b$

对 1 式使用拉格朗日乘子法可得到其“对偶问题”,具体来说,对 1 式的每个约束添加拉格朗日乘子 $\alpha_i \ge 0$,则该问题的拉格朗日函数可写成:

  $L(W,b,\alpha) = \frac{1}{2}{\lVert{W}\rVert}^{2} + \sum_{i=1}^{m}\alpha_i(1-y_i(W^Tx_i + b))$ 3

其中$\alpha=(\alpha_1;\alpha_2;...;\alpha_m)$。令$L(W,b,\alpha)$对$W$和$b$的偏导为零可得:

  $W$=\sum_{i=1}^{m}\alpha_iy_ix_i \  ,$
  $0=\sum_{i=1}^{m}\alpha_iy_i \ .$

带入公式 2 ,得到公式 1 的对偶问题:

 

$\max \limits_{\alpha}\sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j$

s.t. $\sum_{i=1}^{m}\alpha_iy_i =0, \alpha_i \ge 0, i=1,2,...m.$

解出$\alpha$后,求出$W$和$b$即可得到模型:

$f(x)=W^Tx+b$

$=\sum_{i=1}^{m}\alpha_iy_ix_i^Tx+b$

7

如何确定偏移项$b$呢,注意到对任意支持向量$(x_s,y_s)都有$y_sf(x_s)=1$,即:

  $y_s(\sum_{i\in S}\alpha_iy_ix_i^Tx+b)=1$ 8

其中$S=\{i|\alpha > 0, i=1,2,...,m\}$为所以支持向量的下标集。实际中使用所有支持向量求解的平均值求$b$:

  $b = \frac{1}{\lvert{S}\rvert}\sum_{s\in S}(y_s-\sum_{i\in S}\alpha_iy_ix_i^Tx)$ 9

2. 核函数

前面的讨论中,我们假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。 然而在实际任务中,原始样本空间也许并不存在一个能正确划分两类样本的超平面。

对这样的问题,我们可以将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内变得线性可分。幸运的是,如果原始空间是有限维,即特征数有限,那么一定存在一个高维特征空间使得样本可分。

令$Φ(x)$表示将$x$映射后的特征向量,于是,在特征空间中划分超平面所对应的模型可表示为:

  $f(x) = W^T\phi(x)+b$ 10

设想存在这样一个函数:

  $k(x_i,x_j)\ =\ <\phi(x_i),\phi(x_j)> \ =\ \phi(x_i)^T\phi(x_j)$ 11

求解后得到:

 

$f(x) = W^T\phi(x)+b$
$=\sum_{i=1}^{m}\alpha_iy_i\phi(x_i)^T\phi(x)+b$
$=\sum_{i=1}^{m}\alpha_iy_ik(x,x_i)+b$

12

这里的$k(\bullet,\bullet)$就是“核函数”。

常见的核函数有:

高斯核又称为RBF径向基核。

参考:

周志华 机器学习

http://blog.csdn.net/v_july_v/article/details/7624837

5. support vector machine的更多相关文章

  1. 6. support vector machine

    1. 了解SVM 1. Logistic regression 与SVM超平面 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别( ...

  2. 使用Support Vector Machine

    使用svm(Support Vector Machine)中要获得好的分类器,最重要的是要选对kernel. 常见的svm kernel包括linear kernel, Gaussian kernel ...

  3. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  4. Support Vector Machine (2) : Sequential Minimal Optimization

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  5. Support Vector Machine (1) : 简单SVM原理

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  6. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  7. A glimpse of Support Vector Machine

    支持向量机(support vector machine, 以下简称svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本篇希望在正篇提供一个svm的简明阐述,附录则提 ...

  8. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  9. 机器学习技法:01 Linear Support Vector Machine

    Roadmap Course Introduction Large-Margin Separating Hyperplane Standard Large-Margin Problem Support ...

  10. 支持向量机(Support Vector Machine,SVM)—— 线性SVM

      支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...

随机推荐

  1. display:grid

    <!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" ...

  2. 构造函数constructor 与析构函数destructor(四)

    拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X ...

  3. 流程控制 if while for 已及数字类型 进制转换

    一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...

  4. kbmMWEncodeEscapes 中汉字编码的问题及解决办法

    kbmMWEncodeEscapes 是kbmmw 里面的一个函数,用来对URL 中的汉字进行编码,例如 http://127.0.0.1/getname?name=春节,由于'春节'是汉字,浏览器向 ...

  5. 使用vbs给PPT(包括公式)去背景

    在 视图—>宏 内新建宏 '终极版 Sub ReColor() Dim sld As Slide Dim sh As Shape For Each sld In ActivePresentati ...

  6. Selenium2+python自动化之读取Excel数据(xlrd)

    前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...

  7. 聚合函数、group by

    聚合函数: sql语言中一种特殊的函数:聚合函数,SUM, COUNT, MAX, MIN, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.SELECT SUM(populati ...

  8. KNN和K-Means的区别

    KNN和K-Means的区别 KNN K-Means 1.KNN是分类算法 2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 1.K-Means是聚类算法 2.非监督学习 3 ...

  9. 【实战TFS】【QQ群】了解别人是如何使用TFS的

    长时间在这个QQ群里面混,了解到其他人是如何使用TFS系统的,也与网友们一起探讨,共同提高,还有分享的大量资料文档. 推荐一下:):)

  10. Javascript设计模式理论与实战:状态模式

    在软件开发中,很大部分时候就是操作数据,而不同数据下展示的结果我们将其抽象出来称为状态,我们平时开发时本质上就是对应用程序的各种状态进行切换并作出相应处理.状态模式就是一种适合多种状态场景下的设计模式 ...