机器学习算法——支持向量机(1)

阅读提示:文章中的斜体符号表示单个元素,加粗斜体表示向量。

1.前言

  支持向量机(support vector machines, SVM)也是一种二类分类模型,在前一篇文章中讲到,感知机的目标是求得一个能够将数据正确分类的分离超平面,而SVM则是要找到一个能将数据正确分类且间隔最大的分离超平面,即SVM不仅要找到一个分离超平面,而且要求以尽可能大的确信度将数据正确分类。SVM与感知机的另一个区别在于,当数据是线性可分的时候,感知机求得的分离超平面可能有无穷多个,而SVM有了间隔最大化的约束,最后求得的分离超平面解是唯一的。
  支持向量机可以分为3类,由简至繁分别为:线性可分支持向量机、线性支持向量机和非线性支持向量机,分别对应着数据线性可分、数据近似线性可分和数据线性不可分的情况。本文主要介绍第一种,即线性可分支持向量机,另外两种将在后续两篇文章中一一介绍。

2.函数间隔与几何间隔

  首先来说一下上文提到的间隔最大的含义。一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度。假设分离超平面为 w ⋅ x + b \boldsymbol{w} \cdot \boldsymbol{x}+b wx+b,则 ∣ w ⋅ x i + b ∣ |\boldsymbol{w} \cdot \boldsymbol{x}_i+b| wxi+b可以相对的表示为点 x i \boldsymbol{x}_i xi距离分离超平面的远近,而通过 w ⋅ x i + b \boldsymbol{w} \cdot \boldsymbol{x}_i+b wxi+b的符号与类标签 y i y_i yi是否一致可以判断分类是否正确。所以可用 γ ^ i = y i ( w ⋅ x i + b ) \hat{\gamma}_i = y_i(\boldsymbol{w} \cdot \boldsymbol{x}_i+b) γ^i=yi(wxi+b)来表示分类的正确性与确信度,这里的 γ ^ i \hat{\gamma}_i γ^i就是分离超平面关于样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi,yi)函数间隔,关于训练数据集 T T T的函数间隔为 γ ^ = m i n   γ ^ i \hat{\gamma}=min\ \hat{\gamma}_i γ^=min γ^i
  函数间隔可以表示分类的正确性与确信度,但是SVM使用的间隔最大并不是函数间隔最大,因为对于分离超平面 w ⋅ x + b \boldsymbol{w} \cdot \boldsymbol{x}+b wx+b,如果同比例地改变 w \boldsymbol{w} w b b b,比如改为 2 w 2\boldsymbol{w} 2w 2 b 2b 2b,此时分离超平面并未改变,而函数间隔却变成了原来的2倍。为了解决这个问题,就有了几何间隔的概念。几何间隔在函数间隔的基础上对分离超平面加了个 ∣ ∣ w ∣ ∣ ||\boldsymbol{w}|| w的约束,分离超平面关于样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi,yi)几何间隔数学表达式为: γ i = y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{\boldsymbol{w}}{||\boldsymbol{w}||} \cdot \boldsymbol{x}_i+\frac{b}{||\boldsymbol{w}||}) γi=yi(wwxi+wb),关于训练数据集 T T T的几何间隔为 γ = m i n   γ i \gamma=min\ \gamma_i γ=min γi。SVM所使用的正是几何间隔最大化。

3.线性可分支持向量机

  支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对于线性可分的数据,这里的间隔最大也叫硬间隔最大,与接下来的文章中将要讨论的数据近似线性可分时的软间隔最大相对应。

3.1 间隔最大化

  间隔最大化的直观解释:不仅要将正负实例点分开,而且对于最难分的实例点(离超平面最近的点)也有足够大的确信度将他们分开。
  求间隔最大分离超平面的问题可以表示为下面的约束最优化问题:
w , b m a x    γ s . t .   y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) ≥ γ {_{\boldsymbol{w},b}^{max}\ \ \gamma}\\ s.t.\ y_i(\frac{\boldsymbol{w}}{||\boldsymbol{w}||} \cdot \boldsymbol{x}_i+\frac{b}{||\boldsymbol{w}||}) \ge \gamma w,bmax  γs.t. yi(wwxi+wb)γ
  考虑到函数间隔与几何间隔的关系: γ = γ ^ ∣ ∣ w ∣ ∣ \gamma=\frac{\hat{\gamma}}{||\boldsymbol{w}||} γ=wγ^,所以可以将上面的最优化问题改写为:
w , b m a x    γ ^ ∣ ∣ w ∣ ∣ s . t .   y i ( w ⋅ x i + b ) ≥ γ ^ {_{\boldsymbol{w},b}^{max}\ \ \frac{\hat{\gamma}}{||\boldsymbol{w}||}}\\s.t.\ y_i({\boldsymbol{w}} \cdot \boldsymbol{x}_i+{b}) \ge \hat{\gamma} w,bmax  wγ^s.t. yi(wxi+b)γ^
  如果将 w 和 b \boldsymbol{w}和b wb按比例改变为 λ w 和 λ b \lambda\boldsymbol{w}和\lambda b λwλb时,虽然这时的函数间隔也相应的会变成 λ γ ^ \lambda \hat{\gamma} λγ^,但是这个改变对上式的约束条件并没有影响,对上式的目标函数也没有影响,也就是说函数间隔 γ ^ \hat{\gamma} γ^的取值并不影响最优化问题的解。这样,我们就可以取 γ ^ = 1 \hat{\gamma}=1 γ^=1,目标函数就变为了 w , b m a x 1 ∣ ∣ w ∣ ∣ {_{\boldsymbol{w},b}^{max}}\frac{1}{||\boldsymbol{w}||} w,bmaxw1,又由于最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||\boldsymbol{w}||} w1与最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||\boldsymbol{w}||^2 21w2是等价的,所以就可对上面的约束问题再进行改写,这就得到了线性可分支持向量机学习的原始最优化问题
w , b m i n   1 2 ∣ ∣ w ∣ ∣ 2 s . t .   y i ( w ⋅ x i + b ) − 1 ≥ 0 {_{\boldsymbol{w},b}^{min}}\ \frac{1}{2}||\boldsymbol{w}||^2\\s.t.\ y_i({\boldsymbol{w}} \cdot \boldsymbol{x}_i+{b})-1\ge 0 w,bmin 21w2s.t. yi(wxi+b)10
对这个最优化问题求解,可以求得最优的 w ∗ 和 b ∗ \boldsymbol{w}^*和b^* wb,这样就得到了线性可分支持向量机模型。

3.2 支持向量

  在线性可分的情况下,训练数据的样本点中与分离超平面距离最近的样本点称为支持向量。如图1所示,实线即为分离超平面, x 1 = ( 3 , 3 ) T 和 x 3 = ( 1 , 1 ) T \boldsymbol{x}_1=(3,3)^T和\boldsymbol{x}_3=(1,1)^T x1=(3,3)Tx3=(1,1)T即为支持向量, x 1 和 x 3 \boldsymbol{x}_1和\boldsymbol{x}_3 x1x3所在的虚线为间隔边界。

图1 支持向量

  在决定分离超平面时只有支持向量起作用,其他实例点并不起作用。如果移动支持向量将改变所求的解;但是移动甚至去掉不是支持向量的实例点,则解是不会改变的。由于支持向量在确定分离超平面中起着决定性作用,所以这类模型才叫做支持向量机。

4.学习的对偶算法

  我们将第3.1节给出的最优化问题称为原始最优化问题,在实际应用过程中,一般不直接对原始问题进行求解,而是通过拉格朗日对偶性,先求解对偶问题的解,进而求得原始问题的解,这便是线性可分SVM的对偶算法。这样做的原因有两个:

  • 对偶问题往往更容易求解;
  • 方便后面引入核函数,进而推广到非线性分类问题。

4.1 对偶问题的推导

  首先根据3.1节的原始最优化问题构建拉格朗日函数:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 N α i y i ( w ⋅ x i + b ) + ∑ i = 1 N α i L(\boldsymbol{w},b,\boldsymbol{\alpha})=\frac{1}{2}||\boldsymbol{w}||^2-\sum_{i=1}^{N}\alpha_i y_i (\boldsymbol{w} \cdot \boldsymbol{x}_i+b)+\sum_{i=1}^{N}\alpha_i L(w,b,α)=21w2i=1Nαiyi(wxi+b)+i=1Nαi
其中, α = ( α 1 , α 2 , . . . , α N ) T \boldsymbol{\alpha}=(\alpha_1,\alpha_2,...,\alpha_N)^T α=(α1,α2,...,αN)T为拉格朗日乘子向量。
  根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
α m a x   w , b m i n   L ( w , b , α ) {_\boldsymbol{\alpha}^{max}}\ {_{\boldsymbol{w},b}^{min}}\ L(\boldsymbol{w},b,\boldsymbol{\alpha}) αmax w,bmin L(w,b,α)所以,为了得到对偶问题的解,需要先求 L ( w , b , α ) L(\boldsymbol{w},b,\boldsymbol{\alpha}) L(w,b,α) w , b {\boldsymbol{w},b} w,b的极小,再求对 α \boldsymbol{\alpha} α的极大。
  (1)求 w , b m i n   L ( w , b , α ) {_{\boldsymbol{w},b}^{min}}\ L(\boldsymbol{w},b,\boldsymbol{\alpha}) w,bmin L(w,b,α)
  将拉格朗日函数 L ( w , b , α ) L(\boldsymbol{w},b,\boldsymbol{\alpha}) L(w,b,α)分别对 w , b {\boldsymbol{w},b} w,b求偏导并令其等于0:
∇ w L ( w , b , α ) = w − ∑ i = 1 N α i y i x i = 0 ∇ b L ( w , b , α ) = − ∑ i = 1 N α i y i = 0 \nabla_{\boldsymbol{w}}L(\boldsymbol{w},b,\boldsymbol{\alpha})=\boldsymbol{w}-\sum_{i=1}^{N}\alpha_i y_i \boldsymbol{x}_i=0 \\\nabla_bL(\boldsymbol{w},b,\boldsymbol{\alpha})=-\sum_{i=1}^{N}\alpha_i y_i=0 wL(w,b,α)=wi=1Nαiyixi=0bL(w,b,α)=i=1Nαiyi=0  可以得到:
w = ∑ i = 1 N α i y i x i ∑ i = 1 N α i y i = 0 \boldsymbol{w}=\sum_{i=1}^{N}\alpha_i y_i \boldsymbol{x}_i \\ \sum_{i=1}^{N}\alpha_i y_i=0 w=i=1Nαiyixii=1Nαiyi=0
  将这两个式子带入拉格朗日函数可以得到:
L ( w , b , α ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i y i ( ( ∑ j = 1 N α j y j x j ) ⋅ x i + b ) + ∑ i = 1 N α i = 1 2 ∑ 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 ( x i ⋅ x j ) − b ∑ i = 1 N α i y i + ∑ i = 1 N α i = − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i L(\boldsymbol{w},b,\boldsymbol{\alpha})=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)- \sum_{i=1}^{N}\alpha_i y_i \big((\sum_{j=1}^{N}\alpha_j y_j \boldsymbol{x}_j) \cdot \boldsymbol{x}_i+b\big)+\sum_{i=1}^{N}\alpha_i \\ =\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)-\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)-b\sum_{i=1}^{N}\alpha_i y_i +\sum_{i=1}^{N}\alpha_i \\ =-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)+\sum_{i=1}^{N}\alpha_i L(w,b,α)=21i=1Nj=1Nαiαjyiyj(xixj)i=1Nαiyi((j=1Nαjyjxj)xi+b)+i=1Nαi=21i=1Nj=1Nαiαjyiyj(xixj)i=1Nj=1Nαiαjyiyj(xixj)bi=1Nαiyi+i=1Nαi=21i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi  即 w , b m i n   L ( w , b , α ) = − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i {_{\boldsymbol{w},b}^{min}}\ L(\boldsymbol{w},b,\boldsymbol{\alpha})=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)+\sum_{i=1}^{N}\alpha_i w,bmin L(w,b,α)=21i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi  (2)求 w , b m i n   L ( w , b , α ) {_{\boldsymbol{w},b}^{min}}\ L(\boldsymbol{w},b,\boldsymbol{\alpha}) w,bmin L(w,b,α) α \boldsymbol{\alpha} α的极大,即:
α m a x   − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i s . t .   ∑ i = 1 N α i y i = 0     α i ≥ 0 {_\boldsymbol{\alpha}^{max}}\ -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)+\sum_{i=1}^{N}\alpha_i \\ s.t.\ \sum_{i=1}^{N}\alpha_i y_i =0\ \ \ \alpha_i \ge 0 αmax 21i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαis.t. i=1Nαiyi=0   αi0  再将目标函数的求极大转换为求极小,就得到了线性可分支持向量机的对偶最优化问题表达式:
α m i n   1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i s . t .   ∑ i = 1 N α i y i = 0     α i ≥ 0 {_\boldsymbol{\alpha}^{min}}\ \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i \alpha_j y_i y_j(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)-\sum_{i=1}^{N}\alpha_i \\ s.t.\ \sum_{i=1}^{N}\alpha_i y_i =0\ \ \ \alpha_i \ge 0 αmin 21i=1Nj=1Nαiαjyiyj(xixj)i=1Nαis.t. i=1Nαiyi=0   αi0

4.2 模型求解

  求解上面所推出的对偶问题,可以得到对偶问题的最优解 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \boldsymbol{\alpha}^*=({\alpha}^*_1,{\alpha}^*_2,...,{\alpha}^*_N)^T α=(α1,α2,...,αN)T。有了 α ∗ \boldsymbol{\alpha}^* α之后,就可以进一步求得3.1节的原始最优化问题的解 w ∗ 和 b ∗ \boldsymbol{w}^*和b^* wb w ∗ \boldsymbol{w}^* w的求解在4.1节已经给出,即:
w ∗ = ∑ i = 1 N α i ∗ y i x i \boldsymbol{w}^*=\sum_{i=1}^{N}\alpha^*_i y_i \boldsymbol{x}_i w=i=1Nαiyixi  下面来说一下 b ∗ b^* b的求解。上式中的 α i ∗ \alpha^*_i αi必然不可能全是0,即至少有一个 α j ∗ > 0 \alpha^*_j>0 αj>0。可以用反证法来证明,假设 α ∗ = 0 \boldsymbol{\alpha}^*=0 α=0,则根据上式可得 w ∗ = 0 \boldsymbol{w}^*=0 w=0,这显然不是原始问题的解,产生矛盾。根据KKT条件(具体可参考李航《统计学习方法》附录部分,需要pdf版的可以私聊获取),对于所有的 α i ∗ \alpha^*_i αi有:
α i ∗ ( y i ( w ∗ ⋅ x i + b ∗ ) − 1 ) = 0 \alpha^*_i(y_i({\boldsymbol{w}^*} \cdot \boldsymbol{x}_i+{b^*})-1)=0 αi(yi(wxi+b)1)=0则对于 α j ∗ > 0 \alpha^*_j>0 αj>0所对应的实例点 ( x j , y j ) (\boldsymbol{x}_j,y_j) (xj,yj)有:
y j ( w ∗ ⋅ x j + b ∗ ) − 1 = 0 y_j({\boldsymbol{w}^*} \cdot \boldsymbol{x}_j+{b^*})-1=0 yj(wxj+b)1=0由于 y j ∈ { + 1 , − 1 } y_j \in \{+1,-1\} yj{+1,1},则有 y j 2 = 1 {y_j}^2=1 yj2=1,所以对上式两边同时 y j y_j yj可得:
b ∗ = y j − ∑ i = 1 N α i ∗ y i ( x i ⋅ x j ) b^*=y_j-\sum_{i=1}^{N}\alpha^*_i y_i(\boldsymbol{x}_i \cdot \boldsymbol{x}_j) b=yji=1Nαiyi(xixj)至此,线性可分支持向量机的模型求解就完成了。分离超平面可以写为:
∑ i = 1 N α i ∗ y i ( x i ⋅ x ) + b ∗ = 0 \sum_{i=1}^{N}\alpha^*_i y_i (\boldsymbol{x}_i \cdot \boldsymbol{x})+b^*=0 i=1Nαiyi(xix)+b=0分离决策函数可以写为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i ( x i ⋅ x ) + b ∗ ) f(\boldsymbol{x})=\text{sign}(\sum_{i=1}^{N}\alpha^*_i y_i (\boldsymbol{x}_i \cdot \boldsymbol{x})+b^*) f(x)=sign(i=1Nαiyi(xix)+b)

4.3 求解示例

图2 线性可分SVM求解示例

5.参考资料

李航《统计学习方法》
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
情感识别系统是一种可以自动判断和分类文本或语音中所表达的情感的算法支持向量机(SVM)是一种常用的机器学习方法,在情感识别中也广泛应用。 SVM基于对数据进行特征映射,将数据从低维空间转化为高维空间,以便更好地进行分类。在情感识别中,我们可以将文本或语音数据转化为特征向量表示,然后使用SVM进行分类。通常选择常用的特征表示方法如词袋模型或者TF-IDF进行特征提取。 下面给出一个用Matlab实现情感识别系统的示例代码: ```matlab % 导入情感数据集 data = importdata('emotion_data.txt'); % 划分训练集和测试集 trainRatio = 0.8; trainSize = int32(length(data) * trainRatio); trainData = data(1:trainSize,:); testData = data(trainSize+1:end,:); % 提取特征和标签 trainFeatures = trainData(:,1:end-1); trainLabels = trainData(:,end); testFeatures = testData(:,1:end-1); testLabels = testData(:,end); % 创建SVM模型 svmModel = fitcsvm(trainFeatures, trainLabels); % 在测试集上进行预测 predictedLabels = predict(svmModel, testFeatures); % 计算准确率 accuracy = sum(predictedLabels == testLabels) / length(testLabels); disp(['准确率:' num2str(accuracy*100) '%']); ``` 以上代码中,我们首先导入情感数据集,然后将数据划分为训练集和测试集。接着我们提取特征和标签,即将文本数据转化为特征向量表示。 然后我们使用fitcsvm函数来创建SVM模型,并通过predict函数在测试集上进行预测。最后我们计算准确率来评估模型的性能。 这是一个简单的情感识别系统的实现示例,实际情感识别会有更多的特征提取方法和模型调参等工作。希望这个回答能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

llfighting2018

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

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

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

打赏作者

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

抵扣说明:

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

余额充值