机器学习(四)——SVM(2)
http://antkillerfarm.github.io/
拉格朗日对偶(续)
如果w不满足约束,也就是gi(w)>0g_i(w)>0或hi(w)≠0h_i(w)\ne 0。这时由于L\mathcal{L}函数是无约束函数,αi\alpha_i、βi\beta_i可以任意取值,因此∑ki=1αigi(w)\sum_{i=1}^k\alpha_ig_i(w)或∑li=1βihi(w)\sum_{i=1}^l\beta_ih_i(w)并没有极值,也就是说θP(w)=∞\theta_\mathcal{P}(w)=\infty。
反之,如果w满足约束,则∑ki=1αigi(w)\sum_{i=1}^k\alpha_ig_i(w)和∑li=1βihi(w)\sum_{i=1}^l\beta_ih_i(w)都为0,因此θP(w)=f(w)\theta_\mathcal{P}(w)=f(w)。
综上:
\theta_\mathcal{P}(w)=\begin{cases} f(w), & w满足约束 \\ \infty, & w不满足约束 \\ \end{cases}
我们定义:
p^*=\underset{w}{\operatorname{min}}\theta_\mathcal{P}(w)=\underset{w}{\operatorname{min}}\underset{\alpha,\beta:\alpha_i\ge 0}{\operatorname{max}}\mathcal{L}(w,\alpha,\beta)
下面我们定义对偶函数:
\theta_\mathcal{D}(w)=\underset{w}{\operatorname{min}}\mathcal{L}(w,\alpha,\beta)
这里的D\mathcal{D}代表原始优化问题的对偶优化问题。仿照原始优化问题定义如下:
d^*=\underset{\alpha,\beta:\alpha_i\ge 0}{\operatorname{max}}\theta_\mathcal{D}(w)=\underset{\alpha,\beta:\alpha_i\ge 0}{\operatorname{max}}\underset{w}{\operatorname{min}}\mathcal{L}(w,\alpha,\beta)
这里我们不加证明的给出如下公式:
d^*=\underset{\alpha,\beta:\alpha_i\ge 0}{\operatorname{max}}\underset{w}{\operatorname{min}}\mathcal{L}(w,\alpha,\beta)\le\underset{w}{\operatorname{min}}\underset{\alpha,\beta:\alpha_i\ge 0}{\operatorname{max}}\mathcal{L}(w,\alpha,\beta)=p^*
这样的对偶问题被称作拉格朗日对偶(Lagrange duality)。
KKT条件
拉格朗日对偶公式中使
p^*=d^*成立的条件,被称为KKT条件(Karush-Kuhn-Tucker conditions):
\begin{align} \frac{\partial}{\partial w_i}\mathcal{L}(w^*,\alpha^*,\beta^*) & =0,i=1,\dots,n & \\ \frac{\partial}{\partial \beta_i}\mathcal{L}(w^*,\alpha^*,\beta^*) & =0,i=1,\dots,l & \\ \alpha_i^*g_i(w^*)& =0,i=1,\dots,k & \tag{1}\\ g_i(w^*)& \le 0,i=1,\dots,k & \\ \alpha_i^* & \ge 0,i=1,\dots,k & \\ \end{align}
其中的w∗,α∗,β∗w^*,\alpha^*,\beta^*表示满足KKT条件的相应变量的取值。条件1也被称为KKT对偶互补条件(KKT dual complementarity condition)。显然这些w∗,α∗,β∗w^*,\alpha^*,\beta^*既是原始问题的解,也是对偶问题的解。
严格的说,KKT条件是非线性约束优化问题存在最优解的必要条件。这个问题的充分条件比较复杂,这里不做讨论。
注:Harold William Kuhn,1925~2014,美国数学家,普林斯顿大学教授。
Albert William Tucker,1905~1995,加拿大数学家,普林斯顿大学教授。
William Karush,1917~1997,美国数学家,加州州立大学北岭分校教授。(注意,California State University和University of California是不同的学校)
支持向量
针对最优边距分类问题,我们定义:
g_i(w)=-y^{(i)}(w^Tx^{(i)}+b)+1\le 0
由KKT对偶互补条件可知,如果αi>0\alpha_i>0,则gi(w)=0g_i(w)=0。
上图中的实线表示最大边距的分割超平面。由之前对于边距的几何意义的讨论可知,只有离该分界线最近的几个点(即图中的所示的两个x点和一个o点)才会取得约束条件的极值,即gi(w)=0g_i(w)=0。也只有这几个点的αi>0\alpha_i>0,其余点的αi=0\alpha_i=0。这样的点被称作支持向量(support vectors)。显然支持向量的数量是远远小于样本集的数量的。
为我们的问题构建拉格朗日函数如下:
\mathcal{L}(w,b,\alpha)=\frac{1}{2}\|w\|^2-\sum_{i=1}^m\alpha_i[y^{(i)}(w^Tx^{(i)}+b)-1] \tag{2}
为了求解
\theta_\mathcal{D}(\alpha)=\underset{w,b}{\operatorname{min}}\mathcal{L}(w,b,\alpha)
可得:
\nabla_w\mathcal{L}(w,b,\alpha)=w-\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}=0
即
w=\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)} \tag{3}
对b求导可得:
\frac{\partial}{\partial b}\mathcal{L}(w,b,\alpha)=\sum_{i=1}^m\alpha_iy^{(i)}=0 \tag{4}
把公式3代入公式2,可得:
\begin{align}\mathcal{L}(w,b,\alpha)&=\frac{1}{2}\|w\|^2-\sum_{i=1}^m\alpha_i[y^{(i)}(w^Tx^{(i)}+b)-1] \\&=\frac{1}{2}w^Tw-\sum_{i=1}^m\alpha_iy^{(i)}w^Tx^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\&=\frac{1}{2}w^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}w^Tx^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\&=\frac{1}{2}w^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-w^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\&=-\frac{1}{2}w^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\&=-\frac{1}{2}\left(\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}\right)^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\&=-\frac{1}{2}\sum_{i=1}^m\alpha_iy^{(i)}(x^{(i)})^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\&=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i,j=1}^my^{(i)}y^{(j)}\alpha_i\alpha_j(x^{(i)})^Tx^{(j)}-b\sum_{i=1}^m\alpha_iy^{(i)} \tag{5} \end{align}
我们定义如下内积符号⟨x,y⟩=xTy\langle x,y\rangle=x^Ty,并将公式4代入公式5可得:
\mathcal{L}(w,b,\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i,j=1}^my^{(i)}y^{(j)}\alpha_i\alpha_j\langle x^{(i)},x^{(j)}\rangle
最终我们得到如下对偶优化问题:
\begin{align} &\operatorname{max}_\alpha & & W(\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i,j=1}^my^{(i)}y^{(j)}\alpha_i\alpha_j\langle x^{(i)},x^{(j)}\rangle\\ &\operatorname{s.t.}& & \alpha_i\ge 0,i=1,\dots,m\\ & & & \sum_{i=1}^m\alpha_iy^{(i)}=0 \end{align}
这个对偶问题的求解,留在后面的章节。这里只讨论求解出α∗\alpha^*之后的情况。
首先,根据公式3可求解w∗w^*。然后
b^*=-\frac{\max_{i:y^{(i)}=-1}w^{*T}x^{(i)}+\min_{i:y^{(i)}=1}w^{*T}x^{(i)}}{2}
除此之外,我们还有:
w^Tx+b=\left(\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}\right)^Tx+b=\sum_{i=1}^m\alpha_iy^{(i)}\langle x^{(i)},x\rangle+b
在之前的讨论中,我们已经指出只有支持向量对应的αi\alpha_i才为非零值,因此:
w^Tx+b=\sum_{i\in SV}\alpha_iy^{(i)}\langle x^{(i)},x\rangle+b
从上式可以看出,在空间维数比较高的情况下,SVM(support vector machines)可以有效降低计算量。
核函数
假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维(x,x2,x3)(x,x^2,x^3) ,然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。
映射函数记作ϕ(x)\phi(x),在这个例子中
\phi(x)=\begin{bmatrix} x \\ x^2 \\ x^3 \end{bmatrix}
有的时候,我们希望将特征映射后的特征,而不是最初的特征,应用于SVM分类。这样做的情况,除了上面提到的拟合问题之外,还在于样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。如下图所示:
为此,我们给出核函数(Kernel)的形式化定义:
K(x,z)=\phi(x)^T\phi(z)
之所以是形式化定义,这主要在于我们并不利用ϕ(x)\phi(x)来计算K(x,z)K(x,z),而是给定K(x,z),来倒推ϕ(x)\phi(x),从而建立ϕ(x)\phi(x)和K(x,z)K(x,z)之间的对应关系。
例如:
\begin{align}K(x,z)&=(x^Tz)^2=\left(\sum_{i=1}^nx_iz_i\right)\left(\sum_{i=1}^nx_iz_i\right) \\&=\sum_{i=1}^n\sum_{j=1}^nx_ix_jz_iz_j=\sum_{i,j=1}^n(x_ix_j)(z_iz_j) \end{align}
根据上式可得:(这里假设n=3n=3)
\phi(x)=\begin{bmatrix} x_1x_1 \\ x_1x_2 \\ x_1x_3 \\ x_2x_1 \\ x_2x_2 \\ x_2x_3 \\ x_3x_1 \\ x_3x_2 \\ x_3x_3 \\ \end{bmatrix}
可以看出ϕ(x)\phi(x)的计算复杂度是O(n2)O(n^2),而(xTz)2(x^Tz)^2的计算复杂度是O(n)O(n)。
下面我们讨论其他几种常用核函数和它对应的ϕ(x)\phi(x)。
\begin{align}K(x,z)&=(x^Tz+c)^2 \\&=\sum_{i,j=1}^n(x_ix_j)(z_iz_j)+\sum_{i=1}^n(\sqrt{2c}x_i)(\sqrt{2c}z_i)+c^2 \end{align}
同样的:(n=3n=3)
\phi(x)=\begin{bmatrix} x_1x_1 \\ x_1x_2 \\ x_1x_3 \\ x_2x_1 \\ x_2x_2 \\ x_2x_3 \\ x_3x_1 \\ x_3x_2 \\ x_3x_3 \\ \sqrt{2c}x_1 \\ \sqrt{2c}x_2 \\ \sqrt{2c}x_3 \\ c \end{bmatrix}
更一般的,对于K(x,z)=(xTz+c)dK(x,z)=(x^Tz+c)^d,其对应的ϕ(x)\phi(x)是(n+dd)\begin{pmatrix} n+d \\ d \\ \end{pmatrix}维向量。
我们也可以从另外的角度观察K(x,z)=ϕ(x)Tϕ(z)K(x,z)=\phi(x)^T\phi(z)。从内积的几何意义来看,如果ϕ(x)\phi(x)和ϕ(z)\phi(z)夹角越小,则K(x,z)K(x,z)的值越大;反之,如果ϕ(x)\phi(x)和ϕ(z)\phi(z)的夹角越接近正交,则K(x,z)K(x,z)的值越小。因此,K(x,z)K(x,z)也叫做ϕ(x)\phi(x)和ϕ(z)\phi(z)的余弦相似度。
讨论另一个核函数:
K(x,z)=\exp\left(-\frac{\|x-z\|^2}{2\sigma^2}\right)
这个核函数被称为高斯核函数(Gaussian kernel),对应的ϕ(x)\phi(x)是个无限维的向量。
注:(a+b)n(a+b)^n是个p为0.5的二项分布,由棣莫佛-拉普拉斯定理(de Moivre–Laplace theorem)可知,当n→∞n\to\infty时,它的极限是正态分布。
核函数的有效性
如果对于给定的核函数K,存在一个特征映射ϕ\phi,使得K(x,z)=ϕ(x)Tϕ(z)K(x,z)=\phi(x)^T\phi(z),则称K为有效核函数。
我们首先假设K为有效核函数,来看看它有什么性质。假设有m个样本{x(1),…,x(m)}\{x^{(1)},\dots,x^{(m)}\},我们定义m×mm\times m维的矩阵k:Kij=K(xi,xj)K_{ij}=K(x_i,x_j)。这个矩阵被称为核矩阵(Kernel matrix)。
K_{ij}=K(x_i,x_j)=\phi(x^{(i)})^T\phi(x^{(j)})=\phi(x^{(j)})^T\phi(x^{(i)})=K(x_j,x_i)=K_{ji}
如果我们用ϕk(x)\phi_k(x)表示ϕ(x)\phi(x)第k个元素的话,则对于任意向量z:
\begin{align}z^TKz&=\sum_i\sum_jz_iK_{ij}z_j=\sum_i\sum_jz_i\phi(x^{(i)})^T\phi(x^{(j)})z_j \\&=\sum_i\sum_jz_i\sum_k\phi_k(x^{(i)})\phi_k(x^{(j)})z_j=\sum_k\sum_i\sum_jz_i\phi_k(x^{(i)})\phi_k(x^{(j)})z_j \\&=\sum_k\left(\sum_iz_i\phi_k(x^{(i)})\right)^2\ge 0 \end{align}
即K矩阵是半正定矩阵。事实上,K矩阵是对称半正定矩阵,不仅是K函数有效的必要条件,也是它的充分条件。相关的证明是由James Mercer给出的,被称为Mercer定理(Mercer Theorem)。
注:James Mercer,1883-1932,英国数学家,英国皇家学会会员,毕业于剑桥大学。曾服役于英国皇家海军,参加了日德兰海战。
Mercer定理给出了不用找到ϕ(x)\phi(x),而判定K(x,z)K(x,z)是否有效的方法。因此寻找ϕ(x)\phi(x)的步骤就可以跳过了,直接使用K(x,z)K(x,z)替换上面公式中的⟨x,z⟩\langle x,z\rangle即可。例如:
w^Tx+b=\sum_{i\in SV}\alpha_iy^{(i)}\langle x^{(i)},x\rangle+b=\sum_{i\in SV}\alpha_iy^{(i)}K(x^{(i)},x)+b \tag{6}
核函数不仅仅用在SVM上,但凡在一个算法中出现了⟨x,z⟩\langle x,z\rangle,我们都可以使用K(x,z)K(x,z)去替换,这可以很好地改善我们算法的效率。因此,核函数更多的被看作是一种技巧而非理论(kernel trick)。
规则化和不可分情况处理
我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。
上面的右图中可以看到一个离群点(可能是噪声),它会造成超平面的移动,从而导致边距缩小,可见以前的模型对噪声非常敏感。再有甚者,如果离群点在另外一个类中,那么这时候就是线性不可分的了。
机器学习(四)——SVM(2)相关推荐
- 【机器学习】SVM支持向量机模型
本站原创文章,转载请说明来自<老饼讲解-机器学习>ml.bbbdata.com 目录 一. SVM的目标和思想 1.1 SVM硬间隔模型的原始目的 1.2 SVM的直接目标 1.3 什么 ...
- 百面机器学习—4.SVM模型基础知识
文章目录 引言 一.间隔与支持向量 1.什么是线性可分? 2.什么是超平面?什么是最大间隔超平面? 3.什么是支撑向量? 4.SVM最优化问题 二.对偶问题 1.约束条件下的目标函数如何求解最优化问题 ...
- 机器学习四剑客1——Numpy
求业之精,别无他法,日专而已矣! 一.概论 1.机器学习是什么 2.机器学习做什么 3.机器学习基本概念 二.机器学习第一步:数据分析 1.Python被大量应用在数据挖掘和深度学习领域: 2.其中使 ...
- 【机器学习】SVM学习(三):线性分类器的求解
[机器学习]SVM学习(三):线性分类器的求解 2016-10-10 19:56 239人阅读 评论(0) 收藏 举报 本文章已收录于: 机器学习知识库 分类: 机器学习(37) 目录(?)[+ ...
- Scikit-Learn 机器学习笔记 -- SVM
Scikit-Learn 机器学习笔记 – SVM 参考文档: handson-ml import numpy as np# 加载鸢尾花数据集 def load_dataset():from skle ...
- 【机器学习】SVM理论与python实践系列
理论部分: <机器学习--支持向量机SVM之线性模型> <机器学习--支持向量机SVM之非线性模型低维到高维映射> <机器学习--支持向量机SVM之非线性模型原问题与对偶 ...
- 系统学习机器学习之SVM(三)--Liblinear,LibSVM使用整理,总结
1.Libsvm与Liblinear区别,简单源码剖析. http://blog.csdn.net/zhzhl202/article/details/7438160 http://blog.csdn. ...
- python机器交易_[原创]Python 机器学习之 SVM 预测买卖 -- 基于 BotVS 量化平台
Python 机器学习之 SVM 预测买卖 Python入门简单策略 sklearn 机器学习库的使用 回测系统自带的库有 numpy pandas TA-Lib scipy statsmodels ...
- 机器学习四种调参方法总结
介绍 维基百科上说,"Hyperparameter optimization或tuning是为学习算法选择一组最优的hyperparameters的问题". 本文转载于收藏 | 机 ...
- 系统学习机器学习之SVM(四)--SVM算法总结
这边文章介绍的相当浅显易懂,写的很好.算是SVM总结吧. 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 ...
最新文章
- php 批量导出excel文件,PHPEXCEL批量导出
- Oracle 12.2安装示例schema
- 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
- Altium Designer旋转PCB、PCB中绕某点旋转
- Document类型知识大全
- NSObject协议中方法:description 和 debugDescription
- dwr 写的小程序,配置
- linux 目录定义,linux根目录定义
- C++:连接MySQL
- System.Web.HttpException: 无法验证数据解决办法
- mysql 列 随机数_MySQL的指定范围随机数函数rand()的使用技巧
- 2.04 对字母数字的混合排序
- C#winform可视化(当主窗体不能拖动时)
- WindowManager添加一个悬浮的Window
- Silverlight学习笔记1:浏览器外运行(Out Of Browser)及更新检查
- 配置 Ubuntu 字符界面启动
- JAVA环境变量配置方法(Windows)
- 编程猫fiddler插件
- selenium 确实是好东西,使用selenium-server 加快执行速度,对速度有很大提升,同时可以拆分服务,进行集群部署。
- Falsy Bouncer 过滤数组假值 Array.filter()方法
热门文章
- My favorite books
- 系统要不要更新_手机经常弹出“系统更新”,到底要不要更新?用户:后悔已来不及...
- element table 表格设置max-height 没有出现滚动条,多渲染了一列。
- mysql中的类型与java_mysql与java数据类型对应关系
- matlab神经网络每次相差大,GA-BP网络为什么每次训练的结果相差很大呢?
- html5添加渐变边框效果,《CSS3揭秘》上(边框,投影,渐变,条纹效果,蚂蚁行军)...
- 根据按钮的状态显示hover
- linux设置登录次多过多锁定时间
- Pokémon Go火遍全球,开启全民捕捉小精灵的时代
- MMJ-Spring Boot(Java)获取小程序Openid