ML-软间隔(slack)的 SVM

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次高峰体检, 初一 那年, 通过三角形相似的方法,推导出了勾股定律; 高三那年, 完全自然语言角度引入, 然后从零推导椭圆方程;

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

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

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

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

扫描二维码关注公众号,回复: 7986037 查看本文章

不扯了, 还是进入正题. 关于 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 是不一样的(比如向量的点的权重高), 但不同类别的权重是一样的

猜你喜欢

转载自www.cnblogs.com/chenjieyouge/p/11938265.html
svm
今日推荐