SVM支持向量机算法原理

落日映苍穹つ 2022-05-09 09:56 298阅读 0赞

特点概述

  • 优点: 泛化性能好,计算复杂度低,结果容易解释
  • 缺点: 对参数和核函数选择敏感,原始分类器不加修改仅适用于二分类问题
  • 适用数据类型:数值型和标称型数据

口头描述

SVM认为可以使用一个超平面将数据集分隔开来,距离超平面最近的点称为支持向量,SVM的目标是确定超平面使得支持向量到它的距离最大化。求解的算法有很多种,一般使用SMO算法, 它将大优化问题转化为小优化问题进行求解。

SVM推导及SMO算法

假设这个超平面由 ω T x + b = 0 \omega^Tx+ b =0 ωTx+b=0确定。其中 ω \omega ω和 b b b是模型参数,分类label为 y y y因为超平面正的一侧 ω T x + b > 1 \omega^Tx+b>1 ωTx+b>1且label为1,而另一侧两者为-1,所以有 y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . m . \quad y_i(\omega ^Tx_i +b)\ge 1, \quad i=1,2,…m. yi​(ωTxi​+b)≥1,i=1,2,…m.。两个异类支持向量到超平面的距离之和为 γ = 2 ∥ ω ∥ \gamma=\frac{2}{\|\omega\|} γ=∥ω∥2​。我们要确定的就是这两个参数 ω \omega ω, b b b,使得支持向量的 γ \gamma γ最大。
化简可得:

m i n 1 2 ∣ ∣ ω ∣ ∣ 2 min \quad\frac{1}{2}\lvert\lvert\omega\rvert\rvert^2 min21​∣∣ω∣∣2
s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . m . s.t. \quad y_i(\omega ^Tx_i +b)\ge 1, \quad i=1,2,…m. s.t.yi​(ωTxi​+b)≥1,i=1,2,…m.
使用拉格朗日乘子法将式子化简,最终要求解的式子为:
m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j ( 1 ) max_\alpha \sum_{i=1}^{m}\alpha_i -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \alpha_i \alpha_jy_i y_j x_i^T x_j \quad\quad\quad\quad(1) maxα​i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​(1)
SMO的基本思路是先固定 α i \alpha_i αi​之外的所有参数,然后求 α i \alpha_i αi​上的极值。由于存在约束 ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_iy_i=0 ∑i=1m​αi​yi​=0,若固定 α i \alpha_i αi​之外的其他变量,则 α i \alpha_i αi​可以由其他变量导出。于是,SMO每次选择两个变量 α i \alpha_i αi​和 α j \alpha_j αj​,并固定其他参数,这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:

  • 选取一对需要更新的变量 α i \alpha_i αi​和 α j \alpha_j αj​。
  • 固定 α i \alpha_i αi​和 α j \alpha_j αj​以外的参数,求解(1)式获得更新之后的 α i \alpha_i αi​和 α j \alpha_j αj​。

从而得到 α \alpha α值。

由于对任意支持向量 ( x s , y s ) (x_s,y_s) (xs​,ys​)都有 y s f ( x s ) = 1 y_sf(x_s)=1 ys​f(xs​)=1,即:
y s ( ∑ i ∈ S α i y i x i T x s + b ) = 1 y_s(\sum_{i\in S}\alpha_iy_ix_i^Tx_s +b)=1 ys​(i∈S∑​αi​yi​xiT​xs​+b)=1
其中 S = { i ∣ α i > 0 , i = 1 , 2 , 3 , . . . . m } S=\{i|\alpha_i>0,i=1,2,3,….m \} S={ i∣αi​>0,i=1,2,3,….m},因此使用所有支持向量求解的平均值
b = 1 ∣ S ∣ ∑ s ∈ S ( 1 y s − ∑ i ∈ S α i y i x i T x s ) b=\frac{1}{|S|}\sum_{s\in S}(\frac{1}{y_s}-\sum_{i\in S}\alpha_iy_ix_i^Tx_s) b=∣S∣1​s∈S∑​(ys​1​−i∈S∑​αi​yi​xiT​xs​)
式子以得到 b b b值。

核函数

核函数的作用是将数据从一个特征空间映射到另一个特征空间,方便分类器理解数据。通常情况下,这种映射会将低维特征空间映射到高维特征空间(比如,在平面上看不出超平面,映射到立体空间上或许就可以了)。

不同的核函数有不同的映射效果






























名称 表达式
线性核 κ ( x i , x j ) = x i T x j \kappa(x_i,x_j)=x_i ^T x_j κ(xi,xj)=xiTxj
多项式核 κ ( x i , x j ) = ( x i T x j ) d \kappa(x_i,x_j)=(x_i^Tx_j)^d κ(xi,xj)=(xiTxj)d
高斯核 κ ( x i , x j ) = e x p ( − ∥ x i − x j ∥ 2 2 σ 2 ) \kappa(x_i,x_j)=exp(-\frac{|x_i-x_j|^2}{2\sigma^2}) κ(xi,xj)=exp(2σ2xixj2)
拉普拉斯核 κ ( x i , x j ) = e x p ( − ∥ x i − x j ∥ σ ) \kappa(x_i,x_j)=exp(- \frac{|x_i-x_j|}{\sigma}) κ(xi,xj)=exp(σxixj)
Sigmod核 κ ( x i , x j ) = t a n h ( β x i T x j + θ ) \kappa(x_i,x_j)=tanh(\beta x_i^Tx_j+\theta) κ(xi,xj)=tanh(βxiTxj+θ)

该如何选取?

一般都要通过专家先验知识选取,或者使用交叉验证,试用不同核函数看效果。
下面是吴恩达的见解:

  1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM

  2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel

  3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SVM支持向量

    线性分类问题 > 对于一个二维线性可分的样本,往往分割开这些样本的直线有许多条,这些直线的样本内误差皆为零,但这些直线都一样好吗,这不尽然 ![avatar][] 对

    相关 支持向量SVM

    一、简介 SVM被有的人认为是目前最好的现成(现成是指分类器不加修改即可直接使用)的算法之一,这意味着在数据上应用基本形式的SVM分类器就可以得到低错误率的结果。SVM能

    相关 svm 支持向量

    通俗解释: 超级通俗的解释: 支持向量机是用来解决分类问题的。 先考虑最简单的情况,豌豆和米粒,用晒子很快可以分开,小颗粒漏下去,大颗粒保留。