支持向量机SVM(附Python实现代码)

1 前备知识

在这里简略讲一下使用方法,具体原理和推导公式不展开讲了。

1.1 拉格朗日乘子法

拉格朗日乘子法就是求函数 f ( x 1 , x 2 , . . . ) f(x1,x2,...) f(x1,x2,...)在约束条件 g ( x 1 , x 2 , . . . ) = 0 g(x1,x2,...)=0 g(x1,x2,...)=0下的极值的方法。其主要思想是将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。

首先看下面的例题:
m i n   f = 2 x 1 2 + 3 x 2 2 + x 3 2 s . t .    2 x 1 + x 2 − 1 = 0         2 x 2 + x 3 − 2 = 0 min ~f=2x_{1}^{2}+3x_{2}^{2}+x_{3}^{2} \\ s.t. ~~2x_{1}+x_{2}-1=0 \\ ~~~ ~~~ ~2x_{2}+x_{3}-2=0 min f=2x12+3x22+x32s.t.  2x1+x21=0       2x2+x32=0
第一步将每个约束条件都分配一个乘子 α i \alpha_{i} αi,在将目标函数和所有的约束函数相加,得到函数:
L = f + ∑ i = 1 m g i α i L=f+\sum_{i=1}^{m}g_{i} \alpha_{i} L=f+i=1mgiαi
其中每个约束条件 g i g_{i} gi的右边都是0,所以 ∑ i = 1 m g i = 0 \sum_{i=1}^{m}g_{i}=0 i=1mgi=0.
L = ( 2 x 1 2 + 3 x 2 2 + x 3 2 ) + α 1 ( 2 x 1 + x 2 − 1 ) + α 2 ( 2 x 2 + x 3 − 2 ) L=(2x_{1}^{2}+3x_{2}^{2}+x_{3}^{2})+\alpha_{1}(2x_{1}+x_{2}-1)+\alpha_{2}(2x_{2}+x_{3}-2) L=(2x12+3x22+x32)+α1(2x1+x21)+α2(2x2+x32)
第二步对 x i x_{i} xi求偏导:
{ ∂ L ∂ x 1 = 4 x 1 + 2 α 1 ∂ L ∂ x 2 = 6 x 2 + α 1 + 2 α 2 ∂ L ∂ x 3 = 2 x 3 + α 2 \left\{\begin{matrix}\frac{\partial L}{\partial x_{1}}=4x_{1}+2\alpha_{1} \\\frac{\partial L}{\partial x_{2}}=6x_{2}+\alpha_{1}+2\alpha_{2}\\ \frac{\partial L}{\partial x_{3}}=2x_{3}+\alpha_{2}\end{matrix}\right. x1L=4x1+2α1x2L=6x2+α1+2α2x3L=2x3+α2
令偏导数等于0,用 α i \alpha_{i} αi表示 x x x
{ x 1 = − α 1 2 x 2 = − α 1 + 2 α 2 6 x 3 = − α 2 2 \left\{\begin{matrix}x_{1}=-\frac{\alpha_{1}}{2} \\ x_{2}=-\frac{\alpha_{1}+2\alpha_{2}}{6} \\ x_{3}=-\frac{\alpha_{2}}{2}\end{matrix}\right. x1=2α1x2=6α1+2α2x3=2α2
将所得 x x x代入约束条件 g g g中,求得 α \alpha α
{ α 1 = − 2 / 5 α 2 = − 72 / 45 \left\{\begin{matrix}\alpha_{1}=-2/5 \\ \alpha_{2}=-72/45 \end{matrix}\right. { α1=2/5α2=72/45
得到 α \alpha α的值,代入上式得到 x x x的最优解。

1.2 KKT条件

我们可以发现,1.1讲的拉格朗日乘子法中,它的约束条件都是等式,那么对于约束条件是不等式的应该怎么办呢?

对于一个新的极值问题:
m i n   f = x 1 2 − 2 x 1 + x 2 2 + 5 s . t .    x 1 + 10 x 2 > 10         10 x 1 − x 2 < 10 min ~f=x_{1}^{2}-2x_{1}+x_{2}^{2}+5 \\ s.t. ~~x_{1}+10x_{2}>10 \\ ~~~ ~~~ ~10x_{1}-x_{2}<10 min f=x122x1+x22+5s.t.  x1+10x2>10       10x1x2<10
为了统一,首先将约束条件都转化为小于号:

m i n   f = x 1 2 − 2 x 1 + x 2 2 + 5 s . t .    10 − x 1 − 10 x 2 < 0          10 x 1 − x 2 − 10 < 0 min ~f=x_{1}^{2}-2x_{1}+x_{2}^{2}+5 \\ s.t. ~~10-x_{1}-10x_{2}<0 \\ ~~~ ~~~ ~~10x_{1}-x_{2}-10<0 min f=x122x1+x22+5s.t.  10x110x2<0        10x1x210<0
依旧是分配乘子并求和:
L = f + ∑ i = 1 m g i α i + ∑ i = 1 m h i β i L=f+\sum_{i=1}^{m}g_{i} \alpha_{i}+\sum_{i=1}^{m}h_{i} \beta_{i} L=f+i=1mgiαi+i=1mhiβi
其中 g i g_{i} gi是不等式约束条件, h i h_{i} hi是等式约束条件。(此例中没有等式)
L = ( x 1 2 − 2 x 1 + x 2 2 + 5 ) + α 1 ( 10 − x 1 − 10 x 2 ) + α 2 ( 10 x 1 − x 2 − 10 ) L=(x_{1}^{2}-2x_{1}+x_{2}^{2}+5)+\alpha_{1}(10-x_{1}-10x_{2})+\alpha_{2}(10x_{1}-x_{2}-10) L=(x122x1+x22+5)+α1(10x110x2)+α2(10x1x210)
KKT条件就是最优值,KKT条件为:

  1. L L L对每个 x x x求偏导等于 0 0 0
  2. h ( x ) = 0 h(x)=0 h(x)=0
  3. g i ( x ) < = 0 g_{i}(x)<=0 gi(x)<=0
  4. α i > = 0 \alpha_{i}>=0 αi>=0
  5. ∑ α i g i ( x ) = 0 \sum\alpha_{i}g_{i}(x)=0 αigi(x)=0

可以发现,将3、4、5合并就是:
α i g i ( x ) = 0 \alpha_{i}g_{i}(x)=0 αigi(x)=0
对于上例题,接下来的操作就是:
一、 L L L对每个 x x x求偏导等于 0 0 0求出 x x x的表达式。
二、将 x x x的表达式代入 α i g i ( x ) = 0 \alpha_{i}g_{i}(x)=0 αigi(x)=0,求出 α \alpha α
三、将 α \alpha α代回,求出 x x x

2 SVM

2.1 简介

支持向量机(support vector machines, SVM)是一种二分类问题模型。
它的目标是找到一个尽可能正确分类,且“确信度”尽可能高的超平面。
其中“确信度”指的是:正确分类的样本点,距离超平面越远,该样本点的确信度就越高。(我对这个样本点分类正确的信任程度)
换而言之,就是该超平面的鲁棒性要好,泛化能力要强。

对于线性可分支持向量机,分类超平面为:
w ∗ ⋅ x + b ∗ = 0 w^{*}·x+b^{*}=0 wx+b=0
相应的分类决策函数
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) f(x)=sign(w^{*}·x+b^{*}) f(x)=sign(wx+b)
称为线性可分支持向量机。

2.2 函数间隔与几何间隔

函数间隔和几何间隔是用来描述计算“确信度”的。

2.1.1 函数间隔

在超平面 w ⋅ x + b = 0 w·x+b=0 wx+b=0确定的情况下, ∣ w ⋅ x i + b ∣ |w·x_{i}+b| wxi+b的值可以作为衡量样本点 x i x_{i}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值