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. spark基础知识一

    1. spark是什么 Apache Spark™ is a unified analytics engine for large-scale data processing. spark是针对于大规 ...

  2. SQL 变形

    需求:共有协议X份,已签XX份,待签X份 sql: select count(1) 总记录数, sum(case when XY_STATUS='1' then 1 else 0 end)待签, su ...

  3. nuxtjs如何部署cdn及区分发布环境

    1.部署cdn nuxt  build 后的前端资源都会存放在.nuxt/dist/ 文件夹下面 img 目录存放的是使用到的图片资源,无论是开发中存放在 assets 文件夹里的,还是static里 ...

  4. 【BigData】Java基础_类和对象的基本使用

    1.需求描述 ①定义一个学生类,然后根据该类创建3个具体的学生对象 类中包含信息:学生姓名.学号.年龄.性别.所在地址 ②将这三个学生对象存入到数组中 ③然后将数组对象按照学生的年龄倒序排序 2.代码 ...

  5. 使用Java8特性对list进行按属性去重

    编写工具类 public class DistinctUtil { public static <T> Predicate<T> distinctByKey(Function& ...

  6. c++功能与方法笔记

    1. windows判断创建目录 #include <Shlwapi.h> #pragma comment(lib, "shlwapi.lib") //windows ...

  7. Spring Boot进阶系列二

    上一篇文章,主要分析了怎么建立一个Restful web service,系列二主要创建一个H5静态页面使用ajax请求数据,功能主要有添加一本书,请求所有书并且按照Id降序排列,以及查看,删除一本书 ...

  8. 5 系统的软中断CPU升高,一般处理办法?

    还是需要多动手,一个一个问题个被get!

  9. PatchMatchStereo可能会需要的Rectification

    在稠密三维重建中,rectification可以简化patch match的过程.在双目特征匹配等场景中其实也用得到,看了一下一篇论文叫< A Compact Algorithm for Rec ...

  10. TP-LINK WR703N OpenWrt 无线配网历程

    ① 创建了两个 Interfaces,名字分别为 lan.wlan0 (可自行设定),一个负责连接 PPPoE,一个负责提供 AP 热点. ② 配置 wlan0 相关 ip 地址,该地址为无线网内网地 ...