[机器学习复习笔记] SVM 支持向量机

SVM 支持向量机

1. 线性 SVM

1.1 线性可分问题

给定一个训练样本集 D={(x1,y1),(x2,y2),...,(xn,yn)},yi{1,+1}。假设两个点集 D0D1,且 D0D,D1D , 若存在一个 d 维向量 w 和实数 b,使得对于所有属于 D0 的样本点 xi 都有 wxi+b>0 同时 对于所有属于 D1 的样本点 xj 都有 wxj+b<0,那么称 D0D1 线性可分。

简单得说,就是最佳划分,能够使得 D 中的样本点分为两个类别。


1.2 划分超平面

有时候问题是二维甚至是多个维度的,而这样一个划分,通常被称为 划分超平面。在样本空间中,划分超平面 可通过如下线性方程去描述:

wTx+b=0

其中 w=[w1;w2;...;wd]w 决定了超平面的方向;d 为偏移量,决定了超平面与原点之间的距离。

显然在样本空间 D 中的任意点 x 到超平面的距离可以用以下公式来描述:

r=|wTx+b|||w||

记为 (w,b)

其中 ||w||=i=1dwi2,即向量的 L2 范数。

划分超平面 所产生的分类结果是最具鲁棒性的,对未见示例的泛化能力最强。


1.3 支持向量

假设超平面 (w,b) 能够将训练集 D 进行正确分类,且有距离 dist ,使得每一个样本点 (xi,yi)D,当 yi=+1 时,wTx+bdist ;当 yi=1 时,wTx+bdist

由于 ||w||dist 都满足 大于 0(当然有可能时无限趋近于0的),可以令:

{wTxi+b+1,y=+1wTxi+b1,y=1

可以将上述方程组合并:

yi(wTxi+b)1,i{1,2,...,n}

距离超平面 最近 的几个训练样本点使得上述不等式 等号成立,这些点被称为 支持向量

两个 不同类支持向量 到超平面的距离之和为:

γ=2||w||

γ 也被称之为 间隔 (margin)


1.4 最大化间隔

SVM 要解决的,就是找到 最大间隔的划分超平面 (w,b),即找到最优参数 wb 使得 间隔 γ 最大。

形式化表述为:

maxw,b2||w||s.t.yi(wTxi+b)1,i={1,2,...,n}

显然,为了最大化间隔(margin),只需最大化 ||w||1,也即 最小化 ||w||

那么为了方便计算,我们往往会除去的根号,转换成 最小化 ||w||2 的最优化问题。可以形式化表述为:

minw,b12||w||2s.t.yi(wTxi+b)1,i={1,2,...,n}

这就是基本的 支持向量机 SVM (SupportVectorMachine) 模型。


2. 对偶问题

2.1 拉格朗日乘子法求解SVM

前面了解了 最大间隔划分超平面,令:

f(x)=wTx+b

对于上面的 最大化间隔 问题,也即 最小化 ||w||2 问题,使用 拉格朗日乘子法 得到其 对偶问题 (dualproblem)。

具体来说,对上面的问题中的每条约束添加 拉格朗日乘子 αi0,则此问题的 拉格朗日函数 可写为:

L(w,b,α)=12||w||2+i=1nαi(1yi(wTxi+b))

其中 α=[α1;α2,...,αn]

L(w,b,α)wb 的偏导为 0:

Lw=wi=1nαiyixi=0Lb=i=1nαiyi=0

可得

w=i=1nαiyixii=1nαiyi=0

将上面的等式带入 L(w,b,α)

L(w,b,α)=12i=1nj=1nαiαjyiyjxiTxj+i=1nαii=1nj=1nαiαjyiyjxiTxj=i=1nαi12i=1nj=1nαiαjyiyjxiTxj

由此可以得到 对偶问题:

maxαi=1nαi12i=1nj=1nαiαjyiyjxiTxjs.t.i=1nαiyi=0,αi0,i={1,2,...,n}

解出 α 后,求出 wb 即可得到 最大间隔划分超平面:

f(x)=wTx+b=i=1mαiyixiTx+b

对于对偶问题解出的 αi,称为 L(w,b,α) 中的 拉格朗日乘子,对应每一个样本 (xi,yi)

上述过程满足 KKT 条件:

{αi0yif(xi)10αi(yif(xi)1)=0

对于任意样本 (xi,yi)D,总有 αi=0 或者 yif(xi)=1

αi=0,则不会对 f(xi) 造成任何影响;当 αi>0,此时必有 yif(xi)=1,即样本点在最大间隔的边界上,也就是一个 支持向量


3. 核函数 SVM

3.1 线性不可分问题

前面我们讨论了SVM求解线性可分问题,然而显示生活中,样本往往是 线性不可分的,即原本的样本空间不存在一个可以正确划分两类样本的划分超平面。

经典的线性不可分问题(异或问题)

对于 线性不可分 问题,可以将样本空间映射到一个 更高维度 的空间,使得样本在此特征空间内线性可分。

原始样本空间是 有限维 的,那么 一定存在一个高维度空间使得样本可分

3.2 对偶问题(线性不可分)

ϕ(x)x 映射到高维空间的特征向量,则 特征空间的划分超平面 可以表示为:

f(x)=wTϕ(x)+b

其对应的 对偶问题 为:

maxαi=1nαi12i=1nj=1nαiαjyiyjϕ(xi)Tϕ(xj)s.t.i=1nαiyi=0,αi0,i={1,2,...,n}

3.3 核函数

在上面求解式中涉及到计算 ϕ(xi)Tϕ(xj),由于特征空间维数可能很高,计算往往会非常困难。

所以这里可以设想一个函数:

κ(xi,xj)=ϕ(xi),ϕ(xj)=ϕ(xi)Tϕ(xj)

xixj特征空间的内积等于它们在原始的样本空间中通过 函数 κ 计算得出的结果。这就避免了高维度的计算。

由此 对偶问题 可以重写为:

maxαi=1nαi12i=1nj=1nαiαjyiyjκ(xi,xj)s.t.i=1nαiyi=0,αi0,i={1,2,...,n}

求解后得到:

f(x)=wTϕ(x)+b=i=1nαiyiϕ(xi)Tϕ(x)+b=i=1nαiyiκ(xi,x)+b

此处的 κ 其实就是所谓的 核函数

然而一般情况下,我们不知道 ϕ 的具体形式。我们有如下定理:

χ 为输入空间,κ 为定义在 χ×χ 的对称函数,则 κ核函数 当且仅当 对于任意数据 D={x1,x2,...,xn}核矩阵 (kernel matrix) K 总是半正定的:

K=[κ(x1,x1)κ(x1,xn)κ(xn,x1)κ(xn,xn)]

只要一个对称函数对应的核矩阵半正定,其可作为 核函数 使用。

常用核函数:

  • 线性核函数

κ(xi,xj)=xiTxj

  • 多项式核函数

κ(xi,xj)=(xiTxj)d,d1

  • 高斯核函数(也称径向基RBF函数)

κ(xi,xj)=exp(||xixj||222σ2),σ>0

  • 拉普拉斯核函数*

κ(xi,xj)=exp(||xixj||1σ),σ>0

  • sigmoid 核函数*

κ(xi,xj)=tanh(βxiTxj+θ),β>0,θ>0

上述的核函数,也可以通过线性组合等方式,组成新的核函数。


4. 软间隔 SVM

4.1 软间隔

在实际生活中,很少遇到可以完全线性可分的样本。那么如何解决这个问题呢?

此时我们引入 软间隔 (softmargin) 的概念。

在前面的讨论中,所有样本都必须划分正确,其实这称为 硬间隔 (hardmargin)。而 软间隔 允许 一些样本不满足 约束 yi(wTxi+b)1

当然,在最大化间隔的时候,应当让不满足的约束尽可能少。优化目标函数如下:

minw,b12||w||2+Ci=1n0/1(yi(wTxi+b)1)

其中 C 是大于 0 的常数,0/10/1损失函数:

0/1={1,ifz<00,else

C 无穷大时,迫使所有样本均满足约束 yi(wTxi+b)1; 当 C 为有限值,允许一些样本不满足约束。


4.2 替代损失函数

由于 0/1 非凸、非连续,数学性质不佳,使得求解困难,于是,往往会采用其他的函数代替 0/1,称为 替代函数 (surrogateloss)

常见的 替代函数:

  • hinge 损失函数

hinge(z)=max(0,1z)

  • 指数损失函数

exp(z)=exp(z)

  • 对率损失函数

log(z)=log(1+exp(z))

如采用 hinge 损失函数,那么原来的优化目标函数可写为:

minw,b12||w||2+Ci=1nmax(0,1yi(wTxi+b))

引入 松弛变量 (slackvariables) ξi0,可上式写为:

minw,b,ξi12||w||2+Ci=1nξis.t.yi(wTxi+b)1ξiξi0,i={1,2,...,n}

这就是常用的 软间隔支持向量机


4.3 对偶问题(软间隔)

对于每个样本,都有一个对应的松弛变量,所以此时还需要引入另外一个拉格朗日乘子 μi 。通过拉格朗日乘子法得到软间隔SVM对应的拉格朗日函数:

L(w,b,ξ,α,μ)=12||w||2+Ci=1nξi+i=1nαi(1ξiyi(wTxi+b))i=1nμiξi

其中拉格朗日乘子 αi0,μi0

L(w,b,ξ,α,μ)w, b, ξi 的偏导为 0 得:

w=i=1nαiyixii=1nαiyi=0C=αi+μi

由此可以得到对应的 对偶问题:

maxαi=1nαi12i=1nj=1nαiαjyiyjxiTxjs.t.i=1nαiyi=00αC,i={1,2,...,n}

对于 软间隔支持向量机KKT 条件要求:

{αi0,μi0yif(xi)1+ξi0αi(yif(xi)1+ξi)=0ξi0,μiξi=0

对于任意训练样本 (xi,yi),总有 αi=0yif(xi)=1ξi

αi=0,则该样本不会对 f(xi) 产生任何影响;
α>0,则必有 yif(xi)=1ξi,即该样本点为 支持向量

αi<C,则 μi>0,进而有 ξi=0,即该样本正好在 最大间隔边界;
αi=C,则 μi=0,此时若 ξi1,则该样本落在 最大间隔内部,若 ξi>1 则该样本被错误分类。


5. sklearn SVM 调用

import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

X, y = ...

x_train,x_test,y_train,y_test = train_test_split(X,y,random_state=...)

model = svm.SVC(C=1.0, kernel='rbf')

model.fit(x_train, y_train)

# 预测结果
res = model.predict(x_test)

# 进行评估
print("F1: {0:.2f}".format(f1_score(res, y_test, average='micro')))

参考

《机器学习》 周志华

【机器学习】支持向量机 SVM(非常详细)

posted @   MarisaMagic  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示