SVM推导过程浅析

转载请注明出处,原文地址

前言

SVM - support vector machine, 俗称支持向量机,为一种supervised learning算法,属于classification的范畴。本篇文章将会讲述SVM的原理并介绍推导过程。

SVM推导过程

如图,我们有些红色与蓝色点分部在平面中,我们设蓝点为正红点为负。SVM的任务就是找到一条线,将红点和蓝点分割开来,这条线可能会有很多种可能,图中绿色的实线是最好的一条,因为它距离红点和蓝点所在的虚线的距离最大。

在这里插入图片描述

接下来我们就一起来探讨下SVM的这条分割线是如何找到的。

首先,我们先随便找一条线做为分割线,我们选择平面上的任意一个点用向量 u ⃗ \vec{u} u 表示,设分割线的法向量为 w ⃗ \vec{w} w ,就可以计算出向量 u ⃗ \vec{u} u w ⃗ \vec{w} w 方向的投影长度。

在这里插入图片描述

假设分割线距离原点的距离为b,那么对于负样本 u ⃗ \vec u u

u ⃗ ⋅ w ⃗ < = b \vec{u} · \vec{w} <= b u w <=b

就有

u ⃗ ⋅ w ⃗ − b < = 0 \vec{u} · \vec{w} - b <= 0 u w b<=0

从公式就能看到,SVM其实就是要寻找合适的 w w w b b b让虚线与实线的距离最大。

接下来我们把实线与虚线的距离归一化,那么对于训练集来说就有如下公式

负项:

w ⃗ x ⃗ − b < = − 1 \vec{w}\vec{x} - b <= -1 w x b<=1

正项:

w ⃗ x ⃗ − b > = 1 \vec{w}\vec{x} - b >= 1 w x b>=1

为了将这两个公式统一,我们加入一个辅助量

y i = {      1 x 为 正 − 1 x 为 负 y_i = \begin{cases}\;\;1\quad x为正\\-1\quad x为负\end{cases} yi={1x1x

把辅助量带入上面的公式,最终两个公式可以合并成一个公式

y i ( w ⃗ x ⃗ − b ) − 1 > = 0 y_i(\vec{w}\vec{x} - b) - 1 >= 0 yi(w x b)1>=0

那么,怎么样才能保证实线与虚线的距离最宽呢,这里我们设 x ⃗ + \vec x_+ x + x ⃗ + \vec x_+ x +分别为正负虚线上面的点,那么就有

w i d t h = ( x ⃗ + − x ⃗ − ) ⋅ w ⃗ ∣ w ∣ width = (\vec x_+ - \vec x_-)· \frac{\vec w}{|w|} width=(x +x )ww

x + = b + 1 w ⃗ x_+=\frac{b+1}{\vec w} x+=w b+1

x − = b − 1 w ⃗ x_-=\frac{b-1}{\vec w} x=w b1

最终我们得到公式

w i d t h = 2 ∣ w ⃗ ∣ width = \frac{2}{|\vec w|} width=w 2

所以宽度实际上和训练数据是没有关系的,只要知道了法向量,就可以求出宽度

我们要让宽度越大越好,即

m a x 2 ∣ w ⃗ ∣ max\frac {2}{|\vec w|} maxw 2

m i n ∣ w ⃗ ∣ min|\vec w| minw

m i n 1 2 ∣ w ⃗ ∣ 2 min\frac{1}{2}|\vec w|^2 min21w 2

这里添加的参数是为了之后求导方便

接下来就是求极值,但是我们这里有一个限制条件,因此根据拉格朗日乘子法,最终求极值的公式为:

L = 1 2 ∣ w ⃗ ∣ 2 − ∑ i = 1 N α i [ y i ( w ⃗ i x ⃗ i − b ) − 1 ] L = \frac{1}{2}|\vec w|^2 - \sum_{i=1}^N \alpha_i[y_i(\vec w_i \vec x_i-b)-1] L=21w 2i=1Nαi[yi(w ix ib)1]

w w w b b b求偏导

α L α w ⃗ = w ⃗ − ∑ i = 1 N α i y i x i \frac{\alpha L}{\alpha \vec w} = \vec w - \sum_{i=1}^N\alpha_i y_i x_i αw αL=w i=1Nαiyixi

α L α b ⃗ = ∑ i = 1 N α i y i \frac{\alpha L}{\alpha \vec b} = \sum_{i=1}^N\alpha_i y_i αb αL=i=1Nαiyi

令导数为0有

w ⃗ = ∑ i = 1 N α i y i x i \vec w = \sum_{i=1}^N\alpha_i y_i x_i w =i=1Nαiyixi

∑ i = 1 N α i y i = 0 \sum_{i=1}^N\alpha_i y_i = 0 i=1Nαiyi=0

把这两个式子带入到L中

L = ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j L = \sum_{i=1}^N\alpha_i - \frac{1}{2}\sum_{i=1}^N \sum_{j=1}^N\alpha_i \alpha_j y_i y_j x_i x_j L=i=1Nαi21i=1Nj=1Nαiαjyiyjxixj

走到这一步我们会发现 w w w b b b已经别其他变量所取代,最后我们要求的是 α \alpha α的值,对于 α \alpha α的值,一般会采用SMO KKT等算法来求取,这里不做详细说明。

那对于一些无法用线性函数来做分类时怎么办呢

首相,我们会把数据做一个非线性变化,把值变化到一个线性可分的空间上,这个函数我们称为核函数kernel,根据上面的L公式来说,我们并不需要知道每个点的数据怎么变的,只需要拿到核函数的结果,并把 x i x j x_ix_j xixj替换成核函数结果即可求出最后的值。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值