机器学习西瓜书笔记(六) 第六章支持向量机+代码

第六章 支持向量机

6.1 间隔与支持向量

给定训练样本集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , y i ∈ { − 1 , + 1 } D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)},y_i\in\{-1,+1\} D=(x1,y1),(x2,y2),...,(xm,ym),yi{1,+1},分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。但如图所示,能将训练样本分开的划分超平面可能有很多,应该找到哪一个?

在这里插入图片描述

直观上看,应该去找位于两类训练样本"正中间"的划分超平面,即图中加粗的"线条",因为该划分超平面对训练样本局部扰动的"容忍"性最好。例如,由于训练集的局限性或噪声的因素,训练集外的样本可能比图中的训练样本更接近两个类的分隔界,这将使许多划分超平面出现错误,而红色的超平面受影响最小。换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。支持向量的意义之一:提高泛化能力

在样本空间中,划分超平面可通过如下线性方程来描述: w T x + b = 0 w^Tx+b=0 wTx+b=0。其中 w = ( w 1 ; w 2 ; . . . ; w d ) 为法向量,决定了超平面的方向; b 为位移项决定了超平面与原点之间的距离。显然,划分超平面可被法向量 w 和位移 b 确定,下面将其记为 ( w , b ) 。样本空间中任意点 x 到超平曲 ( w , b ) 的距离可写为 w=(w_1;w_2;...;w_d)为法向量,决定了超平面的方向;b为位移项决定了超平面与原点之间的距离。显然,划分超平面可被法向量w和位移b确定,下面将其记为(w,b)。样本空间中任意点x到超平曲(w,b)的距离可写为 w=(w1;w2;...;wd)为法向量,决定了超平面的方向;b为位移项决定了超平面与原点之间的距离。显然,划分超平面可被法向量w和位移b确定,下面将其记为(w,b)。样本空间中任意点x到超平曲(w,b)的距离可写为r=\frac{w^Tx+b}{||w||}$。wTx+b会随wb的按比例缩放而缩放,但超平面本身不会改变,比如wTx+b=a,令w’=2w,b’=2b,则w’Tx+b’=2a,但wb和w’b’代表的超平面是一样的,因此不妨设wTx+b=1,这既让式子便于计算,又不影响最大化间隔距离2r的计算。这也是下文令支持向量为wTx+b=1的原因。涉及的数学定义,请参考函数距离、几何距离

假设超平面(w,b)能将训练样本正确分类,即对于 ( x i , y i ) ∈ D (x_i,y_i)\in D (xi,yi)D,若 y i = + 1 y_i=+1 yi=1,则有 w T x + i + b > 0 w^Tx+i+b>0 wTx+i+b>0;若 y i = − 1 y_i=-1 yi=1,则有 w T x + i + b < 0 w^Tx+i+b<0 wTx+i+b<0。令

{ w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 \left\{\begin{matrix} w^Tx_i+b \geq +1 & , & y_i=+1\\ w^Tx_i+b \leq -1 & , & y_i=-1\\ \end{matrix}\right. {wTxi+b+1wTxi+b1,,yi=+1yi=1

如图所示,距离超平面最近的这几个训练样本点使上式的等号成立,它们被称为"支待向量"(support vector),两个异类支待向量到超平面的距离之和为 γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=∣∣w∣∣2,它被称为“间隔"(margin)。

在这里插入图片描述

欲找到具有"最大间隔"(maximum margin)的划分超平向,也就是要找到能满足上式中约束的参数w和b,使得 γ \gamma γ最大,即

m a x w , b 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m \begin{matrix} max_{w,b} \frac{2}{||w||} & \\ s.t. & y_i(w^Tx_i+b)\geq1, i=1,2,...,m \end{matrix} maxw,b∣∣w∣∣2s.t.yi(wTxi+b)1,i=1,2,...,m

显然最大化间隔等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w2,于是上式重写为:
m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m \begin{matrix} min_{w,b} \frac{1}{2}||w||^2 & \\ s.t. & y_i(w^Tx_i+b)\geq1, i=1,2,...,m \end{matrix} minw,b21∣∣w2s.t.yi(wTxi+b)1,i=1,2,...,m

这就是支持向量机(Support Vector Machine,简称SVM)的基本型。

小结

支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于分类和回归任务。它基于统计学习理论,特别关注找到数据点之间的最优边界,即最大间隔分割数据,其核心概念和特点如下:

  1. 基本原理
  • 间隔:数据点到决策边界的距离。SVM尝试最大化这个间隔。
  • 支持向量:最靠近决策边界的数据点,它们决定了边界的位置和方向。
  1. 线性可分情况
  • 当数据是线性可分的,SVM可以找到一个超平面,将不同类别的数据点分开。
  1. 损失函数
  • SVM的优化问题通常通过求解一个凸二次规划问题来实现,目标是最小化损失函数,同时最大化间隔。
  1. 多类分类
  • 对于多类分类问题,SVM可以采用一对多(One-vs-All)或一对一(All-vs-All)的策略。
  1. 应用领域
  • SVM广泛应用于各种领域,包括图像识别、生物信息学、文本分类等。
  1. 优缺点
  • 优点:理论上具有很好的泛化能力,对于高维数据表现良好。
  • 缺点:对于大规模数据集,训练过程可能比较慢;对参数选择敏感。

SVM是一种强大的机器学习模型,通过找到数据点之间的最优边界,它能够在多种情况下提供良好的分类和回归性能。

6.2 对偶问题

为求得向量机的超平面 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b中参数w和b,需要求解上式最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w2,由于该式本身为凸二次规划,故利用拉格朗日乘子法将其转化为对应的对偶问题。具体地,对约束添加乘子 α i ≥ 0 \alpha_i\geq0 αi0,得到拉格朗日函数:

  • L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(w,b,\alpha)=\frac{1}{2}||w||^2+\sum_{i=1}^{m}\alpha_i(1-y_i(w^Tx_i+b)) L(w,b,α)=21∣∣w2+i=1mαi(1yi(wTxi+b))

其中 α = ( α 1 , α 2 , . . . , α m ) \alpha=(\alpha_1,\alpha_2,...,\alpha_m) α=(α1,α2,...,αm)。令 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)。对w和b的偏导为零得到: w = ∑ i = 1 m α i y i x i w=\sum_{i=1}^m\alpha_iy_ix_i w=i=1mαiyixi ∑ i = 1 m α i y i = 0 \sum_{i=1}^m\alpha_iy_i=0 i=1mαiyi=0。将其带入 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)得到对偶问题:

  • 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 s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m \begin{matrix} max_\alpha \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j \\ s.t. \sum_{i=1}^m\alpha_iy_i=0 \\ \alpha_i\geq0 , i=1,2,...,m \end{matrix} maxαi=1mαi21i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=0αi0,i=1,2,...,m

解出 α \alpha α后,求出w和b即可得到模型 f ( x ) = w T x + b = ∑ i = 1 m α i y i x i T x i + b f(x)=w^Tx+b=\sum_{i=1}^m\alpha_iy_ix_i^Tx_i+b f(x)=wTx+b=i=1mαiyixiTxi+b。从对偶问题解出的 α i \alpha_i αi是式中的拉格朗日乘子,它恰对应着训练样本 ( x i , y i ) (x_i,y_i) (xi,yi)。注意到式中有不等式约束,因此上述过程需满足KKT(Karush-Kuhn-Tucker)条件,即要求

  • { α i ≥ 0 y i f ( x i ) − 1 ≥ 0 α i ( y i f ( x i ) − 1 ) = 0 \left\{ \begin{matrix} \alpha_i\geq0 \\ y_if(x_i)-1\geq0 \\ \alpha_i(y_if(x_i)-1) = 0 \end{matrix}\right. αi0yif(xi)10αi(yif(xi)1)=0

于是,对任意训练样本 ( x i , y i ) (x_i,y_i) (xi,yi),总有 α i = 0 \alpha_i=0 αi=0 y i f ( x i ) = 1 y_if(x_i)=1 yif(xi)=1。若 α i = 0 \alpha_i=0 αi=0,则该样本将不会在式的求和中出现,也就不会对f(x)有任何影响;若 α i > 0 \alpha_i>0 αi>0,则必有 y i f ( x i ) = 1 y_if(x_i)=1 yif(xi)=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αiyi=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以外的参数,求解对偶问题获得更新后的 α i \alpha_i αi α j \alpha_j αj

注意到只需选取的 α i \alpha_i αi α j \alpha_j αj中有一个不满足KKT条件, 目标函数就会在迭代后减小。直观来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值减幅越大。于是,SMO先选取违背KKT条件程度最大的变量,第二个变量应选择一个使目标函数值减小最快的变最,但由于比较各变量所对应的目标函数值减幅的复杂度过高,因此SMO采用了一个启发式,使选取的两变量所对应样本之间的间隔最大。

SMO算法之所以高效恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说仅考虑 α i \alpha_i αi α j \alpha_j αj时,对偶问题中的约束可重写为 α i y i + α j y j = c , α i ≥ 0 , α j ≥ 0 \alpha_iy_i+\alpha_jy_j=c,\alpha_i\geq0,\alpha_j\geq0 αiyi+αjyj=c,αi0,αj0。其中, c = − ∑ k ≠ i , j α k y k c=-\sum_{k\neq i,j}\alpha_ky_k c=k=i,jαkyk是使 ∑ i = 1 m α i y i = 0 \sum_{i=1}^m\alpha_iy_i=0 i=1mαiyi=0成立的常数。利用上式,可计算出 α i \alpha_i αi α j \alpha_j αj

确定偏移项b,对任意支持向量 ( x s , y s ) (x_s,y_s) (xs,ys)都有 y s f ( x s ) = 1 y_sf(x_s)=1 ysf(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(iSαiyixiTxs+b)=1,其中 S = { i ∣ α i > 0 , i = 1 , 2 , . . . , m } S=\{i|\alpha_i>0,i=1,2,...,m\} S={iαi>0,i=1,2,...,m}。故 b = 1 ∣ S ∣ ∑ s ∈ S ( y s − ∑ i ∈ S α i y i x i T x s ) b=\frac{1}{|S|}\sum_{s \in S}(y_s-\sum_{i \in S}\alpha_iy_ix_i^Tx_s) b=S1sS(ysiSαiyixiTxs)

小结

对偶问题本身来自于支持向量机原始问题的优化问题。在SVM中,原始问题是一个凸二次规划问题,通常难以直接求解。通过拉格朗日乘子法将其转化为对偶问题,在满足KKT条件下,可以简化求解过程,并且保持问题的凸性,从而确保找到全局最优解。之后寻觅问题解的过程可以采用不同参数求解方法,本节给出的是经典的SMO方法。

6.3 核函数

在之前,都假设训练样本线性可分,即存在一个划分超平面能将训练样本正确分类。然而在现实任务中,原始样本空间不一定线性可分,即不一定存在一个能正确分两类样本的超平面,如图:
在这里插入图片描述

对这样的问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分(与LDA相反)。例如在上图中,若将原始的二维空间映射到一个合适的三维空间,就能找到一个合适的划分超平面。幸运的是,如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分。

ϕ ( x ) \phi(x) ϕ(x)表示将x映射后的特征向量,于是,在特征空间中划分超平面的对应模型可以表示为: f ( x ) = w T ϕ ( x ) + b f(x)=w^T\phi(x)+b f(x)=wTϕ(x)+b,有: m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T ϕ ( x i ) + b ) ≥ 1 , i = 1 , 2 , . . . , m \begin{matrix}min_{w,b} \frac{1}{2}||w||^2 \\ s.t. y_i(w^T\phi(x_i)+b) \geq 1, i = 1,2,...,m\end{matrix} minw,b21∣∣w2s.t.yi(wTϕ(xi)+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 ) s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m \begin{matrix} max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j\phi(x_i)^T\phi(x_j) \\ s.t. \sum_{i=1}^m \alpha_iy_i=0 \\ \alpha_i \geq 0, i=1,2,...,m\end{matrix} maxαi=1mαi21i=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj)s.t.i=1mαiyi=0αi0,i=1,2,...,m

求解上式涉及到计算 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T\phi(x_j) ϕ(xi)Tϕ(xj),这是样本 x i x_i xi x j x_j xj映射到特征空间之后的内积,直接计算很困难,故设计一个函数: k ( x i , x j ) = < ϕ ( x i ) , ϕ ( x j ) > = ϕ ( x i ) T ϕ ( x j ) k(x_i,x_j)=<\phi(x_i),\phi(x_j)>=\phi(x_i)^T\phi(x_j) k(xi,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj),即 x i x_i xi x j x_j xj映射到特征空间之后的内积等于它们在原始样本空间中通过一个特殊函数来计算的结果,于是上式变为:

  • m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j k ( x i , x j ) s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m \begin{matrix} max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_jk(x_i,x_j) \\ s.t. \sum_{i=1}^m \alpha_iy_i=0 \\ \alpha_i \geq 0, i=1,2,...,m\end{matrix} maxαi=1mαi21i=1mj=1mαiαjyiyjk(xi,xj)s.t.i=1mαiyi=0αi0,i=1,2,...,m

求解后得到:

  • f ( x ) = w T ϕ ( x ) + b = ∑ i = 1 m α i y i ϕ ( x i ) T ϕ ( x ) + b = ∑ i = 1 m α i y i k ( x i , x j ) + b \begin{matrix}f(x) = w^T\phi(x)+b \\ =\sum_{i=1}^m \alpha_iy_i\phi(x_i)^T\phi(x)+b \\ =\sum_{i=1}^m \alpha_iy_ik(x_i,x_j)+b\end{matrix} f(x)=wTϕ(x)+b=i=1mαiyiϕ(xi)Tϕ(x)+b=i=1mαiyik(xi,xj)+b

这里引入的函数就是"核函数"(kernel function)。上式显示出模型最优解科通训练样本的核函数展开,这一展开式又称为"支持向量模式"(support vector expansion)。
显然若已知合适映射的具体形式,就可以写出核函数,所以有以下定理:
X X X为输入空间, k ( ⋅ , ⋅ ) k(\cdot,\cdot) k(,)是定义在 X × X X\times X X×X上的对称函数,则k是核函数当且仅当对于任意数据 D = x 1 , x 2 , . . . , x m D={x_1,x_2,...,x_m} D=x1,x2,...,xm,"核矩阵"K总是半正定的:
在这里插入图片描述

上述定理表明,只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。事实上,对于一个半正定核矩阵,总能找到一个与之对应的映射 ϕ \phi ϕ。即任何一个核函数都隐式的定义了一个称为"再生核希尔伯特空间"(RKHS)的特征空间。核函数如果选择不佳,就意味着样本映射到了一个不合适的特征空间,很可能导致性能不佳。

下标列出几种常见的核函数:
在这里插入图片描述

此外还有如下函数组合也是核函数:

  • k 1 k_1 k1 k 2 k_2 k2为核函数,则对任意正数 γ 1 、 γ 2 \gamma_1、\gamma_2 γ1γ2,其线性组合 γ 1 k 1 + γ 2 k 2 \gamma_1k_1+\gamma_2k_2 γ1k1+γ2k2也是核函数。
  • k 1 k_1 k1 k 2 k_2 k2为核函数,则其直积 k 1 ⊗ k 2 ( x , z ) = k 1 ( x , z ) k 2 ( x , z ) k_1\otimes k_2(x,z)=k_1(x,z)k_2(x,z) k1k2(x,z)=k1(x,z)k2(x,z)也是核函数。
  • k 1 k_1 k1为核函数,则对于任意函数 g ( x ) g(x) g(x) g ( x ) k 1 ( x , z ) g ( z ) g(x)k_1(x,z)g(z) g(x)k1(x,z)g(z)也是核函数。

小结

核函数(Kernel Function)是支持向量机(SVM)中一个非常关键的概念,它允许SVM在高维空间中有效地处理非线性问题。以下是核函数的一些核心要点:

  1. 核函数的定义
    核函数是一种函数,它计算两个向量的内积,而无需显式地映射这些向量到高维空间。

  2. 核函数的作用

  • 核函数的主要作用是将原始数据空间映射到一个更高维的特征空间,在这个特征空间中,数据可能具有线性可分性。
  • 核函数使得SVM能够处理非线性问题,同时避免了直接在高维空间中进行计算,从而节省了计算资源。
  1. 核函数的选择
    核函数的选择依赖于具体问题和数据的特性。例如,对于简单的非线性问题,多项式核可能足够;而对于更复杂的问题,RBF核可能更合适。

  2. 核函数的性质
    有效的核函数必须满足正定性或半正定性,这意味着核矩阵(使用核函数计算的成对数据点的内积矩阵)必须是半正定的。

  3. 计算优势
    核函数允许SVM在高维空间中进行操作,同时避免了高维空间中计算和存储的高昂代价。

  4. 核方法的扩展
    核技巧不仅限于SVM,它也被广泛应用于其他机器学习算法中,如核岭回归、核PCA等。

  5. 核函数的参数选择
    核函数中的参数对模型的性能有很大影响,通常通过交叉验证等方法进行选择。

核函数是SVM处理非线性问题的关键技术,它提供了一种在原始特征空间中无法线性分割的数据在高维特征空间中进行线性分割的可能性。

6.4 软间隔与正则化

在前面的讨论中,我们 直假定训练样本在样本空间或特征空间中是线性可分的,即存在一个超平面能将不同类的样本完全划分开。 然而,在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分;退一步说,即便恰好找到了某个核函数使训练集在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合所造成的。

缓解该问题的一个办法是允许支持向量机在一些样本上出错为此,要引入"软间隔"(soft margin)的概念,如图所示
在这里插入图片描述

前面介绍的支持向量机形式是要求所有样本均满足约束,即所有样本都必须划分止确,这称为"硬间隔"(hard margin),而软间隔则是允许某些样本不满足约束 y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\geq 1 yi(wTxi+b)1

当然,在最大化间隔的同时,不满足约束的样本应尽可能少,于是,优化目标可写为 m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l 0 / 1 ( y i ( w T x i + b ) − 1 ) min_{w,b} \frac{1}{2}||w||^2+C\sum_{i=1}^ml_{0/1}(y_i(w^Tx_i+b)-1) minw,b21∣∣w2+Ci=1ml0/1(yi(wTxi+b)1)

其中 C > 0 C>0 C>0是一个常数, l 0 / 1 l_{0/1} l0/1是"0/1损失函数"。

  • l 0 / 1 = { 1 , i f z ≤ 0 0 , o t h e r w i s e l_{0/1}=\left \{ \begin{matrix} 1 & ,& if z \leq 0 \\ 0 & , & otherwise \end{matrix}\right . l0/1={10,,ifz0otherwise

显然,当C为无穷大时,上式迫使所有样本均满足约束 y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\geq 1 yi(wTxi+b)1,于是当C取有限值时,上式允许一些样本不满足约束。
然面, l 0 / 1 l_{0/1} l0/1非凸、非连续,数学性质不太好,使得上式不易直接求解。于是,人们通常用其他一些函数来代替 l 0 / 1 l_{0/1} l0/1,称为"替代损失"(surrogate loss)。替代损失函数一般具有较好的数学性质,如它们通常是凸的,连续函数,且是 l 0 / 1 l_{0/1} l0/1的上界。下图给出了三种常用的替代损失函数:
在这里插入图片描述

  • hinge损失: l h i n g e ( z ) = m a x ( 0 , 1 − z ) l_{hinge}(z)=max(0,1-z) lhinge(z)=max(0,1z);
  • 指数损失(exponential loss): l e x p ( z ) = e x p ( − z ) l_{exp}(z)=exp(-z) lexp(z)=exp(z);
  • 对率损失(logistic loss): l l o g ( z ) = l o g ( 1 + e x p ( − z ) ) l_{log}(z)=log(1+exp(-z)) llog(z)=log(1+exp(z));

若采用hinge损失,则优化目标式变成

  • m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m m a x ( 0 , 1 − y i ( w T x i + b ) ) min_{w,b} \frac{1}{2}||w||^2+C\sum_{i=1}^m max(0, 1-y_i(w^Tx_i+b)) minw,b21∣∣w2+Ci=1mmax(0,1yi(wTxi+b))

引入"松弛变量"(slack variables) ξ i ≥ 0 \xi_i\geq0 ξi0,可将上式重写为

  • m i n w , b , ξ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i s . t . y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 , i = 1 , 2 , . . . , m \begin{matrix} min_{w,b,\xi_i} \frac{1}{2}||w||^2 + C\sum_{i=1}^m \xi_i \\ s.t. y_i(w^Tx_i+b)\geq 1-\xi_i \\ \xi_i\geq0, i=1,2,...,m\end{matrix} minw,b,ξi21∣∣w2+Ci=1mξis.t.yi(wTxi+b)1ξiξi0,i=1,2,...,m

这就是常用的"软间隔支持向量机",显然式中每个样本都有一个对应的松弛变量用以表征该样本不满足约束 y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\geq 1 yi(wTxi+b)1的程度。但这仍是一个二次规划问题,通过拉格朗日乘子法可得到上式的拉格朗日函数。

  • L ( w , b , α , ξ , μ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i + ∑ i = 1 m α i ( 1 − ξ i − y i ( w T x i + b ) ) − ∑ i = 1 m μ i ξ i L(w,b,\alpha,\xi,\mu) = \frac{1}{2}||w||^2+C\sum_{i=1}^m\xi_i+\sum_{i=1}^m\alpha_i(1-\xi_i-y_i(w^Tx_i+b))-\sum_{i=1}^m\mu_i\xi_i L(w,b,α,ξ,μ)=21∣∣w2+Ci=1mξi+i=1mαi(1ξiyi(wTxi+b))i=1mμiξi

其中 α i ≥ 0 , μ i ≥ 0 \alpha_i\geq0,\mu_i\geq0 αi0,μi0是拉格朗日乘子。令 L ( w , b , α , ξ , μ ) L(w,b,\alpha,\xi,\mu) L(w,b,α,ξ,μ) w , b , ξ i w,b,\xi_i w,b,ξi的偏导为零可得

  • w = ∑ i = 1 m α i y i x i w=\sum_{i=1}^m\alpha_iy_ix_i w=i=1mαiyixi
  • 0 = ∑ i = 1 m α i y i 0=\sum_{i=1}^m\alpha_iy_i 0=i=1mαiyi
  • C = α i + μ i C=\alpha_i+\mu_i C=αi+μi

将上式带入朗格朗日函数得到优化问题的对偶问题

  • 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 s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , . . . , m \begin{matrix} max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j \\ s.t. \sum_{i=1}^m\alpha_iy_i=0 \\ 0\leq\alpha_i\leq C, i=1,2,...,m\end{matrix} maxαi=1mαi21i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=00αiC,i=1,2,...,m

可采用6.2节同样的SMO方法求解上式,在引入核函数后能得到与6.3节同样的支持向量展式,而对于软间隔支持向量机,其KKT要求如下:

  • { α i ≥ 0 , μ i ≥ 0 y i f ( x i ) − 1 + ξ i ≥ 0 α i ( y i f ( x i ) − 1 + ξ i ) = 0 ξ i ≥ 0 , μ i ξ i = 0 \left \{ \begin{matrix}\alpha_i\geq0,\mu_i\geq0\\ y_if(x_i)-1+\xi_i\geq0\\ \alpha_i(y_if(x_i)-1+\xi_i)=0\\ \xi_i\geq0,\mu_i\xi_i=0\end{matrix}\right. αi0,μi0yif(xi)1+ξi0αi(yif(xi)1+ξi)=0ξi0,μiξi=0

于是对任意训练样本 ( x i , y i ) (x_i,y_i) (xi,yi),总有 α i = 0 \alpha_i=0 αi=0 y i f ( x i ) = 1 − ξ i y_if(x_i)=1-\xi_i yif(xi)=1ξi。若 α i = 0 \alpha_i=0 αi=0,则该样本对 f ( x ) f(x) f(x)没有任何影响;若 α i > 0 \alpha_i>0 αi>0,则必有 y i f ( x i ) = 1 − ξ i y_if(x_i)=1-\xi_i yif(xi)=1ξi,即样本为支持向量。若 α i < C \alpha_i < C αi<C,由于 C = μ i + α i C=\mu_i+\alpha_i C=μi+αi,故 μ i > 0 \mu_i>0 μi>0,进而有 ξ i = 0 \xi_i=0 ξi=0,即该样本恰在最大间隔边界上;若 α i = C \alpha_i=C αi=C,则 μ i = 0 \mu_i=0 μi=0,此时若 ξ i ≤ 1 \xi_i\leq1 ξi1,则该样本落在最大间隔内部,若 ξ i > 1 \xi_i>1 ξi>1,则该样本被错误分类。此可看出,软间隔支持向量机的最终模型仅与支持向量有关,即通过采用hinge损失函数仍保持了稀疏性。

如果使用对率损失函数来替代式中的0/1损失函数,则儿乎就得到了对率回归模型。把式中的0/1损失函数换成别的替代损失函数以得到其他学习模型,这些模型的性质与所用的替代函数直接相关,但它们具有一个共性:优化目标中的第一项用来描述划分超平面的"间隔"大小,另一项 ∑ i = 1 m l ( f ( x i ) , y i ) \sum_{i=1}^ml(f(x_i),y_i) i=1ml(f(xi),yi)用来表述训练集上的误差,可写为更一般的形式 m i n f Ω ( f ) + C ∑ i = 1 m l ( f ( x i ) , y i ) min_f \Omega(f)+C\sum_{i=1}^ml(f(x_i),y_i) minfΩ(f)+Ci=1ml(f(xi),yi)。第一项被称为结构风险,用于描述模型 f f f的某些性质;第二项被称为经验风险,用于描述模型与训练数据的契合程度;C用于对二者进行折中。从经验风险最小化的角度来看, Ω ( f ) \Omega(f) Ω(f)表述了希望获得具有何种性质的模型(例如希望获得复杂度较小的模型),这为引入领域知识和用户意图提供了途径;另一方面,该信息有助于削减假设空间,从向降低了最小化训练误差的过拟合风险。从这个角度来说,上式称为正则化问题, Ω ( f ) \Omega(f) Ω(f)为正则化项,C称为正则化常数,Lp范数(norm)是常用的正则化项,中压范数l2倾向千w的分量取值尽量均衡,即非零分散个数尽量稠密,而范数l0和范数l1则倾向于w的分量尽量稀疏,即非零分量个数尽量少。

小结

在支持向量机中,软间隔和正则化是两个核心概念,它们共同帮助SVM在处理实际问题时提高模型的泛化能力。

  1. 软间隔(Soft Margin)
    定义:软间隔SVM允许一些数据点可以违反间隔规则,即它们可以在间隔边界以内或者甚至在决策边界的另一边。这是对硬间隔SVM的一种扩展,后者要求所有数据点都必须正确分类并且位于间隔边界之外。
    目的:软间隔SVM通过引入松弛变量来处理数据中的噪声和异常点,从而提高模型的鲁棒性。
    代价:使用软间隔会牺牲一些间隔的最大化,但通常可以提高模型在未知数据上的泛化能力。

  2. 正则化(Regularization)
    定义:正则化是一种用于防止模型过拟合的技术。在SVM中,正则化通常是通过在目标函数中添加一个惩罚项来实现的,这个惩罚项与模型的复杂度(如权重向量的范数)相关。
    形式:最常见的正则化形式是L2正则化,它在目标函数中添加了权重向量的平方和乘以一个小的正则化参数(C)。
    目的:正则化有助于控制模型的复杂度,防止模型在训练数据上过度拟合,从而提高模型在新数据上的预测性能。

  3. 软间隔与正则化的关系

  • 软间隔SVM本质上是一种正则化方法,因为它在优化间隔的同时,通过引入松弛变量和正则化参数C来控制模型的复杂度。
  • 正则化参数C在软间隔SVM中起着至关重要的作用。较大的C值会增加对误分类的惩罚,使得模型趋向于硬间隔分割;较小的C值会减少对误分类的惩罚,允许更多的数据点违反间隔规则,从而增加间隔宽度。
  1. 选择正则化参数C
    正则化参数C的选择通常依赖于具体问题和数据集。可以通过交叉验证等模型选择方法来确定最佳的C值。

软间隔和正则化在SVM中是相辅相成的,它们共同帮助SVM在保证模型复杂度可控的同时,提高对异常点和噪声的容忍度,从而在实际应用中取得更好的性能。

6.5 支持向量回归

支持向量回归(Support Vector Regression,简称SVR)假设我们能容忍f(x)与 y之间最多有 ϵ \epsilon ϵ的偏差,即仅当f(x)与y之间的差别绝对值大于 ϵ \epsilon ϵ时才计算损失。如图所示,这相当于以f(x)为中心,构建了一个宽度为 2 ϵ 2\epsilon 2ϵ的间隔带,若训练样本落入此间隔带,则认为是被预测正确的。
在这里插入图片描述

于是,SVR问题可形式化为 m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l ϵ ( f ( x i ) − y i ) min_{w,b} \frac{1}{2}||w||^2+C\sum_{i=1}^ml_{\epsilon}(f(x_i)-y_i) minw,b21∣∣w2+Ci=1mlϵ(f(xi)yi)

其中C为正则化常数, l ϵ l_{\epsilon} lϵ是图中所示的 ϵ \epsilon ϵ-不敏感损失( ϵ \epsilon ϵ-inscnsitiveloss)函数。 l ϵ ( z ) = { 0 , i f ∣ z ∣ ≤ ϵ ∣ z ∣ − ϵ , o t h e r w i s e l_{\epsilon}(z)=\left \{ \begin{matrix} 0, & if |z|\leq \epsilon \\ |z|-\epsilon, &otherwise\end{matrix}\right. lϵ(z)={0,zϵ,ifzϵotherwise

引入松弛变量 ξ i \xi_i ξi ξ ^ i \hat{\xi}_i ξ^i,可将式子重写为

  • m i n w , b , ξ i , ξ ^ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ( ξ i + ξ ^ i ) s . t . f ( x i ) − y i ≤ ϵ + ξ i y i − f ( x i ) ≤ ϵ + ξ ^ i ξ i ≥ 0 , ξ ^ i ≥ 0 , i = 1 , 2 , . . . , m \begin{matrix} min_{w,b,\xi_i,\hat{\xi}_i} \frac{1}{2}||w||^2+C\sum_{i=1}^m (\xi_i + \hat{\xi}_i) \\ s.t. f(x_i)-y_i \leq \epsilon+\xi_i \\ y_i-f(x_i) \leq \epsilon + \hat{\xi}_i \\ \xi_i \geq 0, \hat{\xi}_i \geq 0, i=1,2,...,m \end{matrix} minw,b,ξi,ξ^i21∣∣w2+Ci=1m(ξi+ξ^i)s.t.f(xi)yiϵ+ξiyif(xi)ϵ+ξ^iξi0,ξ^i0,i=1,2,...,m
    在这里插入图片描述

类似的使用拉格朗日乘子法得到上式的对偶问题,并结合SMO、KKT条件和核函数,可到到SVR的解:
f ( x ) = ∑ i = 1 m ( α ^ i − α i ) k ( x , x i ) + b f(x)=\sum_{i=1}^m(\hat{\alpha}_i-\alpha_i)k(x,x_i)+b f(x)=i=1m(α^iαi)k(x,xi)+b,其中 α ^ i , α i \hat{\alpha}_i,\alpha_i α^i,αi为拉格朗日乘子,k为核函数, b = y i + ϵ − ∑ i = 1 m ( α ^ i − α i ) k ( x , x i ) b=y_i+\epsilon-\sum_{i=1}^m(\hat{\alpha}_i-\alpha_i)k(x,x_i) b=yi+ϵi=1m(α^iαi)k(x,xi)

小结

支持向量回归(Support Vector Regression, SVR)是一种基于支持向量机(Support Vector Machine, SVM)的回归方法,它用于预测连续的数值变量。SVR的目标是找到一个函数,这个函数能够以最小的误差拟合给定的数据点,同时保持模型的平滑性。

SVR的基本原理和SVM分类相似,但SVR处理的是回归问题,即预测一个连续的数值,而不是分类问题。SVR通过引入一个容忍度(epsilon,ε),来允许模型在ε距离内的数据点可以不完全拟合。这意味着SVR可以容忍一些数据点的误差,从而减少模型的复杂度,避免过拟合。

SVR通常使用核函数来处理非线性问题,常见的核函数包括线性核、多项式核、径向基函数(RBF)核等。

SVR的优点包括:
能够处理高维数据。
通过核技巧可以处理非线性问题。
通过正则化参数C和容忍度ε可以控制模型的复杂度和误差。
SVR的缺点包括:
对参数选择敏感,需要仔细调整C和ε。
计算复杂度较高,尤其是在数据量大时。
在实际应用中,SVR可以用于各种回归问题,如金融市场预测、生物信息学、能源消耗预测等。

6.6 核方法

在这里插入图片描述

表示定理对损失函数没有限制,对正则化项 Ω \Omega Ω仅要求单调递增,甚至不要求 Ω \Omega Ω是凸函数,意味着对于一般的损失函数和正则化项,优化问题的最优解 h ∗ ( x ) h^*(x) h(x)都可表示为核函数 k ( x , x i ) k(x,x_i) k(x,xi)的线性组合;这显示出核函数的巨大威力。基于核函数的学习方法,统称为"核方法"(kernel methods)最常见的,是通过"核化"(即引入核函数)来将线性学习器拓展为非线性学习器。以线性判别分析为例来演示如何通过核化来对其进行非线性拓展 ,从而得到"核线性判别分析"。

先假设可通过某种映射 Φ : X → F \Phi:X \rightarrow F Φ:XF将样本映射到一个特征空间 F F F,然后在 F F F中执行线性判别分析 ,以求得 h ( x ) = w T Φ ( x ) h(x)=w^T\Phi(x) h(x)=wTΦ(x)

在这里插入图片描述

在这里插入图片描述

小结

核方法(Kernel Methods)是机器学习中一种强大的技术,它允许算法在高维空间中有效地处理数据,而无需显式地映射数据到高维空间。核方法的核心思想是通过核函数来计算数据点在高维空间中的内积,从而利用高维空间的性质来解决低维空间中的问题。

核函数
核函数是一种函数,它满足Mercer定理,可以用于计算两个数据点在高维空间中的内积,而不需要知道数据点在高维空间中的确切坐标。
常见的核函数
线性核
多项式核
径向基函数或高斯核
Sigmoid核

核方法广泛应用于多种机器学习算法中,包括:
支持向量机(SVM): 利用核函数处理非线性分类问题。
主成分分析(PCA): 通过核PCA在高维空间进行降维。
谱聚类: 使用核方法来改进聚类算法的性能。
回归问题: 如支持向量回归(SVR),利用核函数处理非线性回归问题。

核方法的优点
能够处理非线性问题,而无需显式地映射数据到高维空间。
通过不同的核函数,可以灵活地控制模型的复杂度和拟合能力。

核方法的缺点
核方法的选择和参数调整可能比较复杂。
对于大规模数据集,计算和存储成本可能较高。
核方法是一种强大的工具,它通过在原始数据空间中计算高维空间的内积,使得许多机器学习算法能够更有效地处理复杂的数据集。

代码

SVM线性

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs


# 我们创建40个用来分割的数据点
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

# 拟合模型,并且为了展示作用,并不进行标准化
clf = svm.SVC(kernel='linear', C=1000)
clf.fit(X, y)
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)

# 绘制decision function的结果
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# 创造网格来评估模型
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)

# 绘制决策边界和边际
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
# 绘制支持向量
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

在这里插入图片描述

SVM非线性

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

xx, yy = np.meshgrid(np.linspace(-3, 3, 500),
                     np.linspace(-3, 3, 500))
np.random.seed(0)
X = np.random.randn(300, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0) 

# 拟合模型
clf = svm.NuSVC(gamma='auto')
clf.fit(X, Y)

# 在网格上为每个数据点绘制决策函数
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.imshow(Z, interpolation='nearest',
           extent=(xx.min(), xx.max(), yy.min(), yy.max()), aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linestyles='dashed')
plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired, edgecolors='k')
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()

在这里插入图片描述

SVR线性/非线性核

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

# 获得样本数据
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

# 在标签中增加噪音
y[::5] += 3 * (0.5 - np.random.rand(8))

# 拟合回归模型
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1)
svr_lin = SVR(kernel='linear', C=100, gamma='auto')
svr_poly = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1, coef0=1)

# 查看结果
lw = 2

svrs = [svr_rbf, svr_lin, svr_poly]
kernel_label = ['RBF', 'Linear', 'Polynomial']
model_color = ['m', 'c', 'g']

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True)
for ix, svr in enumerate(svrs):
    axes[ix].plot(X, svr.fit(X, y).predict(X), color=model_color[ix], lw=lw, label='{} model'.format(kernel_label[ix]))
    axes[ix].scatter(X[svr.support_], y[svr.support_], facecolor="none", edgecolor=model_color[ix], s=50, label='{} support vectors'.format(kernel_label[ix]))
    axes[ix].scatter(X[np.setdiff1d(np.arange(len(X)), svr.support_)], y[np.setdiff1d(np.arange(len(X)), svr.support_)], facecolor="none", edgecolor="k", s=50, label='other training data')
    axes[ix].legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=1, fancybox=True, shadow=True)

fig.text(0.5, 0.04, 'data', ha='center', va='center')
fig.text(0.06, 0.5, 'target', ha='center', va='center', rotation='vertical')
fig.suptitle("Support Vector Regression", fontsize=14)
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我喝AD钙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值