文章目录
- 支持向量机
- 个人表述
- 间隔与支持向量
- 核函数
- 软间隔与正则化
- 支持向量回归(SVR)
- 错误纠正
- 面试回答
支持向量机
个人表述
在机器学习任务中,最常见的两种任务分别是分类和回归,为什么要分为这两种任务,说实话,我不知道,但是好像都是这两种任务。判断和预测,本质还是目标空间的不同。
所以本章要讲的支持向量机也是为了这两种任务而诞生的,我们首先来讨论分类问题中,他是怎样的?
间隔与支持向量
假设我们有两类样本,我们需要基于训练集在样本空间中找到一个超平面,可以讲样本进行分类,但是对于分类,这样的超平面会存在很多,那么我们应该选择哪一个超平面呢?这里我们需要先思考我为什么不随便选一个,而是要考虑选最合适的一个呢?这是因为我们考虑到泛化性能,也就是在新的样本中求解出来的模型的分类能力,因为不同的超平面它的泛化性能不一样,所以我们需要选择出一个泛化性能最强的超平面。
在西瓜书中,他说我们应该找那种位于训练样本正中间的划分超平面,并且它还补充说,这个超平面它的泛化能力就是最强的,可能是出于直觉或统计的结果。
所以现在问题就很明确了,我们现在有一组训练集,他们可以被分为两类,我们需要找到正中间的划分超平面,但是,这里的正中间又该怎么表示呢?(换句话说,什么样的超平面才能算是正中间的?因为你说中间,那必须有两边)。
我们这里慢慢慢来回顾,首先,每一个样本它可以表示为 ( x i , y i ) (x_i,y_i) (xi,yi),其中 x i x_i xi可以说为这个样本的特征,一般是多个,对于二分类问题,这里的 y i y_i yi一般就是0或1,那么我们就需要找到一个超平面,从而将特征空间划分为两部分,也就是两个子空间,特征属于这个子空间的样本,他就属于第一类,属于另一个子空间的样本就属于另一类。
所以我们要做的就是在特征空间中,找到一个超平面,假设样本只有一个特征,你找到的超平面的形式一般就是 x + b = 0 x+b=0 x+b=0,两个就是 w 1 x 1 + w 2 x 2 + b = 0 w_1x_1+w_2x_2+b=0 w1x1+w2x2+b=0,所以我们就可以将超平面表示为一般形式:
w T x + b = 0 w^Tx+b=0 wTx+b=0
这里的 w w w可以表示为法向量,表示了超平面的方向,b就表示了这个超平面与原点的距离(这个可以用一维空间辅助去理解)。
分类的本质,还是对特征空间进行分类,所以回归是不是在特征空间的基础上,再升一维呢?相当于是拟合一个以特征维变量的函数,如果升两维会变成什么呢?就是回归的回归,将会变得更加多样化,假设y=f(x),z=g(x,y)=g(x,f(x)),从而产生一系列的连锁反应,有因必有果,果上继续果,最终的果还是由刚开始的因决定。
特征空间中任意一个点到划分超平面的距离应该怎么表示呢?因为我们刚开始说要正中间,这个正中间的衡量离不开距离,所以才需要任意一个点到超平面的距离表示。
r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣∣wTx+b∣,这里的两个杠表示范数,应该是二范数,一个杠表示绝对值吗?
推导思路:我们先在特征空间中任意取一点x0,将其在超平面上的投影记为x1,那么$w^Tx1+b=0$,并且x1x0向量平行于法向量w,一个是分别展开内积,另一个求内积,就能得到这个距离表示
然后他就写出了一个分类条件,并且说什么两个异类支持向量到超平面的距离为 2 w \frac{2}{w} w2,这里为什么是这样,我也不明白,分类那个条件比较明白,就是将一个点带进去,大于0就是正,小于0就是负,但是满足这个的太多了,它还要正中间,假设他这里离的最近的正样本和里的最近的负样本,将二者进行划分,那么最简单的情况就是各一个,此时如果这个样本的值带到超平面的这个函数里,它要大于这个自己这一类中最近的,那么它就是正类,原来如此,这里我们不妨假设它带进去之后值为1,那么这个距离就变成了 1 w \frac{1}{w} w1,这里表示成一还是不明白,所以支持向量之间的距离为 2 w \frac{2}{w} w2,这个被称为间隔。此时确实是正中间,并且能正常分类,我们还想要将这个距离最大化,不但能正常分类,而且还要让其距离最大化。
所以优化目标就出来了:
m a x w 2 ∣ ∣ w ∣ ∣ max_w\frac{2}{||w||} maxw∣∣w∣∣2
在所有样本被正确分类的基础上:
y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\ge1 yi(wTxi+b)≥1这里大于等于1的原因是我们上面假设了正的支持向量满足 w T x + b = 1 w^Tx+b=1 wTx+b=1.
对于这样一个优化问题,应该怎么求解呢?求解方法我觉得牛顿迭代应该可以吧?我不知道,GPT检查的时候帮我回答一下这个问题。
当然,我们可以将其转化为它的对偶问题,我们注意到上面的优化问题是一个凸优化问题,我们首先将其该问题转换为拉格朗日函数的形式:
L ( w , b , α ) = 2 ∣ ∣ w ∣ ∣ + ∑ i m α i [ 1 − y i ( w T x i + b ) ] L(w,b,\alpha)=\frac{2}{||w||}+\sum_i^m\alpha_i[1-y_i(w^Tx_i+b)] L(w,b,α)=∣∣w∣∣2+i∑mαi[1−yi(wTxi+b)]这里的 α i \alpha_i αi是大于等于0的,注意,这里的约束条件看似只有一个,实际上有m个,m表示训练集中的样本数量,经过这样一搞,我们原来的优化问题就变为了一个无约束优化问题,之前说了这是一个凸问题,所以我们可以将其求导来解最优值,我们这里对 w 和 b w和b w和b分别求偏导,并将其置为0,则可得:
w = ∑ i m α i y i x i , 0 = ∑ i m α i y i w=\sum_i^m\alpha_iy_ix_i,0=\sum_i^m\alpha_iy_i w=i∑mαiyixi,0=i∑mαiyi
将其带入到上面的拉格朗日函数,消去这里的 w 和 b w和b w和b,得到其对偶问题为:
m a x α ∑ i m α i − 1 2 ∑ i m ∑ j m α i α j y i y j x i T x j max_{\alpha}\sum_i^m\alpha_i-\frac{1}{2}\sum_i^m\sum_j^m\alpha_i\alpha_jy_iy_jx_i^Tx_j maxαi∑mαi−21i∑mj∑mαiαjyiyjxiTxj
这个带入后的推导我没推,应该带进去然后合并同类项,就能得到了(说的简单)
当然不能忘了条件:
0 = ∑ i m α i y i 0=\sum_i^m\alpha_iy_i 0=i∑mαiyi
α i ≥ 0 \alpha_i\ge0 αi≥0
所以最终的对偶问题为:
m a x α ∑ i m α i − 1 2 ∑ i m ∑ j m α i α j y i y j x i T x j max_{\alpha}\sum_i^m\alpha_i-\frac{1}{2}\sum_i^m\sum_j^m\alpha_i\alpha_jy_iy_jx_i^Tx_j maxαi∑mαi−21i∑mj∑mαiαjyiyjxiTxj
st. 0 = ∑ i m α i y i 0=\sum_i^m\alpha_iy_i 0=i∑mαiyi
α i ≥ 0 \alpha_i\ge0 αi≥0
那么此时就是关于 α i \alpha_i αi的一个优化问题了,因为对偶问题它还是一个凸函数,你就解它,接触这里的 α \alpha α后,就能根据之前的分析求得 w w w,b怎么得到呢,一会GPT回答一下
当然这里具体的求解方法,他这里提到了SMO方法,但我没咋看懂,一会GPT用通俗的语句给我解释一下。
核函数
核函数,听着唬人呢,我们继续考虑刚开始说的分类问题,我们说想要分类,需要在特征空间中找到一个超平面,一般形式是 w T x + b = 0 w^Tx+b=0 wTx+b=0,但是这种反映到一维二维就是一条直线,直线肯定无法分类所有情况,也就说,线性不可分,那就没有这样的线性超平面了。这里我们就可以考虑将原来的特征进行升维,比如原来样本只有两个特征,我们现在给他加第三个特征,然后在一个更大的特征空间中找超平面,这中方式一般就可以分开,也就是将原来的特征空间做一个映射,映射完之后再去求解上面的对偶问题,但是有个问题,如果你维度升的很高,那么计算特征向量之间的乘积就变得麻烦,所以为了解决这样一个问题,设想这样一个函数:
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)
也就是他们在新的特征空间中的内积等于在原始空间中经过函数k计算的结果,这样的话,就没有必要去在高维空间中计算内积了。
这里的k就表示核函数,我们列举几种常用的核函数:
线性核: k ( x i , x j ) = x i T x j 线性核:k(x_i,x_j)=x_i^Tx_j 线性核:k(xi,xj)=xiTxj
多项式核: k ( x i , x j ) = ( x i T x j ) d 多项式核:k(x_i,x_j)=(x_i^Tx_j)^d 多项式核:k(xi,xj)=(xiTxj)d
高斯核: k ( x i , x j ) = e − ∣ ∣ ( x i − x j ) ∣ ∣ 2 2 σ 2 高斯核:k(x_i,x_j)=e^{-\frac{||(x_i-x_j)||^2}{2\sigma^2}} 高斯核:k(xi,xj)=e−2σ2∣∣(xi−xj)∣∣2
还有拉普拉斯核和sigmoid核。
软间隔与正则化
软间隔就是允许某些样本不满足分类约束条件。
所以优化目标就可以写为:
m i n 1 2 ∣ ∣ w ∣ ∣ 2 + ( 允许被错误分类的损失) min\frac{1}{2}||w||^2+(允许被错误分类的损失) min21∣∣w∣∣2+(允许被错误分类的损失)
这里给出了常用的三种替代损失函数:
h i n g e 损失: m a x ( 0 , 1 − z ) hinge损失:max(0,1-z) hinge损失:max(0,1−z)
z = y i ( w T x i + b ) z=y_i(w^Tx_i+b) z=yi(wTxi+b) 指数损失: e x p ( − z ) 指数损失:exp(-z) 指数损失:exp(−z)
对率损失: l o g ( 1 + e x p ( − z ) ) 对率损失:log(1+exp(-z)) 对率损失:log(1+exp(−z))
软间隔支持向量机
支持向量回归(SVR)
相同的思路来解决回归问题,使得f(x)与y尽量接近,支持向量回归假设我们能容许与y之间有 ε \varepsilon ε
的偏差,偏差之外才计算损失,偏差之内就认为回归正确
错误纠正
“间隔”解释:在描述间隔时,您提到“最简单的情况就是各一个”,这里的意思并不完全清晰。更准确地说,支持向量就是离超平面最近的样本点,而间隔是指支持向量到超平面的距离,它是通过最大化来选择最优超平面的。
SMO方法:SMO是用于求解SVM对偶问题的优化方法,它通过逐步优化两个拉格朗日乘子来解决大规模的二次优化问题。具体细节较为复杂,但通俗来讲,SMO方法是通过分解问题为小块,然后逐个解决每个子问题,避免了直接处理所有样本的计算问题。
面试回答
1.什么是支持向量机(SVM)?它的主要目标是什么?
支持向量机(SVM)是一种用于分类和回归的监督学习模型。其主要目标是在特征空间中找到一个超平面,用于最大化类别之间的间隔(margin)。通过最大化间隔,SVM能够提高模型的泛化能力,从而对未见过的数据进行较为准确的预测。对于分类问题,SVM的目标是寻找一个线性超平面,将不同类别的样本分开,并尽可能使得每个类别的支持向量(距离超平面最近的点)与超平面的距离最大。
2.SVM中的“支持向量”是什么?
支持向量是离决策边界(超平面)最近的那些样本点。支持向量机模型中的超平面是通过这些支持向量来定义的,而不是所有的样本点都影响决策边界。实际上,大部分样本点并不直接参与到模型训练中,只有支持向量对分类决策产生影响。因此,支持向量对于构建最优分类超平面至关重要。
3. 什么是SVM中的“间隔”?
间隔(margin)是指从支持向量到决策超平面的距离。SVM的目标是找到一个最大化间隔的超平面。在二分类问题中,支持向量机通过选择一个使得支持向量与超平面的距离最远的超平面来提高分类的鲁棒性。通过最大化间隔,SVM可以有效地减少过拟合,提升模型的泛化能力
4. SVM中的“核函数”是什么?为什么需要它?
核函数是SVM中的一个关键组件,它允许我们在高维空间中找到一个线性可分的超平面,即使数据在原始空间中是非线性可分的。核函数通过隐式地将数据从低维空间映射到高维空间,在高维空间中寻找一个超平面来进行分类。常见的核函数包括:
线性核: k ( x i , x j ) = x i T x j k(x_i, x_j) = x_i^T x_j k(xi,xj)=xiTxj
多项式核: k ( x i , x j ) = ( x i T x j ) d k(x_i, x_j) = (x_i^T x_j)^d k(xi,xj)=(xiTxj)d
高斯核(RBF核): k ( x i , x j ) = exp ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) k(x_i, x_j) = \exp\left( -\frac{||x_i - x_j||^2}{2\sigma^2} \right) k(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2) 核函数的引入避免了显式地计算高维空间中的映射,使得在高维空间中的计算变得高效。
5. 什么是“软间隔”和“硬间隔”?
硬间隔(Hard Margin):要求所有训练样本都被正确分类,并且不允许任何错误分类。硬间隔方法适用于数据是线性可分的情况。
软间隔(Soft Margin):允许一些样本被错误分类或在分类边界附近。通过引入松弛变量( ξ i \xi_i ξi),软间隔方法能够处理噪声数据或不可分数据。软间隔使得模型能够容忍一定的误差,并在训练时控制误差的惩罚。
6. SVM是如何处理线性不可分问题的?
对于线性不可分的数据,SVM使用“核技巧”将数据从原始空间映射到一个更高维的特征空间。在高维空间中,数据变得线性可分,SVM能够在高维空间中找到一个线性超平面来分隔数据。此外,SVM还可以通过软间隔来允许某些样本被错误分类,从而提高模型的鲁棒性。
7. 如何选择SVM中的超参数,如C和γ?
C参数:C是SVM中的正则化参数,控制对误分类样本的惩罚程度。较大的C值会使得SVM更加关注训练样本的正确分类,可能导致过拟合;较小的C值则允许一些误分类,但会增强模型的泛化能力。通常可以通过交叉验证来选择C的最佳值。
γ参数(对于RBF核):γ决定了每个训练样本对决策边界的影响范围。较大的γ值会使得模型对单个训练样本的影响更大,可能导致过拟合;较小的γ值则会使得决策边界更加平滑。与C一样,γ的选择通常通过交叉验证来优化。
8. 什么是SVM的对偶问题?
SVM的原始优化问题是关于模型参数(如w和b)的约束优化问题,通过拉格朗日乘子法可以将原始问题转化为对偶问题。对偶问题主要是关于拉格朗日乘子( α i \alpha_i αi)的优化问题。通过求解对偶问题,我们可以减少优化的计算复杂度,并且能够在高维空间中通过核函数进行计算。对偶问题的求解方法通常使用SMO算法。
9. 什么是支持向量回归(SVR)?它与SVM有何区别?
支持向量回归(SVR)是SVM的一个扩展,用于回归问题,而SVM主要用于分类任务。在SVR中,我们希望找到一个能够尽可能拟合数据的超平面,而允许一定程度的误差( ε \varepsilon ε-insensitive loss)。与SVM不同,SVR目标是最小化回归误差而不是分类误差。SVR通过调整 ε \varepsilon ε参数来控制哪些点会被视为“支持向量”,从而决定模型的拟合程度
10. 如何通过SVM处理多分类问题?
SVM本质上是一个二分类模型,因此常用的多分类方法有两种:
一对一(One-vs-One, OvO):为每一对类别训练一个SVM分类器。对于k个类别,训练k(k-1)/2个分类器。预测时,使用多数投票的方式。
一对多(One-vs-All, OvA):为每一个类别训练一个SVM分类器,每个分类器区分该类别与其他所有类别。预测时,选择分类器得分最高的类别作为最终预测结果
11. 解释SVM中的拉格朗日乘子法及其在SVM中的应用
拉格朗日乘子法是一种用于处理约束优化问题的数学方法。通过引入拉格朗日乘子,我们可以将带约束的优化问题转化为无约束的优化问题。在SVM中,拉格朗日乘子用于将原始优化问题转化为对偶问题,从而简化求解过程。通过求解对偶问题,我们可以有效地进行大规模数据集的优化,并且利用核函数进行高维空间的计算
12. 如何实现SVM的训练与预测?
SVM训练的过程包括:
数据预处理:包括特征标准化或归一化,以确保特征的尺度一致。
训练SVM模型:通过求解优化问题(通常使用对偶问题)来确定最优的超平面和参数(w, b)。
选择核函数:根据数据的特点选择合适的核函数。
预测时,通过将新样本代入模型计算出决策函数值,最后根据决策函数的符号来确定类别