zoukankan      html  css  js  c++  java
  • 机器学习算法(五):支持向量机

    支持向量机试图寻找一个超平面将二类样本分开,所以他的学习器是一个超平面

    $$y = w^{T}x+b$$

    满足条件的超平面可能有很多,在所有满足条件的超平面,我们试图寻找一个不只能将两个类别分开,而且与该类最近样本点的间隔要尽量大,作为我们的目标超平面。

    首先我们可以假设有下面两个平行的超平面

    $$w^{T}x+b = 1$$

    $$w^{T}x+b = -1$$

    这两个平面的距离为 $\frac{2}{||w||}$,于是我们拿这样两个平面去分隔样本。如果同时满足训练点被上述连两个平面分开,并且两个平面的距离尽量大,可以得到得到下面的一个优化问题,其中这里把求最大换成了求最小。

    $$\min\limits_{w,b}\frac{1}{2}||w||^2$$

    $$s.t. y_{i}(w^{T}x_{i} +b) >= 1, i = 1,2,..., m.$$

    要求解这个问题,通过拉格朗日乘子法,为每个约束添加拉格朗日乘子$\alpha_{i} >= 0$,再根据拉格朗日对偶性,将原问题变为一个极大极小问题,如下:

    $$\max\limits_{\alpha}\min\limits_{w,b}\frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m} \alpha_{i}(1 - y_{i}(w^{T}x_{i} + b))$$

    通过对w和b求偏导为0先求上面的极小问题,可以把w,和b消去,于是得到极大问题如下:

    $$\max\limits_{\alpha}\sum\limits_{i=1}^{m} \alpha_{i} - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m} \alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}$$

    $$s.t. \sum\limits_{i=1}^{m}\alpha_{i}y_{i} = 0$$

    同时根据对偶理论,因为原始问题是不等式约束,我们的拉格朗日乘子需要满足下面的KKT公式,即下面的三个条件

    $$\alpha_{i} >= 0 $$
    $$ y_{i}f(x_{i}) - 1 >= 0 $$
    $$\alpha_{i} (y_{i}f(x_{i}) - 1) = 0 $$
    如果$y_{i}f(x_{i})=1$,称这种向量为支持向量,根据上面的条件,其对应的$\alpha_{i}$为0. 若求解出$\alpha_{i}$,可以求出相应的w和b,其中
    $w = \sum\limits_{i=1}^{m}\alpha_{i}y_{i}x_{i}$, b则可以通过支持向量代入等式$y_{i}f(x_{i})=1$算出。
     

    求解支持向量机最优解

    最经典的是SMO算法,这里只介绍这个算法的过程。SMO算法属于迭代算法,即每次增加一个训练样本,更新模型的参数向量$\alpha$
    因为$\sum\limits_{i=1}^{m}\alpha_{i}y_{i} = 0$,所以每次可以更新两个参数。选取两个参数$\alpha_{i}$和$\alpha_{j}$作为变量,其他$\alpha$固定,求出此时最优的$\alpha_{i}$和$\alpha_{j}$的更新,依次迭代。
     
     
     
     
     
     
     
  • 相关阅读:
    解决在SQLPLUS中无法使用方向键、退格键问题
    Oracle 11g R2手动配置EM(转)
    为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock
    使用CompletableFuture实现业务服务的异步调用实战代码
    SpringBoot项目从Git拉取代码并完成编译打包启动的sh自动脚本
    SpringBoot项目实现配置实时刷新功能
    (8)Flask微电影项目会员中心其他页面搭建
    (7)Flask微电影之会员中心页面搭建
    (6)Flask项目之会员注册页面
    (5)Flask项目会员登录页
  • 原文地址:https://www.cnblogs.com/learninglife/p/9228134.html
Copyright © 2011-2022 走看看