SVM支持向量机(Support Vectors Mechine)

SVM支持向量机(Support Vector Mechine)

SVM是一种监督学习算法,常用于解决二分类问题(也可以解决多分类问题),它可以处理线性可分的数据,同时也可以处理线性不可分的数据,广泛应用于分类、回归甚至异常检测等任务。SVM的核心思想是找到数据点之间的最优边界,这个边界能够最大化不同类别之间的间隔。

一、线性可分

线性可分的数据是指至少能够通过一个直线将数据进行分隔开,如下图所示:

在这里插入图片描述

数据可以有无数条直线能够分隔开,但是在所有直线中,我们能够直观的感受到,上图中红色的直线分割的效果是最好的,我们对分割直线定义标准:

定义: 直线的参数为 w w w,直线分割的两部分数据与直线的距离为 d 2 \frac{d}{2} 2d,其中 d d d 被称为间隔,间隔d的值越大,我们认为分割直线的效果越好。
在这里插入图片描述

我们对数据集以及模型进行符号定义:

  1. 数据集定义: ( x i ⃗ , y i ⃗ ) (\vec{x_i}, \vec{y_i}) (xi ,yi ) 含义为 ( 特征向量,标签 ) (特征向量, 标签) (特征向量,标签) ,其中 y y y 的取值为1-1

  2. 线性模型: ( w ⃗ , b ) (\vec{w}, b) (w ,b) w T x + b = 0 w^Tx + b = 0 wTx+b=0,该函数表示一个超平面HyperPlane)用于分割数据;

  3. 训练集线性可分的条件:

    对于 ∀ i ( x i ⃗ , y i ) \forall_i (\vec{x_i}, y_i) i(xi ,yi) ∃ ( w ⃗ , b ) \exists(\vec{w}, b) (w ,b),使得 ∀ i ( x i , y i ⃗ ) \forall_i (\vec{x_i, y_i}) i(xi,yi ) 有:

    1. y i = 1 y_i = 1 yi=1,则 w ⃗ T x ⃗ i T + b ≥ 0 \vec{w}^T \vec{x}_i^T + b \geq 0 w Tx iT+b0
    2. y i = − 1 y_i = -1 yi=1,则 w ⃗ T x ⃗ i T + b < 0 \vec{w}^T \vec{x}_i^T + b \lt 0 w Tx iT+b<0

    可将条件1与条件2进行合并,得: y i ⋅ ( w ⃗ T x ⃗ i + b ≥ 0 ) y_i \cdot (\vec{w}^T \vec{x}_i + b \geq 0) yi(w Tx i+b0)

知识回顾

1. 平面的缩放

平面 w ⃗ T x ⃗ + b = 0 \vec{w}^T \vec{x} + b = 0 w Tx +b=0 与平面 a w ⃗ T x ⃗ + a b = 0 a\vec{w}^T \vec{x} + ab = 0 aw Tx +ab=0 表示的是同一个平面(其中 a ∈ R + a\in R^+ aR+),若 ( w ⃗ , b ) (\vec{w}, b) (w ,b)满足公式 y i ⋅ ( w ⃗ T x ⃗ i + b ≥ 0 ) y_i \cdot (\vec{w}^T \vec{x}_i + b \geq 0) yi(w Tx i+b0),则 ( a w ⃗ , a b ) (a\vec{w}, ab) (aw ,ab)也满足公式 y i ⋅ ( w ⃗ T x ⃗ i + b ≥ 0 ) y_i \cdot (\vec{w}^T \vec{x}_i + b \geq 0) yi(w Tx i+b0)

2. 点到平面的距离公式

设平面方程为: w 1 x + w 2 x + b = 0 w_1x + w_2x + b = 0 w1x+w2x+b=0,点的坐标为: ( x 0 , y 0 ) (x_0, y_0) (x0,y0)

则点到平面的距离为: d = ∣ w i x 0 + w 2 y 0 + b ∣ w i 2 + w 2 2 d = \frac{|w_ix_0 + w_2y_0 + b|}{\sqrt{w_i^2 + w_2^2}} d=wi2+w22 wix0+w2y0+b = ∣ w ⃗ T x ⃗ 0 + b ∣ ∣ ∣ w ⃗ 0 ∣ \frac{|\vec{w}^T\vec{x}_0 + b|}{||\vec{w}_0|} ∣∣w 0w Tx 0+b 这里的 x 0 ⃗ \vec{x_0} x0 表示一个向量,包含了 x 0 , y 0 x_0, y_0 x0,y0

我们可以用 a a a 去缩放 ( w ⃗ , b ) (\vec{w}, b) (w ,b),最终使得在支持向量 x 0 ⃗ \vec{x_0} x0 上有 ∣ w ⃗ T x ⃗ 0 + b ∣ = 1 |\vec{w}^T\vec{x}_0 + b| = 1 w Tx 0+b=1,此时支持向量与平面距离 d = 1 ∣ ∣ w ⃗ ∣ ∣ d = \frac{1}{||\vec{w}||} d=∣∣w ∣∣1

SVM模型(线性可分模型)

支持向量机是需要最大化距离 d d d,直观角度上看,能分割两部分线性可分数据的直线有无数条,但能使 d d d最大的只有一条,因此我们要最大化 d d d,对点到平面的距离进行缩放令距离为1可得: d = 1 ∣ ∣ w ⃗ ∣ ∣ d = \frac{1}{||\vec{w}||} d=∣∣w ∣∣1,即需要最小化 ∣ ∣ w ⃗ ∣ ∣ ||\vec{w}|| ∣∣w ∣∣,我们定义:

  • 最小化: 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 \frac{1}{2}||\vec{w}||^2 21∣∣w 2

  • 限制条件: y i [ w ⃗ T x ⃗ i + b ] ≥ 1 y_i[\vec{w}^T\vec{x}_i + b] \geq 1 yi[w Tx i+b]1 (这里我们缩放 w ⃗ , b \vec{w}, b w ,b使得 w ⃗ T x ⃗ i + b = 1 \vec{w}^T \vec{x}_i + b = 1 w Tx i+b=1

这样转化为了一个二次规划问题。

二次规划问题

  • 目标函数:二次项

  • 限制条件:一次项

对于二次规划问题,要么是无解的,要么只有一个极值(极值即最值)

硬间隔与软间隔

硬间隔是指直线不容忍任何一个点,严格按照原有数据进行划分,但是这样得到的模型并不是一个好模型,虽然有可能将数据进行分割,但是在使用该模型的时候,并不能有很好的效果,所以对于一些异常点,模型需要有一定的容忍性,因此提出软间隔

在这里插入图片描述

软间隔是指容忍一定的异常数据,然后再对数据进行分割,以此来得到一个性能不错的模型。

在这里插入图片描述

为了达到软间隔的目的,我们修改目标函数,以及限制条件如下:

  • 最小化: 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 + C ∑ i = 1 N ξ i \frac{1}{2}||\vec{w}||^2 + C\sum\limits_{i = 1} ^ N \xi_i 21∣∣w 2+Ci=1Nξi
  • 限制条件:1. y i [ w ⃗ T x i ⃗ T + b ] ≥ 1 − ξ i y_i [\vec{w}^T \vec{x_i}^T + b] \geq 1 - \xi_i yi[w Txi T+b]1ξi 2. ξ i ≥ 0 \xi_i \geq 0 ξi0

其中 ξ i \xi_i ξi 是一个松弛变量,是为了将硬间隔转换为软间隔而设定的, ξ i \xi_i ξi是一个未知变量,由于 ξ i ≥ 0 \xi_i \geq 0 ξi0,所以当 ξ i \xi_i ξi 非常大时,松弛度太高,模型会容忍太多的异常数据,这样会使得参数 w ⃗ \vec{w} w b b b 有很大范围的选择,也就是说会有太多的直线能够满足我们的限制条件1,这将会是一个非常糟糕的模型,同样,如果松弛度太小,会导致模型严格按照数据进行划分,这样会考虑所有的异常数据,这样得到的模型也是不好的模型,是一个过拟合现象,为了尽量提高模型的性能,通常我们再添加一个参数 C C C 在松弛变量前,用以限制 ξ i \xi_i ξi的松弛大小。

可以将 C ∑ i = 1 N ξ i C\sum\limits_{i = 1} ^ N \xi_i Ci=1Nξi 类比为线性模型中的正则项

二、线性不可分

线性不可分是指在特征空间中,数据点不能通过一个线性超平面(直线或超平面)完全分开的情况。支持向量机(SVM)通过使用核技巧将数据映射到更高维空间,在这个高维空间中数据可能是线性可分的,从而可以找到一个线性边界来区分不同的类别。线性不可分的例子如下图:
在这里插入图片描述

高维映射

对于线性不可分的数据,我们可以对数据进行高维映射,使其变为一个线性可分的数据,定义高维映射函数为: ϕ ( x ) \phi(x) ϕ(x) ,通过高维映射函数,我们可以将数据映射到一个更高的维度。

高维映射实例

假设高维映射函数为: ϕ ( x ) = [ a 2 , b 2 , a , b , a b ] \phi(x) = [a^2, b^2, a, b, ab] ϕ(x)=[a2,b2,a,b,ab],且原数据为: x = [ a , b ] x = [a, b] x=[a,b]的格式,则可以将任意的二维数据映射到五维的超平面中,如: x 1 = [ 0 , 1 ] x_1 = [0, 1] x1=[0,1],则: ϕ ( x 1 ) = [ 0 , 1 , 0 , 1 , 0 ] \phi(x_1) = [0, 1, 0, 1, 0] ϕ(x1)=[0,1,0,1,0]

如果数据的维度可以上升到无限维,那么数据线性可分的概率为1

我们无法知道无限维映射函数 ϕ ( x ) \phi(x) ϕ(x)的显示表达式,但我们可以通过核函数(Kernel Function)来知道高维映射的内积结果:
K ( x 1 , x 2 ) = ϕ ( x 1 ) T ⋅ ϕ ( x 2 ) K(x_1, x_2) = \phi(x_1)^T \cdot \phi(x_2) K(x1,x2)=ϕ(x1)Tϕ(x2)
内积的结果是一个数值。

常用的核函数:

  1. 高斯核: K ( x 1 , x 2 ) = e − ∣ ∣ x 1 − x 2 ∣ ∣ 2 2 σ 2 K(x_1, x_2) = e^{-\frac{||x_1 - x_2||^2}{2\sigma^2}} K(x1,x2)=e2σ2∣∣x1x22
  2. 多项式核(参数d表示多项式的阶数): K ( x 1 , x 2 ) = ( x 1 T x 2 + 1 ) d K(x_1, x_2) = (x_1^Tx_2 + 1)^d K(x1,x2)=(x1Tx2+1)d

问题的转化的一般形式(具有非常普适性):

1. 原问题
  • 最小化: f ( w ) f(w) f(w)

  • 限制条件:1. g i ( w ) ≤ 0      ( i = 1 ∼ k ) g_i(w) \leq 0 ~~~~ (i = 1 \sim k) gi(w)0    (i=1k) 2. h i ( w ) = 0      ( i = 1 ∼ m ) h_i(w) = 0 ~~~~ (i = 1 \sim m) hi(w)=0    (i=1m)

2. 原问题转换为对偶问题

定义: L ( w , α , β ) = f ( w ) + ∑ i = 1 K α i g i ( w ) + ∑ i = 1 M β i h i ( w ) L(w, \alpha, \beta) = f(w) + \sum\limits_{i = 1}^{K} \alpha_ig_i(w) + \sum\limits_{i = 1}^{M}\beta_ih_i(w) L(w,α,β)=f(w)+i=1Kαigi(w)+i=1Mβihi(w)

这里的 α \alpha α是与 g i ( w ) g_i(w) gi(w)进行相乘的,也就是说 α \alpha α是只与所有的不等式限制条件相乘,同理 β \beta β与所有的等式限制条件相乘

  • 最大化: θ ( α , β ) = inf ⁡ { L ( w , α , β ) } \theta(\alpha, \beta) = \inf\{L(w, \alpha, \beta)\} θ(α,β)=inf{L(w,α,β)} inf ⁡ \inf inf表示求最小值。

  • 限制条件: α i ≥ 0      ( i = 1 ∼ k ) \alpha_i \geq 0 ~~~~ (i = 1 \sim k) αi0    (i=1k)

定理以及性质

如果 w ∗ w^* w是原问题的解,而 α ∗ , β ∗ \alpha^*, \beta^* α,β是对偶问题的解,则有 f ( w ∗ ) ≥ θ ( α ∗ , β ∗ ) f(w^*) \geq \theta(\alpha^*, \beta^*) f(w)θ(α,β)

证明:

θ ( α ∗ , β ∗ ) = inf ⁡ { L ( w , α ∗ , β ∗ ) } ≤ L ( w ∗ , α ∗ , β ∗ ) = f ( w ∗ ) + ∑ i = 1 K α i g i ( w ∗ ) + ∑ i = 1 M β i ∗ h i ( w ∗ ) \theta(\alpha^*, \beta^*) = \inf\{L(w, \alpha^*, \beta^*)\} \leq L(w^*, \alpha^*, \beta^*) = f(w^*) + \sum\limits_{i = 1}^K\alpha_ig_i(w^*) + \sum\limits_{i = 1}^M \beta^*_i h_i(w^*) θ(α,β)=inf{L(w,α,β)}L(w,α,β)=f(w)+i=1Kαigi(w)+i=1Mβihi(w)

因为 α i ≥ 0 \alpha_i \geq 0 αi0 并且 g i ( w ∗ ) ≤ 0 g_i(w^*) \leq 0 gi(w)0 所以 ∑ i = 1 K α i g i ( w ∗ ) ≤ 0 \sum\limits_{i = 1}^K\alpha_ig_i(w^*) \leq 0 i=1Kαigi(w)0,因为 h i ( w ∗ ) = 0 h_i(w^*) = 0 hi(w)=0 所以 ∑ i = 1 M β i ∗ h i ( w ∗ ) = 0 \sum\limits_{i = 1}^M \beta^*_i h_i(w^*) = 0 i=1Mβihi(w)=0

可得: f ( w ∗ ) + ∑ i = 1 K α i g i ( w ∗ ) + ∑ i = 1 M β i ∗ h i ( w ∗ ) ≤ f ( w ∗ ) f(w^*) + \sum\limits_{i = 1}^K\alpha_ig_i(w^*) + \sum\limits_{i = 1}^M \beta^*_i h_i(w^*) \leq f(w^*) f(w)+i=1Kαigi(w)+i=1Mβihi(w)f(w)

定义: G = f ( w ∗ ) − θ ( α ∗ , β ∗ ) ≥ 0 G = f(w^*) - \theta(\alpha^*, \beta^*) \geq 0 G=f(w)θ(α,β)0

G G G称为原问题与对偶问题的间距。对于某些特定的优化问题,可以证明 G = 0 G = 0 G=0

强对偶定理

f ( w ) f(w) f(w)为凸函数,且 g ( w ) = A w + b ,   h ( w ) = c w + d g(w) = Aw + b,~ h(w) = cw + d g(w)=Aw+b, h(w)=cw+d,则此优化问题的原问题与对偶问题间距为0,即:
f ( w ∗ ) = θ ( α ∗ , β ∗ ) f(w^*) = \theta(\alpha^*, \beta^*) f(w)=θ(α,β)

凸函数的定义:

对于所有的自变量 w 1 , w 2 w_1, w_2 w1,w2,以及所有的 λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ[0,1], 有 f ( λ w 1 + ( 1 − λ ) w 2 ) ≤ λ f ( w 1 ) + ( 1 − λ ) f ( w 2 ) f(\lambda w_1 + (1 - \lambda)w_2) \leq \lambda f(w_1) + (1 - \lambda)f(w_2) f(λw1+(1λ)w2)λf(w1)+(1λ)f(w2)

KKT条件

f ( w ∗ ) = θ ( α ∗ , β ∗ ) f(w^*) = \theta(\alpha^*, \beta^*) f(w)=θ(α,β),则要么 α ∗ = 0 \alpha^* = 0 α=0 要么 g ( w ∗ ) = 0 g(w^*) = 0 g(w)=0

SVM中问题的转化

  • 最小化: 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 + C ∑ i = 1 N ξ i \frac{1}{2}||\vec{w}||^2 + C\sum\limits_{i = 1}^N \xi_i 21∣∣w 2+Ci=1Nξi , 这是一个凸函数。

  • 限制条件:1. y i [ w ⃗ T ϕ ( x i ⃗ ) + b ] ≥ 1 − ξ i y_i[\vec{w}^T\phi(\vec{x_i}) + b] \geq 1 - \xi_i yi[w Tϕ(xi )+b]1ξi, 2. ξ i ≥ 0 \xi_i \geq 0 ξi0

转化为原问题:
  • 最小化: 1 2 ∣ ∣ ] w ⃗ ∣ ∣ 2 − C ∑ i = 1 N ξ i \frac{1}{2}||]\vec{w}||^2 - C \sum\limits_{i = 1}^N \xi_i 21∣∣]w 2Ci=1Nξi

  • 限制条件:1. 1 + ξ i − y i w ⃗ T ϕ ( x i ⃗ ) + y i b ≤ 0 1 + \xi_i - y_i\vec{w}^T \phi(\vec{x_i}) + y_ib \leq 0 1+ξiyiw Tϕ(xi )+yib02. ξ i ≤ 0 \xi_i \leq 0 ξi0

转化为对偶问题
  • 最大化: θ ( α , β ) = inf ⁡ 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 − C ∑ i = 1 N ξ i + ∑ i = 1 N β i ξ i + ∑ i = 1 N α i [ 1 + ξ i − y i w ⃗ T ϕ ( x i ⃗ ) − y i b ] \theta(\alpha, \beta) = \inf{\frac{1}{2}||\vec{w}||^2 - C\sum\limits_{i = 1}^{N}\xi_i + \sum\limits_{i = 1}^N \beta_i\xi_i + \sum\limits_{i = 1}^N \alpha_i[1 + \xi_i - y_i\vec{w}^T\phi(\vec{x_i}) - y_ib]} θ(α,β)=inf21∣∣w 2Ci=1Nξi+i=1Nβiξi+i=1Nαi[1+ξiyiw Tϕ(xi )yib]

(注:这里的 β \beta β α \alpha α都对应着朴实问题中的 α \alpha α,因为 α \alpha α对应着不等式限制条件,这样写只是便于直观察看)

  • 限制条件:1. α i ≥ 0      ( i = 1 ∼ N ) \alpha_i \geq 0 ~~~~ (i = 1 \sim N) αi0    (i=1N)2. β i ≥ 0      ( i = 1 ∼ N ) \beta_i \geq 0 ~~~~ (i = 1 \sim N) βi0    (i=1N)

我们可以对 L L L的各个参数求导,并令其等于0,这样找到的是函数 L L L的极值(这里的极值就是最值)情况:

  1. ∂ L ∂ w = 0 = > w − ∑ i = 1 N α i y i ϕ ( x i ) = 0 = > w = ∑ i = 1 N α i y i ϕ ( x i ) \frac{\partial{L}}{\partial{w}} = 0 => w - \sum\limits_{i = 1}^{N}\alpha_i y_i \phi(x_i) = 0 => w = \sum\limits_{i = 1}^N \alpha_i y_i \phi(x_i) wL=0=>wi=1Nαiyiϕ(xi)=0=>w=i=1Nαiyiϕ(xi)
  2. ∂ L ∂ ξ i = 0 = > − C + β i + α i = 0 = > β i + α i = C \frac{\partial{L}}{\partial{\xi_i}} = 0 => -C + \beta_i + \alpha_i = 0 => \beta_i + \alpha_i = C ξiL=0=>C+βi+αi=0=>βi+αi=C
  3. ∂ L ∂ b = 0 = > ∑ i = 1 N α i y i = 0 \frac{\partial{L}}{\partial{b}} = 0 => \sum\limits_{i = 1}^{N} \alpha_i y_i = 0 bL=0=>i=1Nαiyi=0

将以上三个等式带入到 θ ( α , β ) \theta(\alpha, \beta) θ(α,β)后,可求得最小化 w ⃗ , ξ i , b \vec{w}, \xi_i, b w ,ξi,b这三个变量,导入后得:
θ ( α , β ) = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 ⏟ 1 + ∑ i = 1 N α i ⏟ 2 + ∑ i = 1 N α i y i w T ϕ ( x ⃗ ) ⏟ 3 \theta(\alpha, \beta) = \underbrace{\frac{1}{2} ||\vec{w}||^2}_{1} +\underbrace{\sum\limits_{i = 1}^N \alpha_i}_{2} + \underbrace{\sum\limits_{i = 1}^N \alpha_i y_i w^T \phi(\vec{x})}_3 θ(α,β)=1 21∣∣w 2+2 i=1Nαi+3 i=1NαiyiwTϕ(x )
将每一项展开带入得:

  1. 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 = 1 2 ( ∑ i = 1 N α i y i ϕ ( x i ⃗ ) ) ⋅ ( ∑ j = 1 N α j y j ϕ ( x j ⃗ ) ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( ϕ ( x i ⃗ ) ϕ ( x j ⃗ ) ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i ⃗ , x j ⃗ ) \frac{1}{2}||\vec{w}||^2 = \frac{1}{2}(\sum\limits_{i = 1}^{N} \alpha_i y_i \phi{(\vec{x_i})}) \cdot (\sum\limits_{j = 1}^{N} \alpha_j y_j \phi(\vec{x_j})) = \frac{1}{2} \sum\limits_{i = 1}^N \sum\limits_{j = 1}^N \alpha_i \alpha_j y_i y_j (\phi(\vec{x_i}) \phi(\vec{x_j})) = \frac{1}{2} \sum\limits_{i = 1}^N \sum\limits_{j = 1}^N \alpha_i \alpha_j y_i y_j K(\vec{x_i}, \vec{x_j}) 21∣∣w 2=21(i=1Nαiyiϕ(xi ))(j=1Nαjyjϕ(xj ))=21i=1Nj=1Nαiαjyiyj(ϕ(xi )ϕ(xj ))=21i=1Nj=1NαiαjyiyjK(xi ,xj )
  2. ∑ i = 1 N α i \sum\limits_{i = 1}^N \alpha_i i=1Nαi
  3. − ∑ i = 1 N α i y i w T ϕ ( x i ⃗ ) = − ∑ i = 1 N α i y i ( ∑ j = 1 N α j y j ϕ ( x j ⃗ ) T ϕ ( x j ⃗ ) ) = − ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( ϕ ( x i ⃗ ) ϕ ( x j ⃗ ) ) = − ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i ⃗ , x j ⃗ ) -\sum\limits_{i = 1}^{N} \alpha_i y_i w^T \phi(\vec{x_i}) = -\sum\limits_{i = 1}^N \alpha_i y_i(\sum\limits_{j = 1}^N \alpha_j y_j \phi(\vec{x_j})^T \phi(\vec{x_j})) = -\sum\limits_{i = 1}^N \sum\limits_{j = 1}^N\alpha_i \alpha_j y_i y_j (\phi(\vec{x_i}) \phi(\vec{x_j})) = -\sum\limits_{i = 1}^N \sum\limits_{j = 1}^N\alpha_i \alpha_j y_i y_j K(\vec{x_i}, \vec{x_j}) i=1NαiyiwTϕ(xi )=i=1Nαiyi(j=1Nαjyjϕ(xj )Tϕ(xj ))=i=1Nj=1Nαiαjyiyj(ϕ(xi )ϕ(xj ))=i=1Nj=1NαiαjyiyjK(xi ,xj )

带入到 θ ( α , β ) \theta(\alpha, \beta) θ(α,β)化简可得:
θ ( α , β ) = ∑ i = 1 N α i − 1 2 ∑ i = i N ∑ j = 1 N α i α j y i y j K ( x i ⃗ , x j ⃗ ) \theta(\alpha, \beta) = \sum\limits_{i = 1}^N \alpha_i - \frac{1}{2}\sum\limits_{i = i}^N \sum\limits_{j = 1}^N \alpha_i \alpha_j y_i y_j K(\vec{x_i}, \vec{x_j}) θ(α,β)=i=1Nαi21i=iNj=1NαiαjyiyjK(xi ,xj )
此时问题转化为:

  • 最大化: θ ( α , β ) = ∑ i = 1 N α i − 1 2 ∑ i = i N ∑ j = 1 N α i α j y i y j K ( x i ⃗ , x j ⃗ ) \theta(\alpha, \beta) = \sum\limits_{i = 1}^N \alpha_i - \frac{1}{2}\sum\limits_{i = i}^N \sum\limits_{j = 1}^N \alpha_i \alpha_j y_i y_j K(\vec{x_i}, \vec{x_j}) θ(α,β)=i=1Nαi21i=iNj=1NαiαjyiyjK(xi ,xj )

  • 限制条件:1. 0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0αiC2. ∑ i = 1 N α i y i = 0 \sum\limits_{i = 1}^N \alpha_i y_i = 0 i=1Nαiyi=0

限制条件1的推导过程: α ≥ 0 ,      β i ≥ 0 ,      α i + β i = C \alpha \geq 0, ~~~~ \beta_i \geq 0, ~~~~ \alpha_i + \beta_i = C α0,    βi0,    αi+βi=C

此时我们最需要求解出参数 α ⃗ \vec{\alpha} α 即可,可以使用 SMO算法 来求解。

测试流程

设新样本为: x ⃗ \vec{x} x

已知模型如下:

  • 若: w ⃗ T ϕ ( x ⃗ ) + b ≥ 0 \vec{w}^T \phi(\vec{x}) + b \geq 0 w Tϕ(x )+b0, 则 y = 1 y = 1 y=1

  • 若: w ⃗ T ϕ ( x ⃗ ) + b ≤ 0 \vec{w}^T \phi(\vec{x}) + b \leq 0 w Tϕ(x )+b0,则 y = − 1 y = -1 y=1

1. 计算 w ⃗ T ϕ ( x ⃗ ) \vec{w}^T\phi(\vec{x}) w Tϕ(x )

w ⃗ T ϕ ( x ⃗ ) = ∑ i = 1 N [ α i y i ϕ ( x i ⃗ ) ⃗ ] T ϕ ( x ⃗ ) = ∑ i = 1 N α i ⃗ y i ϕ ( x i ⃗ ) ϕ ( x ⃗ ) = ∑ i = 1 N α i ⃗ y i K ( x i ⃗ , x ⃗ ) \vec{w}^T \phi(\vec{x}) = \sum\limits_{i = 1}^N[\vec{\alpha_i y_i \phi(\vec{x_i})}]^T \phi(\vec{x}) = \sum\limits_{i = 1}^N \vec{\alpha_i} y_i \phi(\vec{x_i})\phi{(\vec{x})} = \sum\limits_{i = 1}^N \vec{\alpha_i} y_i K(\vec{x_i}, \vec{x}) w Tϕ(x )=i=1N[αiyiϕ(xi ) ]Tϕ(x )=i=1Nαi yiϕ(xi )ϕ(x )=i=1Nαi yiK(xi ,x )

2. 计算 b b b

KKT条件 ∀ i = 1 ∼ K \forall_i = 1 \sim K i=1K α i ∗ = 0 \alpha_i^* = 0 αi=0 g i ( w ∗ ⃗ ) = 0 g_i(\vec{w^*}) = 0 gi(w )=0

(注: α i ∗ \alpha_i^* αi 是与不等式条件组合,因此对应参数 β i \beta_i βi α i \alpha_i αi

在SVM中: ∀ i = 1 ∼ N \forall_i = 1 \sim N i=1N

  1. 要么 β i = 0 \beta_i = 0 βi=0,要么 ξ i = 0 \xi_i = 0 ξi=0
  2. 要么 α i = 0 \alpha_i = 0 αi=0,要么 1 + ξ i − y i w ⃗ T ϕ ( x i ⃗ ) − y i b = 0 1 + \xi_i - y_i\vec{w}^T \phi(\vec{x_i}) - y_ib = 0 1+ξiyiw Tϕ(xi )yib=0

这里取 0 < α i < 0 0 \lt \alpha_i \lt 0 0<αi<0,则 β i = C − α i > 0 \beta_i = C - \alpha_i \gt 0 βi=Cαi>0,此时 β i ≠ 0 \beta_i \not= 0 βi=0,则 ξ i = 0 \xi_i = 0 ξi=0 α i ≠ 0 \alpha_i \not= 0 αi=0,则 1 + ξ i − y i w ⃗ T ϕ ( x i ⃗ ) − y i b = 0 1 + \xi_i - y_i \vec{w}^T \phi(\vec{x_i}) - y_i b = 0 1+ξiyiw Tϕ(xi )yib=0。如此,即可算出:

b = 1 − y i w ⃗ T ϕ ( x i ⃗ ) y i = 1 − y i ∑ j = 1 N α j y j K ( x i , y j ) y i b = \frac{1 - y_i \vec{w}^T \phi(\vec{x_i})}{y_i} = \frac{1 - y_i\sum\limits_{j = 1}^{N}\alpha_j y_j K(x_i, y_j)}{y_i} b=yi1yiw Tϕ(xi )=yi1yij=1NαjyjK(xi,yj)

三、SMO算法*(选看)

SMO算法是一个启发式算法,对于SMO算法,其最终要解决的问题为:

m a x : ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i y i α j y j K ( x i ⃗ , x j ⃗ ) = L ( α ⃗ ) max: \sum\limits_{i = 1}^m \alpha_i - \frac{1}{2}\sum\limits_{i = 1}^m \sum\limits_{j = 1}^m \alpha_i y_i \alpha_j y_j K(\vec{x_i}, \vec{x_j}) = L(\vec{\alpha}) max:i=1mαi21i=1mj=1mαiyiαjyjK(xi ,xj )=L(α )

条件: ∑ i = 1 m α i y i = 0 \sum\limits_{i = 1}^m \alpha_i y_i = 0 i=1mαiyi=0

我们要求得所有 α \alpha α的值,一个简单的思路是固定其它所有 α \alpha α,只单独求一个 α \alpha α,直至迭代所有的 α \alpha α,但是这样是行不通的,对于限制条件 ∑ i = 1 m α i y i = 0 \sum\limits_{i = 1}^m \alpha_i y_i = 0 i=1mαiyi=0,如果我们一个 α \alpha α一个 α \alpha α的求,因为固定了其它 α \alpha α,则需要求的 α \alpha α也是一个已知的数,这是无法求解的。

因此,我们每次求两个变量,如: α 1 , α 2 \alpha_1, \alpha_2 α1,α2然后再求 α 3 , α 4 , ⋯ \alpha_3, \alpha_4, \cdots α3,α4,

初始变量的时候,我们可以随机取 m m m个小值赋给每个 α \alpha α

令: L = m a x ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i y i α j y j K ( x i ⃗ , x j ⃗ ) L = max{\sum\limits_{i = 1}^m \alpha_i - \frac{1}{2}\sum\limits_{i = 1}^m \sum\limits_{j = 1}^m \alpha_i y_i \alpha_j y_j K(\vec{x_i}, \vec{x_j})} L=maxi=1mαi21i=1mj=1mαiyiαjyjK(xi ,xj ),且 ∑ i = 1 m α i y i = 0 \sum\limits_{i = 1}^m \alpha_i y_i = 0 i=1mαiyi=0

由于求解每一对 α \alpha α的方法是相同的,这里以求 α 1 , α 2 \alpha_1,\alpha_2 α1,α2为例:

求解参数 α 1 α 2 \alpha_1 \alpha_2 α1α2

L ( α 1 , α 2 ) = α 1 + α 2 + ∑ i = 3 m α i − 1 2 [ α 1 y 1 α 1 y 1 K ( x 1 ⃗ , x 1 ⃗ ) + 2 α 1 y 1 α 2 y 2 K ( x 1 ⃗ , x 2 ⃗ ) + 2 ∑ i = 3 m α 1 y 1 α i y i K ( x 1 ⃗ , x i ⃗ ) + α 2 y 2 α 2 y 2 K ( x 2 ⃗ , x 2 ⃗ ) + 2 ∑ i = 3 m α 2 y 2 α i y i K ( x 2 ⃗ , x i ⃗ ) + ∑ i = 3 m ∑ j = 3 m α i y i α j y j K ( x i ⃗ , x j ⃗ ) ] L(\alpha_1, \alpha_2) = \alpha_1 + \alpha_2 + \sum\limits_{i = 3}^{m}\alpha_i - \frac{1}{2}[\alpha_1y_1\alpha_1y_1K(\vec{x_1} , \vec{x_1}) + 2\alpha_1 y_1 \alpha_2 y_2K(\vec{x_1}, \vec{x_2}) + 2\sum\limits_{i = 3}^m \alpha_1 y_1 \alpha_i y_i K(\vec{x_1}, \vec{x_i}) + \alpha_2 y_2 \alpha_2 y_2 K(\vec{x_2}, \vec{x_2}) \\ + 2\sum\limits_{i = 3}^m \alpha_2 y_2 \alpha_i y_i K(\vec{x_2}, \vec{x_i}) + \sum\limits_{i = 3}^m \sum\limits_{j = 3}^m \alpha_i y_i \alpha_j y_j K(\vec{x_i}, \vec{x_j})] L(α1,α2)=α1+α2+i=3mαi21[α1y1α1y1K(x1 ,x1 )+2α1y1α2y2K(x1 ,x2 )+2i=3mα1y1αiyiK(x1 ,xi )+α2y2α2y2K(x2 ,x2 )+2i=3mα2y2αiyiK(x2 ,xi )+i=3mj=3mαiyiαjyjK(xi ,xj )]

定义: K i j = K ( x i ⃗ , x j ⃗ ) K_{ij} = K(\vec{x_i}, \vec{x_j}) Kij=K(xi ,xj )

由于 ∑ i = 3 m α i \sum\limits_{i = 3}^{m}\alpha_i i=3mαi ∑ i = 3 m ∑ j = 3 m α i y i α j y j K ( x i ⃗ , x j ⃗ ) \sum\limits_{i = 3}^m \sum\limits_{j = 3}^m \alpha_i y_i \alpha_j y_j K(\vec{x_i}, \vec{x_j}) i=3mj=3mαiyiαjyjK(xi ,xj )是一个常数项,可以进行省略。由于 y = 1 y = 1 y=1 y = − 1 y = -1 y=1,因此一定有: y 2 = 1 y^2 = 1 y2=1

化简转换得: L ‘ ( α 1 , α 2 ) = α 1 + α 2 − 1 2 [ α 1 2 K 11 + 2 α 1 y 1 α 2 y 2 K 12 + 2 ∑ i = 3 m α 1 y 1 α i y i K 1 i + α 2 2 K 22 + 2 ∑ i = 3 m α 2 y 2 α i y i K 2 i ] L^`(\alpha_1, \alpha_2) = \alpha_1 + \alpha_2 - \frac{1}{2}[\alpha_1^2 K_{11} + 2\alpha_1 y_1 \alpha_2 y_2 K_{12} + 2\sum\limits_{i = 3}^m \alpha_1 y_1 \alpha_i y_i K_{1i} + \alpha_2^2 K_{22} + 2\sum\limits_{i = 3}^m \alpha_2 y_2 \alpha_i y_i K_{2i}] L(α1,α2)=α1+α221[α12K11+2α1y1α2y2K12+2i=3mα1y1αiyiK1i+α22K22+2i=3mα2y2αiyiK2i]

因为限制条件: ∑ i = 1 m α i y i = 0 \sum\limits_{i = 1}^m \alpha_i y_i = 0 i=1mαiyi=0,所以有: α 1 y 1 + α 2 y 2 + ∑ i = 3 m α i y i = 0 \alpha_1 y_1 + \alpha_2 y_2 + \sum\limits_{i = 3}^m \alpha_i y_i = 0 α1y1+α2y2+i=3mαiyi=0

令: ∑ i = 3 m α i y i = − ( α 1 y 1 + α 2 y 2 ) = − C \sum\limits_{i = 3}^m \alpha_i y_i = -(\alpha_1 y_1 + \alpha_2 y_2) = -C i=3mαiyi=(α1y1+α2y2)=C,则有: α 1 y 1 + α 2 y 2 = C \alpha_1 y_1 + \alpha_2 y_2 = C α1y1+α2y2=C,可得: α 1 = y 1 ( C − α 2 y 2 ) \alpha_1 = y_1(C - \alpha_2 y_2) α1=y1(Cα2y2)

α 1 \alpha_1 α1带入 L ‘ ( α 1 , α 2 ) L^`(\alpha_1, \alpha_2) L(α1,α2)得:

L ( α 2 ) = y 1 ( C − α 2 y 2 ) + α 2 − 1 2 [ ( C − α 2 y 2 ) 2 K 11 + 2 ( C − α 2 y 2 ) α 2 y 2 K 12 + α 2 2 K 22 + 2 ∑ i = 3 m ( C − α 2 y 2 ) α i y i K 1 i + 2 ∑ i = 3 m α 2 y 2 α i y i K 2 i ] L(\alpha_2) = y_1(C - \alpha_2y_2) + \alpha_2 - \frac{1}{2}[(C - \alpha_2 y_2)^2K_{11} + 2(C - \alpha_2 y_2)\alpha_2y_2 K_{12} + \alpha_2^2K_{22} + 2\sum\limits_{i = 3}^m(C - \alpha_2y_2) \alpha_iy_i K_{1i} + 2\sum\limits_{i = 3}^m \alpha_2 y_2 \alpha_i y_i K_{2i}] L(α2)=y1(Cα2y2)+α221[(Cα2y2)2K11+2(Cα2y2)α2y2K12+α22K22+2i=3m(Cα2y2)αiyiK1i+2i=3mα2y2αiyiK2i]

α 2 \alpha_2 α2求导得:

∂ L ∂ α 2 = − y 1 y 2 + 1 − 1 2 [ 2 ( C − α 2 y 2 ) ( − y 2 ) K 11 + 2 C y 2 K 12 − 4 α 2 K 12 + 2 α 2 K 22 − 2 ∑ i = 3 m y 2 α i y i K 1 i + ∑ i = 3 m y 2 α i y i K 2 i ] = 1 − y 1 y 2 + C y 2 K 11 − α 2 K 11 − C y 2 K 12 + 2 α 2 K 12 − α 2 K 22 + ∑ i = 3 m y 2 α i y i K 1 i − ∑ i = 3 m y 2 α i y i K 2 i \frac{\partial{L}}{\partial{\alpha_2}} = -y_1y_2 + 1 -\frac{1}{2}[2(C - \alpha_2y_2)(-y_2)K_{11} + 2Cy_2K_{12} - 4\alpha_2K_{12} + 2\alpha_2K_{22} - 2\sum\limits_{i = 3}^m y_2 \alpha_i y_i K_{1i} + \sum\limits_{i = 3}^m y_2 \alpha_i y_i K_{2i}] \\ = 1 - y_1y_2 + Cy_2 K_{11} - \alpha_2K_{11} - Cy_2K_{12} + 2\alpha_2 K_{12} - \alpha_2K_{22} + \sum\limits_{i = 3}^m y_2 \alpha_i y_i K_{1i} - \sum\limits_{i = 3}^m y_2\alpha_i y_i K_{2i} α2L=y1y2+121[2(Cα2y2)(y2)K11+2Cy2K124α2K12+2α2K222i=3my2αiyiK1i+i=3my2αiyiK2i]=1y1y2+Cy2K11α2K11Cy2K12+2α2K12α2K22+i=3my2αiyiK1ii=3my2αiyiK2i

∂ L ∂ α 2 = 0 \frac{\partial{L}}{\partial{\alpha_2}} = 0 α2L=0,并提取 α 2 \alpha_2 α2

α 2 n e w ( K 11 + K 22 − 2 K 12 ) = 1 − y 1 y 2 + C y 2 K 11 − C y 2 K 12 + ∑ i = 3 m y 2 α i y i K 1 i − ∑ i = 3 m y 2 α i y i K 2 i = y 2 ( y 2 − y 1 + C K 11 − C K 12 − ∑ i = 3 m α i y i K 1 i − ∑ i = 3 m α i y i K 2 i ) \alpha_2^{new}(K_{11} + K_{22} - 2K_{12}) = 1 - y_1y_2 + Cy_2 K_{11} - Cy_2K_{12} + \sum\limits_{i = 3}^m y_2 \alpha_i y_i K_{1i} - \sum\limits_{i = 3}^m y_2\alpha_iy_iK_{2i} \\ = y_2(y_2 - y_1 + CK_{11} - CK_{12} - \sum\limits_{i = 3}^m \alpha_i y_i K_{1i} - \sum\limits_{i = 3}^m \alpha_i y_i K_{2i}) α2new(K11+K222K12)=1y1y2+Cy2K11Cy2K12+i=3my2αiyiK1ii=3my2αiyiK2i=y2(y2y1+CK11CK12i=3mαiyiK1ii=3mαiyiK2i)

已知: α 1 o l d y 1 + α 2 o l d y 2 = C \alpha_1^{old}y_1 + \alpha_2^{old}y_2 = C α1oldy1+α2oldy2=C,可以替换公式中的 C C C,可得:
α 2 n e w ( K 11 + K 22 − 2 K 12 ) = y 2 ( y 2 − y 1 + α 1 o l d y 1 K 11 + α 2 o l d y 2 K 11 − α 1 o l d y 1 K 12 − α 2 o l d y 2 K 12 + f ( x 1 ) − α 1 o l d y 1 K 11 − α 2 o l d y 2 k 12 − b ⏟ @ 1 − f ( x 2 ) + α 1 o l d y 1 K 12 + α 2 o l d y 2 K 22 + b ⏟ @ 2 ) \alpha_2^{new}(K_{11} + K_{22} - 2K_{12}) = y_2(y_2 - y_1 + \alpha_1^{old}y_1K_{11} + \alpha_2^{old}y_2K_{11} - \alpha_1^{old}y_1K_{12} - \alpha_2^{old}y_2K_{12} \\+ \underbrace{ f(x_1) - \alpha_1^{old}y_1K_{11} - \alpha_2^{old}y_2 k_{12} - b}_{@1} - \underbrace{f(x_2) + \alpha_1^{old}y_1K_{12} + \alpha_2^{old} y_2 K_{22} + b}_{@2}) α2new(K11+K222K12)=y2(y2y1+α1oldy1K11+α2oldy2K11α1oldy1K12α2oldy2K12+@1 f(x1)α1oldy1K11α2oldy2k12b@2 f(x2)+α1oldy1K12+α2oldy2K22+b)

@1 与 @2的推导过程:

有SVM推论过程有: ∂ L ∂ w = > w = ∑ i = 1 m α i y i x i \frac{\partial{L}}{\partial{w}} => w = \sum\limits_{i = 1}^m \alpha_i y_i x_i wL=>w=i=1mαiyixi,所以可得: f ( x ) = w T x + b = ∑ i = 1 m α i y i x i T x + b f(x) = w^Tx + b = \sum\limits_{i = 1}^m \alpha_iy_i x_i^T x + b f(x)=wTx+b=i=1mαiyixiTx+b

对于 f ( x 1 ) f(x_1) f(x1),可得公式: f ( x 1 ) = α 1 y 1 x 1 T x 1 + α 2 y 2 x 2 T x 1 + ∑ i = 3 m α i y i x i T x 1 + b f(x_1) = \alpha_1 y_1 x_1^Tx_1 + \alpha_2y_2x_2^Tx_1 + \sum\limits_{i = 3}^m \alpha_i y_ix_i^Tx_1 + b f(x1)=α1y1x1Tx1+α2y2x2Tx1+i=3mαiyixiTx1+b

从而可以推理出: ∑ i = 3 m α i y i K 1 i = f ( x 1 ) − α 1 y 1 K 11 − α 2 y 2 K 12 − b \sum\limits_{i = 3}^m \alpha_i y_i K_{1i} = f(x_1) - \alpha_1 y_1 K_{11} - \alpha_2 y_2 K_{12} - b i=3mαiyiK1i=f(x1)α1y1K11α2y2K12b

同理: ∑ i = 3 m α i y i K 2 i = f ( x 2 ) − α 1 y 1 K 12 − α 2 y 2 K 22 − b = y 2 [ f ( x 1 ) − y 1 − ( f ( x 2 ) − y 2 + α 2 o l d y 2 ( K 11 + K 22 − 2 K 12 ) ] \sum\limits_{i = 3}^m \alpha_i y_i K_{2i} = f(x_2) - \alpha_1 y_1 K_{12} - \alpha_2y_2K_{22} - b = y_2[f(x_1) - y_1 -(f(x_2) - y_2 + \alpha_2^{old}y_2(K_{11} +K_{22} -2K_{12})] i=3mαiyiK2i=f(x2)α1y1K12α2y2K22b=y2[f(x1)y1(f(x2)y2+α2oldy2(K11+K222K12)]

定义通式

f ( x 1 ) − y 1 = E 1 f(x_1) - y_1 = E_1 f(x1)y1=E1 f ( x 2 ) − y 2 = E 2 f(x_2) - y_2 = E_2 f(x2)y2=E2 K 11 + K 22 − 2 K 12 = η K_{11} + K_{22} - 2K_{12} = \eta K11+K222K12=η

则有: α 2 n e w η = y 2 ( E 1 − E 2 + α 2 o l d y 2 η ) \alpha_2^{new} \eta = y_2(E_1 - E_2 + \alpha_2^{old}y_2 \eta) α2newη=y2(E1E2+α2oldy2η),可推出: α 2 n e w = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new} = \alpha_2^{old} + \frac{y_2(E_1 - E_2)}{\eta} α2new=α2old+ηy2(E1E2),这样求出 α 2 n e w \alpha_2^{new} α2new即可求出 α 1 n e w \alpha_1^{new} α1new

代码实验

实验一、线性可分

1. 加载数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
from scipy.io import loadmat

raw_data = loadmat("ex6data1.mat")   # 加载matlab格式的数据集
raw_data

在这里插入图片描述

在这里插入图片描述

2. 数据可视化
data = pd.DataFrame(raw_data['X'],columns=['X1','X2'])
data['y'] = raw_data['y']

positive = data[data['y'].isin([1])]
negative = data[data['y'].isin([0])]

fig,ax = plt.subplots(figsize = (12,8))
ax.scatter(positive['X1'],positive['X2'],s = 50,marker = 'x',label = 'Positive')
ax.scatter(negative['X1'],negative['X2'],s = 50,marker = 'o',label = 'Negative')
ax.legend()
plt.show()

在这里插入图片描述

3. 设定模型

svm.LinearSVC()用于分类问题,svm.LinearSVR()用于回归问题。

svm.LinearSVC()参数讲解:

  • C:正则化参数,正则化的强度与 C 成反比,必须严格为正
  • loss:定义损失函数,默认为squared_hinge
  • max_iter:指定优化算法的最大迭代次数
  • dual:指定是使用对偶算法还是原始问题的算法来解决优化问题。当样本数量大于特征数量时,推荐设置为 False
  • tol: 指定优化算法的容忍度,用于确定算法何时停止
  • random_state: 控制随机数生成的种子,用于数据的随机打乱
from sklearn import svm
svc = svm.LinearSVC(C = 1,loss = 'hinge',max_iter = 10000, dual=True)   #C越大就会趋向分类正确
svc

在这里插入图片描述

4. 模型拟合
svc.fit(data[['X1','X2']],data['y'])
svc.score(data[['X1','X2']],data['y'])

在这里插入图片描述

5. 增大C的值,重新进行拟合

C的值是用于调整软间隔的,如果C的值过小,则会导致模型过拟合,C的值过大,会导致模型欠拟合。

svc2 = svm.LinearSVC(C =100,loss = 'hinge',max_iter = 50000, dual=True)
svc2.fit(data[['X1','X2']],data['y'])
svc2.score(data[['X1','X2']],data['y'])

在这里插入图片描述

6. 对比两个模型的效果
data['SVM 1 Confidence'] = svc.decision_function(data[['X1','X2']])   # 可以表示可信度,颜色越深表示可信度越高,否则可信度越低

fig,ax = plt.subplots(figsize = (12,8))
ax.scatter(data['X1'],data['X2'],s = 50,c = data['SVM 1 Confidence'],cmap = 'seismic')
ax.set_title('SVM (C = 1) Decision Confidence')
plt.show()

在这里插入图片描述

data['SVM 2 Confidence'] = svc2.decision_function(data[['X1','X2']])

fig,ax = plt.subplots(figsize = (12,8))
ax.scatter(data['X1'],data['X2'],s = 50,c = data['SVM 2 Confidence'],cmap = 'seismic')
ax.set_title('SVM (C = 100) Decision Confidence')
plt.show()

在这里插入图片描述

实验二、线性不可分

1. 定义高斯核函数
def gaussian_kernel(x1,x2,sigma):
    #INPUT:连个维度的值x1,x2,高斯核参数sigma
    #OUTPUT:高斯核函数计算后的值
    #TODO:根据参数和上输入的数据计算高斯核函数
    
    #STEP:计算高斯核函数,这里的输入时向量化
    return np.exp(-(np.sum((x1 - x2)**2)/(2*(sigma**2))))
2. 测试高斯核函数
x1 = np.array([1.0,2.0,1.0])
x2 = np.array([0.0,4.0,-1.0])
sigma = 2

gaussian_kernel(x1,x2,sigma)

在这里插入图片描述

3. 加载数据集并进行数据可视化
raw_data = loadmat("ex6data2.mat")

data = pd.DataFrame(raw_data['X'],columns=['X1','X2'])
data['y'] = raw_data['y']

positive = data[data['y'].isin([1])]
negative = data[data['y'].isin([0])]

fig,ax = plt.subplots(figsize = (12,8))
ax.scatter(positive['X1'],positive['X2'],s = 30,marker = 'x',label = 'Positive')
ax.scatter(negative['X1'],negative['X2'],s = 30,marker = 'o',label = 'Negative')
ax.legend()
plt.show()

在这里插入图片描述

4. 设定模型
svc = svm.SVC(C = 100,gamma=10,probability=True)
svc

在这里插入图片描述

5. 模型拟合
svc.fit(data[['X1','X2']],data['y'])
svc.score(data[['X1','X2']],data['y'])

在这里插入图片描述

6. 模型效果展示
data['Probability'] = svc.predict_proba(data[['X1','X2']])[:,0]

fig,ax = plt.subplots(figsize = (12,8))
ax.scatter(data['X1'],data['X2'],s = 30,c = data['Probability'],cmap = 'Reds')
plt.show()

在这里插入图片描述

实验三、寻找最优参数

raw_data = loadmat("ex6data3.mat")

X = raw_data['X']
Xval = raw_data['Xval']
y = raw_data['y'].ravel()
yval = raw_data['yval'].ravel()

#设置可选参数
C_values = [0.01,0.03,0.1,0.3,1,3,10,30,100]
gamma_values = [0.01,0.003,0.1,0.3,1,3,10,30,100]
#初始化变量
best_score = 0
best_params = {'C':None,'gamma':None}

#TODO:寻找SVM模型最优的超参数
#STEP:遍历每一个超参数
for C in C_values:
    for gamma in gamma_values:
        #STEP2:调用SVM包,计算当前参数下的得分
        
        svc = svm.SVC(C = C,gamma = gamma)
        svc.fit(X,y)
        score = svc.score(Xval,yval)
        #STEP3:替换得分最高的超参数组合
        if score > best_score:
            best_score = score
            best_params['C'] = C
            best_params['gamma'] = gamma
            
best_score,best_params

在这里插入图片描述

实验四、构建垃圾分类器

1. 加载数据
spam_train = loadmat('spamTrain.mat')
spam_test = loadmat('spamTest.mat')

spam_train

在这里插入图片描述

2. 转换数据格式
#TODO:获取训练和测试数据,这里应 注意把标签y矩阵拉直
X = spam_train['X']
Xtest = spam_test['Xtest']
y = spam_train['y'].ravel()
ytest = spam_test['ytest'].ravel()

X.shape,y.shape,Xtest.shape,ytest.shape

在这里插入图片描述

3. 设定模型,并拟合
svc = svm.SVC()
svc.fit(X,y)
print('Training accuracy = {0}%'.format(np.round(svc.score(X,y)*100,2)))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值