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. ABP 后台调用接口 获取返回的数据

    原文:https://www.cnblogs.com/i3yuan/p/10703500.html insert 简单测试: public void test8() { string url = &q ...

  2. SpringBoot之邮件服务

    springboot 邮件服务 今天在看网上学习微服务的时候顺遍看到了一些关于springboot的文章,写的springboot拓展功能就顺遍学习了一下,接下来给大家分享一下springboot封装 ...

  3. Python、Spyder的环境搭建

    有什么不对欢迎大家指出,一起交流啊,只针对Windows!!!!(苹果买不起...)Python安装的话2.7版本和3.6版本都可以,虽然2.7比较全面,但还是建议安装3.6,这里以3.6为例进行介绍 ...

  4. 第10组 Beta版本演示

    一.小组信息 组长博客链接 组名:凹秃曼 组内成员 学号 组员 031702240 童景霖(组长) 031702225 叶泽林 031702246 陈鸿立 031702201 万本琳 03170222 ...

  5. org.Hs.eg.db

    bioconduction 主页 http://www.bioconductor.org/packages/release/data/annotation/html/org.Hs.eg.db.html ...

  6. [Gamma]Scrum Meeting#5

    github 本次会议项目由PM召开,时间为5月30日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客,组织例会 撰写博客,组织例会 swoip 前端显示屏幕,翻译 ...

  7. phpstrom 配置getter和setter

    先看一段代码 protected $mddid; /** * @return mixed */ public function getMddid() { return $this->mddid; ...

  8. Lab1:bootloader操作系统的启动

    前言 最近接了一个外包项目再加上填一些之前立的flag,发现好像很久没有发博客了.现在编译原理操作系统算法方面都还有大坑没有填,加上离实习越来越近,应用层方面的学习也要加强了,但反倒是压力越大越想摸鱼 ...

  9. php form表单ajax上传图片方法

    form表单ajax上传图片方法 先引用jquery.form.js 前台代码<pre><form id="form1"> <input id=&qu ...

  10. JMeter工具学习(一)工具使用详细介绍

    备注: JMeter版本4.0 JDK版本1.8 1,JMeter下载 2,下载后直接解压 3,打开解压文件,找到bin目录下的jmeter.bat,双击打开 4,打开jmeter 6,右键Test ...