SVM现在主流的有两个方法。一个是传统的推导,计算支持向量求解的方法,一个是近几年兴起的梯度下降的方法。 梯度下降方法的核心是使用了hinge loss作为损失函数,所以最近也有人提出的深度SVM其实就是使用hinge loss的神经网络。

本文的目的是讲解传统的推导。

SVM的超平面

SVM模型的基本原理,就是寻找一个合适的超平面,把两类的样本正确分开。单个SVM只能处理二分类,多分类需要多个SVM

【什么是超平面?】

超平面就是n维度空间的n-1维度的子空间。换成人话就是2维空间中的1维度的线,三维立体空间的二维平面。



图中总共有5个超平面,那么哪一个是最好的呢?我们认为中间的那个是最好的。因为他对两侧的间隔较大。

SVM基本型

超平面我们可以用这个方程来表示:

\(\bm{w^Tx}+b=0\)

空间中任意一个点x到这个超平面的垂直距离为:

\(d = \frac{|\bm{w^Tx}+b|}{||\bm{w}||}\)

这里不得不提到一下逻辑回归,对于逻辑回归来说:



就是在超平面一侧的样本,逻辑回归给出的预测类别是1,另外一侧就是0.

但是SVM觉得这样有一些过于绝对了,所以:



不仅仅要一个样本在平面的一侧,还要在平面的这一侧足够远的地方,才能算作某一类的样本。



从图中可以看到,两条虚线之外的点,才是SVM能确定是正样本还是负样本的点。

【什么是支持向量?】

图中距离超平面最近的几个训练样本,并且这几个训练样本可以让上式的等号成立。这个点就是支持向量。

【什么是SVM的间隔】

两个不同类别的支持向量到超平面的最小距离之和。其实也就是\(\frac{2}{||w||}\)


到这里,我们可以隐隐约约的发现,寻找最优的超平面其实等价于寻找一个最大的间隔,或者说让间隔最大化。所以可以得到:

\(\max_{w,b} \frac{2}{||\bm{w}||}\)

这个的约束条件就是:让SVM给正样本的打分大于1,给负样本的打分小于-1,也就是:

简化一下这个约束条件,可以得到:

\(y_i(\bm{w^Tx_i}+b)>=1\)

一般我们都是求取最小化问题,所以把最大化max问题取倒数,变成最小化问题:

\(\min_{w,b} \frac{||\bm{w}||}{2}\)

这里为了后续的计算方便,最小化\(||w||\)等价于最小化\(||w||^2\),所以得到:

\(\min_{w,b} \frac{||\bm{w}||^2}{2}\)

总之SVM的基本型就是:

SVM求解

现在求得了基本型。现在可以来进一步优化这个最小化问题。但是首当其冲的问题便是,如何处理这个约束条件。这里用到的方法是拉格朗日乘子法。将约束条件以\(\alpha_i\)的权重加入到优化问题中,所以可以得到:

\(Loss(\bm{w},b,\bm{\alpha})=\frac{1}{2}||w||^2+\sum^m_{i=1}\alpha_i(1-y_i(w^Tx_i+b))\)

  • 这里的loss就是我们要最小化的对象;
  • 这里的m就是支持向量的数量。

为了最小化这个问题,对w和b求偏导数,可以得到:

\(w = \sum^m_{i=1}{\alpha_iy_ix_i}\)

\(0 = \sum^m_{i=1}{\alpha_iy_i}\)

然后把这两个公式代入到:

\(Loss(\bm{w},b,\bm{\alpha})=\frac{1}{2}||w||^2+\sum^m_{i=1}\alpha_i(1-y_i(w^Tx_i+b))\)

可以消掉w和b,得到:



约束条件为:



从而根据这个计算出\(\alpha_i\)的取值,然后得到w和b的取值。

【到底如何求解\(\alpha\)?】

上面说的最后一部求解alpha,都是理论可以求解,但是实际中如何做到呢?其实这里如何求解\(\alpha\)要用到另外一个条件。

就是上述过程要满足一个叫做KKT的条件(KKT具体是什么有点复杂,就不多说了):

  • 想要第三个公式成立,要么\(\alpha_i\)等于0,要么\(y_if(x_i)-1=0\).如果alpha=0,那么意味着这个样本不是支持向量,不应该对SVM超平面起到任何影响,所以是不可能的。所以只有\(y_if(x_i)-1=0\)。

加上了这个条件,我们可以求解出来\(\alpha_i\)的具体数值,然后求解w和b的数值。

假设有3个支持向量,那么就会有三个\(\alpha_1, \alpha_2, \alpha_3\) ,然后根据\(y_if(x_i)-1=0\)可以列出3个关于\(\alpha_1,\alpha_2,\alpha_3\)的三元一次方程组,然后得到唯一解。





最新文章

  1. CANopen学习——PDO
  2. 【原】iOS学习之应用之间的操作
  3. Java工具Eclipse
  4. 查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法
  5. CIO的职责、条件及价值
  6. Row_Number() OVER 的用法
  7. 产品原型设计工具 Balsamiq Mockups(转)
  8. mybatis写mapper文件注意事项(转)
  9. 如何在 CentOS 7 上安装 Redis 服务器
  10. iOS打电话、发邮件、发短信、打开浏览器
  11. android AsyncTask 详细例子(2)
  12. Git 基本工作流程
  13. The area 积分积分
  14. oracle自己主动维护
  15. hbase 问题整理
  16. ELK快速搭建日志平台
  17. java io系列17之 System.out.println("hello world")原理
  18. Centos创建ftp服务器
  19. vue框架简介
  20. 10.5Djang admin 管理工具

热门文章

  1. RabbitMQ:四、跨越集群
  2. 个人认为目前比较好用的ECMAScript(16-20)新特性
  3. 入门大数据---Flume整合Kafka
  4. swift对象存储安装
  5. 【MonogDB帮助类】
  6. BZOJ 3573米特运输
  7. 【MyBtis】获取数据插入postgresql后返回的自增id
  8. Centos7安装docker与docker-compose
  9. how to switch a different buffer from a terminal buffer
  10. openstack cinder-backup流程与源码分析