zoukankan      html  css  js  c++  java
  • 5. 支持向量机(SVM)软间隔

    1. 感知机原理(Perceptron)

    2. 感知机(Perceptron)基本形式和对偶形式实现

    3. 支持向量机(SVM)拉格朗日对偶性(KKT)

    4. 支持向量机(SVM)原理

    5. 支持向量机(SVM)软间隔

    6. 支持向量机(SVM)核函数

    1. 前言

    在前一篇支持向量机(SVM)原理中,我们对线性可分SVM的模型和损失函数优化做了总结。但是大家有没发现,之前的文章介绍的支持向量机会无法处理一些情况,比如在有0,1两类,在0类的中间出现了几个1类的异常点,这样的话要之前最原始的SVM绝对分离两个类基本是不可能的了。本文对支持向量机做一个推广,允许超平面能够错分一些点,来达到能分离异常点。

    2. SVM异常点问题

    有时候本来数据的确是可分的,也就是说可以用线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离的,可以由于一个橙色和一个蓝色的异常点导致我们没法按照上一篇线性支持向量机中的方法来分类。

    image

    另外一种情况没有这么糟糕到不可分,但是会严重影响我们模型的泛化预测效果,比如下图,本来如果我们不考虑异常点,SVM的超平面应该是下图中的红色线所示,但是由于有一个蓝色的异常点,导致我们学习到的超平面是下图中的粗虚线所示,这样会严重影响我们的分类模型预测效果。

    image

    3. 线性分类SVM的软间隔最大化

    前一篇的SVM由于是绝对分离类别,我们可以称之为硬间隔SVM。公式为

    [min;; frac{1}{2}||w||_2^2 ;; s.t ;; y_i(w^Tx_i + b) geq 1 (i =1,2,...m) ]

    本文介绍的软间隔是:SVM对训练集里面的每个样本(xi,yi)引入了一个松弛变量(xi_igeq0),使函数间隔加上松弛变量大于等于1,也就是说条件变量改为如下:

    [y_i(wullet x_i +b) geq 1- xi_i ]

    加入松弛变量(xi_i)后,损失函数就需要改写为

    [min;; frac{1}{2}||w||_2^2 +Csumlimits_{i=1}^{m}xi_i ]

    [s.t. ;; y_i(w^Tx_i + b) geq 1 - xi_i ;;(i =1,2,...m) ]

    [xi_i geq 0 ;;(i =1,2,...m) ]

    这里,(C>0)为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。(C)越大,对误分类的惩罚越大,(C)越小,对误分类的惩罚越小

    也就是说,我们希望(frac{1}{2}||w||^2_2)尽量小,误分类的点尽可能的少。(C)是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。

    这个目标函数的优化和上一篇的线性可分SVM的优化方式类似,我们下面就来看看怎么对线性分类SVM的软间隔最大化来进行学习优化。

    4. 拉格朗日对偶化

    我们将软间隔最大化的约束问题用拉格朗日函数转化为无约束问题公司如下:

    [L(w,b,xi,alpha,mu) = frac{1}{2}||w||_2^2 +Csumlimits_{i=1}^{m}xi_i - sumlimits_{i=1}^{m}alpha_i[y_i(w^Tx_i + b) - 1 + xi_i] - sumlimits_{i=1}^{m}mu_ixi_i ]

    我们现在要优化的目标函数是:

    [underbrace{min}_{w,b,xi}; underbrace{max}_{alpha_i geq 0, mu_i geq 0,} L(w,b,alpha, xi,mu) ]

    这个优化目标也满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解如下:

    [underbrace{max}_{alpha_i geq 0, mu_i geq 0,} ; underbrace{min}_{w,b,xi}; L(w,b,alpha, xi,mu) ]

    最后求出的结果很干净,和之前的结果也非常像,如下:

    [underbrace{ min }_{alpha} frac{1}{2}sumlimits_{i=1,j=1}^{m}alpha_ialpha_jy_iy_j(x_i ullet x_j) - sumlimits_{i=1}^{m}alpha_i ]

    [s.t. ; sumlimits_{i=1}^{m}alpha_iy_i = 0 ]

    [0 leq alpha_i leq C ]

    这就是软间隔最大化时的线性可分SVM的优化目标形式,和上一篇的硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件(0≤alpha_i≤C)。我们依然可以通过SMO算法来求上式极小化时对应的(alpha)向量就可以求出(w)(b)了。

    5. Hinge损失函数

    我们从另一个角度来解读软间隔的损失函数,表达式如下:

    [underbrace{ min}_{w, b}[1-y_i(w ullet x + b)]_{+} + lambda ||w||_2^2 ]

    其中(L(y(w ullet x + b)) = [1-y_i(w ullet x + b)]_{+})称为合页损失函数(hinge loss function),下标+表示为:

    [[z]_{+}= egin{cases} z & {z >0}\ 0& {zleq 0} end{cases} ]

    也就是说,如果点被正确分类,且函数间隔大于1,损失是0,否则损失是(1-y(w ullet x + b)),如下图中的绿线。我们在下图还可以看出其他各种模型损失和函数间隔的关系:对于0-1损失函数,如果正确分类,损失是0,误分类损失1, 如下图黑线,可见0-1损失函数是不可导的。对于感知机模型,感知机的损失函数是([-y_i(w ullet x + b)]_{+}),这样当样本被正确分类时,损失是0,误分类时,损失是(-y_i(w ullet x + b)),如下图紫线。对于逻辑回归之类和最大熵模型对应的对数损失,损失函数是(log[1+exp(-y(w ullet x + b))]), 如下图红线所示。

    image

    6. 总结

    线性可分SVM通过软间隔最大化,可以解决线性数据集带有异常点时的分类处理,但是现实生活中的确有很多数据不是线性可分的,这些线性不可分的数据也不是去掉异常点就能处理这么简单。那么SVM怎么能处理中这样的情况呢?我们在下一篇就来讨论线性不可分SVM和核函数的原理。

  • 相关阅读:
    Linux系统开发笔记
    软件测试 | Chrome 浏览器+Postman还能这样做接口测试 ?
    yum 在线安装 nginx
    画图3D Paint 3D工作区黑屏
    InfluxDB 存储结构、读、写
    纯前端保存下载文件到本地
    umijs 配置的一些用法和解释 记录
    mongodb在双活(主备)机房的部署方案和切换方案设计
    mongodb oplog详解和格式分析
    麒麟操作系统上安装docker并加载镜像
  • 原文地址:https://www.cnblogs.com/huangyc/p/9938306.html
Copyright © 2011-2022 走看看