Why Slack?

为了处理异常值(outlier).

前面推导的svm形式, 是要求严格地全部分对, 基于该情况下, 在margin 的边界线 线上的点, 只能是支持向量.

\(min_w \ \frac {1}{2} ||w||^2 \\ s.t. \ y_i(w^Tx_i + b) >= 1\)

而现实生活中, 往往数据是没有那么完美. 于是这样严格找到的 margin 可能就因为异常值 而 不是最优的(非最优就是没有 很好地 将2波数据给分开).则相应的处理方式,就是适当允许一些点(异常点)在 margin 之间.

更进一步说明该问题的本质, 就是关于线性不可分.(比如有些点完全分布在另一边去了, "身在汉营,心在曹", 幽默一下). 这时候, 必须要放松限制了呀, 不然就没有办法找到 margin 了. 另外一种方式就是大家谈烂大街的核变换(Kernel trick), 升维到高维空间就能分开了.

还是先回到 slack.

Slack svm 数学模型

感觉我现在是越来越喜欢数学语言,数学模型了, 虽然绝大多数时候都是看不懂的. 其明显的好处是能将自然语言化的想法,通过符号化, 逻辑性的语言来表示, 这种好处, 我真正认识到它的美妙, 有3次高峰体检, 初一 那年, 通过三角形相似的方法,推导出了勾股定律; 高三那年, 完全自然语言角度引入, 然后从零推导椭圆方程;

其实中间, 还有很多的美妙之处, 不过都被应试教育而自我怀疑和扼杀了, 更流行分数排名才是优秀, 然后就放弃了, 事实证明, 我菜是有原因的, 因为一开始我就已经自我放弃了.

真正再次唤醒是大三, 有门课是<>, 老师卢大神, 完全将财务理论展开来讲, 真的是把 高数, 线代, 概率论, 数理统计.. 全部整了一遍, 还让我们看顶级文献... 那一刻我才真正明白, 要真正认识我们的世界, 就是要从现象->理论->现象->理论, 这样的一个循环的认识过程. 这个过程艰难而有美妙.

艰难可能是生活工作上的现实问题很拮据吧,目前. 美妙..不说了吧, 看到知乎上有句话很贴心: "你懂得越多, 懂你的越少.

算是一种境界吧, 嗯, 终极来讲, 借用"老子''所追求的道境: "致虚极, 守静笃, 万物并作, 吾以观复".

不扯了, 还是进入正题. 关于 Primal 问题:

\(min_{w,b} = \frac {1}{2} ||w||^2 + C \sum \limits _{i=1}^n \xi_i \\ s.t.\)

$  y_i(w^Tx_i + b) >= 1- \xi_i \ \xi_i >= 0$

  • \(\xi_i\) 表示放松限制, 但又不能太放松, 不然算法就失去了意义.
  • 将松弛限定在 min 中, C 是超参数, 通过调整C的大小,从而调整放松程度

Dual 问题:

\(max_w \ W(a) = \sum \limits _{i=1}^n a_i - \frac {1}{2} \sum \limits_{i=1}^n \sum \limits_{j=1}^n y_i y_j a_i a_j <x_i, x_j> \\ s.t.\)

\(0<= a_i \le C \\ \sum \limits_{i=1}^n a_i y_i = 0\)

推导带松弛的 svm 的 lagrange (跟之前是一样的)

\(L(w,b,a, \xi, \lambda) = \frac {1}{2}w^Tw + C \sum \limits_i \xi_i + \sum\limits_j a_i(1- \xi_i - y_i(w^Tx_i + b)) - \sum \limits _i \lambda_i \xi _i\)

同样分别对 w, b, xi 求偏导, 令其=0:

  • \(\nabla _w = 0 = w - \sum \limits _i a_i y_i x_i \rightarrow \ w = \sum a_i y_i x_i\)
  • \(\nabla _b= 0 \rightarrow \ \sum \limits _i a_i y_i =0\)
  • $\nabla _\xi = 0  \rightarrow  C - a_i - \lambda_i = 0 $

将其分别反代回 \(L(w,b,a,\xi, \lambda)\):

\(L(a, \xi, \lambda) = \sum _i a_i - \frac{1}{2} \sum_i \sum_j a_i a_j y_i y_j <x_i, x_j> + \sum_i \xi_i (C-a_i)\)

对偶也就是:

\(max_a \sum _i a_i - \frac{1}{2} \sum_i \sum_j a_i a_j y_i y_j \ x^Tx \\ s.t\)

\(\sum_i a_i y_i = 0 \\ C-a_i - \lambda_i = 0\)

\(\lambda\) 是拉格朗日乘子,因此 \(\lambda \ge 0\) , 对于 \(C - a_i - \lambda_i = 0\) 即 \(a_i + \lambda_i = C\) 也可改写为:

\(a_i <= C\)

决策:

\(h(x) = sign(w^tx + b)\) , 不用关心值大小, 值关注最中的 正负号.

  • 带松弛, 其实就是 a 同 C 关联上了呀
  • \(\sum \limits_{i=1}^n a_i y_i = 0\) 这个complementary 真的是太重要了, 都在利用它

此时的 Dual 的KTT 条件下的 complementarity 条件为:

  • \(a_i = 0, \ \rightarrow y_i(w^Tx_i + b) \ge 1\)
  • \(a_i = C, \ \rightarrow y_i(w^Tx_i + b) \le 1\)
  • \(0 \le a_i \le C, \ \rightarrow y_i(w^Tx_i + b) \ge 1\)

从 Hinge Loss 来理解 slack

这样做是为了方便计算求导, 直接在原问题上整, 不同转为Dual.

回顾之前定义松弛变量: \(\xi\)

\(y_i (w^Tx_i + b) \ge 1- \xi_i , \ 其中 \xi_i \ge 0)\)

得出:

\(\xi _i \ge 1- y_i (w^Tx_i + b)\)

合并一波(两个大于, 初中学过, 同大取大), 即:

\(\xi _i = max(0, 1-y_i(w^Tx_i + b))\)

怎么来理解呢, 令 \(z = y_i(w^Tx_i + b)\) 则得到:

\(\xi_i = max (0, 1-z)\) 画出来就是一个向右下方"弯曲的凸函数", 不一定凸哈.

\(\xi _i\) 当 z >= 1的时候, 取到0

当 z < 1 的时候, 是递增的

与逻辑回归的 Loss 相比

  • LR 即便是正确分类, 也要计入 Loss, (LR 始终保持一个怀疑的态度, 对异常值非常敏感)

  • Hinge 则不同, 会更有容忍度, 只要达到线, 就认为是正确 (对异常值不敏感)

Hinge Loss 的特点

\(\xi_i = max (0, 1-z), 其中 \ z = y_i(w^Tx_i + b\)

  • Convex (凸函数), 比较容易优化
  • 在 z<0 的部分, 梯度较小, 对错误分类的容错较小
  • 在 z >= 1 的部分值为0, 只要分类正确,就不用再优化了.(对异常值不敏感)

  • 在z = 0 不可导, 可以分段求导
  • 优化时, 只有支持向量会参与确定分界线, 支持向量远小于训练样本

总体来说, 会发现 svm 的美妙在于, 对异常值不敏感, KKT条件也降低了运算复杂度, 这我感觉算是其流行的一大原因了吧.

理解 SVM 的优化函数

算是再对SVM的dual进行强化认知一波, 主要是为了理解哪个 Lagrange 公式, 因为后面的 Kernel 技巧 和 求解的SMO 是要基于如下的公式的.(ps: 不理解公式,根本写不出代码来哦)

\(max_a \sum _i a_i - \frac{1}{2} \sum_i \sum_j a_i a_j y_i y_j \ x^Tx \\ s.t\)

\(\sum_i a_i y_i = 0 \\ C-a_i - \lambda_i = 0\)

理解

  • \(y_i y_j\) 表示 if 两个样本如果属于同一类别(y 只能取 +1 或 -1) 值就增大, else 值减少
  • \(x_i ^T x_j\) 表示两个样本(行)之间的相似度, 因其 \(= ||x_i|| ||x_j||cos \theta\), 很相似的话就意味着夹角很小, 内积接近最大 , 从物理的做功 来理解内积是很形象的哦.
  • \(\sum \limits _i ^n a_i y_i = 0\) 表示不同数据点的权重 a_i 是不一样的(比如向量的点的权重高), 但不同类别的权重是一样的

ML-软间隔(slack)的 SVM的更多相关文章

  1. SVM核函数与软间隔

    核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...

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

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  3. 支持向量机(SVM)的推导(线性SVM、软间隔SVM、Kernel Trick)

    线性可分支持向量机 给定线性可分的训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习到的分离超平面为 \[w^{\ast }x+b^{\ast }=0\] 以及相应的决策函数 \[f\le ...

  4. 支持向量机 (二): 软间隔 svm 与 核函数

    软间隔最大化(线性不可分类svm) 上一篇求解出来的间隔被称为 "硬间隔(hard margin)",其可以将所有样本点划分正确且都在间隔边界之外,即所有样本点都满足 \(y_{i ...

  5. 线性可分支持向量机与软间隔最大化--SVM(2)

    线性可分支持向量机与软间隔最大化--SVM 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 我们说可以通过间隔最 ...

  6. 机器学习,详解SVM软间隔与对偶问题

    今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型. 我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\).在硬间隔模型当中,样本 ...

  7. 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)

    SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...

  8. SVM中的软间隔最大化与硬间隔最大化

    参考文献:https://blog.csdn.net/Dominic_S/article/details/83002153 1.硬间隔最大化 对于以上的KKT条件可以看出,对于任意的训练样本总有ai= ...

  9. 软间隔分类——SVM

    引入:1. 数据线性不可分:2. 映射到高维依然不是线性可分3. 出现噪声.如图: 对原始问题变形得到#2: 进行拉格朗日转换: 其中α和r是拉格朗日因子,均有不小于0的约束.按照之前的对偶问题的推导 ...

随机推荐

  1. Console工程下如何不显示控制台黑窗口只显示Windows窗口

    原文地址https://www.cnblogs.com/smiler/p/4575052.html OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其 ...

  2. ESP8266 SDK开发: 测试下诱人的程序

    前言 这一节测试一下诱人的程序 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, APP显示ESP8266采集的温湿度数据. 简而言 ...

  3. 网络协议 7 - UDP 协议

    网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下.     其实,讲到 UDP,就少不了 TCP.这俩 ...

  4. haproxy 配置文件详解 之 backend

    配置示例: backend htmpool mode http option redispatch option abortonclose balance static-rr cookie SESSI ...

  5. app内嵌h5分享到小程序分享功能

    if (this.GLOBAL.env !== 'production') { try { window.JSBridge.shareMiniProgramToWx('https://www.lexi ...

  6. 写代码注意了,打死都不要用 User 这个单词

    阅读本文大概需要 4 分钟. 原文:http://t.cn/Eau2d0h 译文:http://21cto.com/article/2093 当你意识到你在项目开始时做的轻量.简单的设想竟然完全错了时 ...

  7. 在WIN7操作系统下,如何显示文件夹里文件的数目

    在文件夹的“查看”选项中选择“状态栏”,那么在任务栏中可以显示windows7系统中文件夹中文件的数目.具体操作请参照以下步骤. 1.首先开启电脑,在电脑中进入到任意一个文件夹中. 2.然后在文件夹界 ...

  8. MPI linux Ubuntu cluster 集群

    在局域网内安装mpi,并进行并行计算.MPICH3. 下载源码: wget http://www.mpich.org/static/downloads/3.3.1/mpich-3.3.1.tar.gz ...

  9. LeetCode dp专题

    1. 动态规划的适用场景 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法. 2. 动态规划的基本思想 动态规划背后的基本思想非常简单.大致上,若要解一个给 ...

  10. 天际PRO-CR16 改装方案

    本人现有红色CR16一台,宿舍在7楼,最近找了一份长期兼职,不想挤公交,想骑车去,经常上下楼很是痛苦,琢磨了两天两夜,终于出来第一套小该方案,有不合理地方,或者有个好的零件选择,请各位指点.本人不胜感 ...