西瓜书/南瓜书_学习笔记_6

6.1 间隔与支持向量机

        给定训练样本集D=\left \{ (x_{1},y_{1}) ,(x_{2},y_{2}),...,(x_{m},y_{m})\right \}y_{i}\in\left \{ -1,+1 \right \},分类学习最基本的想法就是在D的样本空间中找到一个超平面,把样本分开

我们想很好的分隔开两种样本,其实选两种点中间的超平面就很好,因为可以看到它对局部扰动的“容忍性”最好,比如测试集中的点可能很接近分隔界,如果是其他的划分超平面,误差会很大,可以自己在这个图上随便画一些点,其实可以看出来,虽然最中间这条不能说处处最好,但是错误分类的点数相比而言不算多。也就是说,这种分类结果是最鲁棒的,对未知样本泛化能力最强。

样本空间中,划分超平面可通过如下线性方程来描述:

其中w=(w_{1};w_{2};...;w_{d})为法向量,决定了超平面的方向;b为位移项,决定了超平面和原点之间的距离.我们将超平面记为(w,b),样本空间内任意点x到(w,b)的距离为

(  ||w||代表是什么意思?_360问答 (so.com)

||w||表示为2-范数。如,w是一个n维列向量,w=(w1,w2,...,wn)';||w||=w'w。

二范数指矩阵A的2范数,就是A的转置共轭矩阵与矩阵A的积的最大特征根的平方根值,是指空间上两个向量矩阵的直线距离。类似于求棋盘上两点间的直线距离。

范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即:

1、非负性;

2、齐次性;

3、三角不等式。

它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。

扩展资料:

常用范数这里以Cn空间为例,Rn空间类似。

最常用的范数就是p-范数。若

,那么

可以验证p-范数确实满足范数的定义。其中三角不等式的证明不是平凡的,这个结论通常称为闵可夫斯基(Minkowski)不等式。

p-范数(2-范数 即 欧几里得范数)_p范数_Selvaggia的博客-CSDN博客

西瓜书 6.1 计算 样本空间任意点x到超平面(w,b)的距离d_证明样本空间中任意点 x 到超平面(w,b) 的距离为d_白百万的博客-CSDN博客

设点x到超平面S的投影为x_{1},则w·x_{1}+b=0,由于\underset{x_{1}x}{\rightarrow}与S的法向量w平行

                \left | w\cdot \vec{x\cdot x_{1}} \right | = \left | w \right |\underset{r}{\underbrace{\left | \vec{x\cdot x_{1}} \right |}} = \left | w \right |r r就是要求的距离

由于欧式距离下,向量的模=向量的L_{2}范数

                \left | w\cdot \vec{x\cdot x_{1}} \right |=\left | w \right |r=\left \| w \right \|r

一般如果范数不写下标,比如\left \| \vec{w} \right \|,默认为L_{2}范数

                \left \| w \right \|=\left \| w \right \|_{2}

又因为:

                        

已知:

                                        

得到:

即:

假设超平面(w,b)能将样本正确分类,即对于(xi,yi)\in D,若y_{i}=+1,则有w^{T}x_{i}+b< 0。令

现根据我们的定义把图画出来,\ominus 的点对于6.3中第二个式子的等号 \oplus对应第一个式子的等号

这几个训练样本点被称为支持向量(support vector),两个异类支持向量到超平面的距离之和为

它被称为间隔(margin)

欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能满足(6.3)中约束的参数w和b,使得\gamma最大,即:

 根据我们以前的知识,最大化分数就是最小化分母,即最小化\left \| w \right \|^{2}。可以把(6.5)可重写为:

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

6.2 对偶问题

        我们的目标是算出平面的表达式,也就是说,我们其实就是通过求解(6.6)来得到超平面所对应的模型。

线性规划对偶问题_显然易证的博客-CSDN博客

        对偶问题:其实就是每一个线性规划问题都存在一个与其对偶的问题,在求出一个问题解的时候,也同时给出了另一问题的解。

对(6.6)使用拉格朗日乘法可得到其对偶问题(dual problem)

具体来说,对(6.6)的每条约束添加拉格朗日乘子\alpha _{i}\geqslant 0,则该问题的拉格朗日函数可以写为:

我们先看一下书上的公式再详细写一下:

此处解出的\alpha _{i}就是(6.8)中的拉格朗日乘子,\alpha _{i}对应着样本(x_{i},y_{i}

这个转换其实就是把约束条件 转化到拉格朗日函数中去。

表示对L取关于a的最后大化,观察拉格朗日函数的形式:

现在, ,对 作关于 的最大化,那么:

当 (即满足约束条件)时,L(w,b,a)的最大为 f(w);

当 时,L(w,b,a)的最大为正无穷大。

这样 是一个分段函数。第一段是满足约束条件时,有函数f(w),第二段是一个正无穷大。这时要对这个分段函数取min,那么肯定是选择对满足约束条件时的f(w)取min,因为第二段是正无穷大。

这样,就把一个约束问题转化成无约束问题。

注:

这里还可以看出 要最大,那么必须有也就是拉格朗日乘子和约束中至少有一个为0;这就是KKT条件中的松弛
SVM支持向量机系列理论(二) 线性可分SVM模型的对偶问题_svm的对偶问题是凸二次么-CSDN博客

SVM对偶问题_对偶svm-CSDN博客

---------------------------------------------------------------------------------------------------------------------------------

如果按照我们上面谈到的拉格朗日乘子法的思路,则应该让L(x,α,β)对x以及参数α和β进行求导,然后得出结果带入原始便可求出我们需要的最优解。

但需要注意两点:
1、这里参数α和β总共p+q个,如果全部求偏导工作量太大,不现实;
2、并且大家有没有想过,这个问题可能根本就没有最优解这种情况存在。

针对上面情况,我们便引出了换一种思路,那就是利用对偶问题,也就是将原问题转化成其对偶问题进行求解。

这就是此处引入对偶问题的原因。

注意到(6.6)中存在着不等式约束,因此上述过程需要满足KKT条件(Karush-Kuhn-Tucker)

---------------------------------------------------------------------------------------------------------------------------------

注:(KKT条件就是在对偶问题中,找到最优解需要满足的条件。)

KKT条件等价于对偶间隙为0:

  • 总是充分的
  • 在强对偶条件下是必要的

详细证明可以看链接的文章。KKT条件(Karush-Kuhn-Tucker Conditions)-CSDN博客

---------------------------------------------------------------------------------------------------------------------------------

即要求:

(第一个式子为对偶问题可行域,第二个式子为原问题可行域,第三个式子为互补松弛性)

因为满足这个式子,所以对于任意(x_{i},y_{i}),总有\alpha _{i}=0或y_{i}f(x_{i})=1。若\alpha _{i}=0,则该样本不会对f(x)有任何影响,因为根本不会在求和式中出现;若y_{i}f(x_{i})=1,则\alpha _{i}>0,所对应的点处于最大间隔边界上,是一个支持向量。这显示一个支持向量机的重要特征:训练完成后,大部分的训练样本都不需要保留,不会对模型产生影响,最终模型只和支持向量有关。

我们也可以把这两种可能的取值代回(6.12)看一下,可以看到,第一种情况不会成为加和项,第二种情况,式子中只会有\alpha\beta两项,符合之前的对问题的定义,即对α和β求偏导。

那么如何求解(6.11)呢?我们可以看一下二次规划的形式:

最优化 | 二次规划的基础知识理论 | 例题讲解_二次规划例题_CHH3213的博客-CSDN博客

然后再对比一下

可以发现,(6.11)其实就是个二次规划问题。但是这个式子的问题规模正比于训练样本数,所以为了减少训练开销,我们引入SMO(Sequential Minimal Optimization)

SMO的基本思路是先固定\alpha _{i}以外的所有参数,然后求式子在α上的极值。

所以SMO每次选择两个变量\alpha _{i}\alpha _{j},固定其他参数,然后不断执行以下步骤直到收敛:

·选取一对需更新的变量\alpha _{i}\alpha _{j}

·固定\alpha _{i}\alpha _{j}以外的参数,求解式(6.11)获得更新后的\alpha _{i}\alpha _{j}.

如果选取的参数中有不符合KTT的,那就说明,不是出现了负数,就是出现了分数,总数都会减小,也就说目标函数会收敛。同理可得,越是违反条件,那么减幅就越大,所以SMO先选取违反幅度最大的变量。

我们的目的是让目标函数收敛,所以第二个参数也要取使函数变化最大的参数,但是,直接写一个预测变量对应的函数变化值大小的函数复杂度太高,因此,SMO选择选取两变量,使对应样本之间的间隔最大,这样通常会给函数带来更大的变化。

在固定其他参数后,考虑\alpha _{i}\alpha _{j},可将(6.11)中的约束重写为:

其中

消去一个变量后,得到一个单变量二次规划问题,仅有≥0一个约束,直接算出闭式解就行。

又因为对任意支持向量(x_{S},y_{S})都有y_{S}f(x_{S})=1,就可以得到:

其中S是所有支持向量的下标集。为了提高鲁棒性,选用所有支持向量求解的平均值

6.3 核函数

        

如图,现实问题中总是会有非线性可分的问题,也就是不能用超平面直接分开样本,比如上面的异或问题。但是我们也发现,当我们把二维平面的异或问题的图投影到三维的时候,就出现了可以分割的超平面。

这种情况事实上拥有普适性,也就是说,如果原样本空间有确定的维数,那么我们肯定能找到一个高维特征空间使样本可分。

将x换为高维映射后的特征向量\phi (x),得到:
                                                f(x)=w^{T}\phi (x)+b                    (6.19)

同理,类似于(6.6)得:

                

就是单纯的代换,可以理解为t

\phi (x_{i})^{T}\phi(x_{j})因为样本空间可能维数很高,所以很有可能很难求内积,所以我们引入一个函数来解决这个问题:

这是数学上的核技巧

数学基础-核技巧-CSDN博客

SVM & 核技巧(数学推导)_svm的核技巧-CSDN博客

非线性支持向量机(KSVM)就是核技巧常见的运用

决策函数为:

这里就是用核函数技巧规避了正面计算内积,只需要用那些常见的核函数来应用SVM

from sklearn.svm import SVC
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
clf1 = SVC(kernel='rbf', max_iter=100)
clf1.fit(X, y)

clf2 = SVC(kernel='linear', max_iter=100)
clf2.fit(X, y)

clf3 = SVC(kernel='sigmoid', max_iter=100)
clf3.fit(X, y)

求解了重写过的对偶问题后,可以得到:

注意,核矩阵(kernel matrix)K总为半正定的:(给定一个大小为n\times n的实对称矩阵 A ,若对于任意长度为 n 的非零向量 x ,有 xTAx>0 恒成立,则矩阵 A 是一个正定矩阵。给定一个大小为n\times n的实对称矩阵 A ,若对于任意长度为 n 的非零向量 x�,有 xTAx⩾0 恒成立,则矩阵 A 是一个半正定矩阵。)

为什么核函数必须是半正定的?

  • 半正定矩阵的特征值非负
  • 核函数必须是正半定的,以便它们具有合理的(非负)距离。 那就是margins是正的
  • 任何 半正定的对称函数都可以作为核函数

  • 任何两个核函数的和、乘积也是核函数

  • 一个核函数的n次方也是核函数

6.4 软间隔和正则化

        同样的,在现实问题里,我们很难找到合适的核函数来确定超平面,即使找到了,也很难确定这个平面是不是因为过拟合造成的。

        所以,我们需要引入“软间隔”(soft margin),允许向量机在一些样本上出错。

之前说的要求所有向量都满足(6.3)的,被称为硬间隔(hard margin).

这里的软间隔则是要求部分满足即可:

优化目标可写为:

(参考SVM定义)

可以看出来,当 C无穷大时,后一项中如果样本不符合约束,会得到C,也就是一个无穷大的数,很明显不符合条件;即,这种情况下,强制符合(6.3),然后就会得到和(6.6)一样的式子。

然而,和当时逻辑回归时,一开始二项分布的函数一样,l_{0/1}非凸、非连续,也就是说不能求导。所以我们需要用一些数学性质好的函数来替代它,一般都是凸函数连续,且是l_{0/1}的上界。这种方法叫做替代损失(surrogate loss)。

常用的函数有:

这就是常用的软间隔支持向量机。SVM支持向量机-软间隔与松弛因子(3)_svm松弛因子-CSDN博客

类似(6.8),通过拉格朗日乘子法得到(6.35)的拉格朗日函数

其中\alpha _{i}\geqslant 0\mu _{i}\geqslant 0是拉格朗日乘子

得到(6.35)的对偶问题

(软间隔)

(硬间隔)

对比可看出,唯一的不同就是约束条件,软间隔多了一个上限,那么原问题中就少了一个约束条件,符合我们之前对软硬间隔的推断。

同样使用之前的思路,先列出KKT条件:

软间隔支持向量机的KKT条件

对于训练样本(xi,yi),有
1)若α=0,那么yi(wTxi+b)-1≥0,即样本在间隔边界之外,即被正确分类。
2)若0<α<C,那么ξi=0,yi(wTxi+b)-1=0,即样本在间隔边界上。
3)若α=C,则μi=0,该样本点是有可能正确分类、也有可能分类错误,此时考试ξi。
① 如果0≤ξi≤1,那么样本点在超平面和间隔边界之间,但是被正确分类。
② 如果ξi=1,那么样本点在超平面上,无法被正确分类。
③ 如果ξi>1,样本点被分类错误。
机器学习-第六章 支持向量机(SVM)_正则化常数用于对结构风险和经验风险进行折中-CSDN博客

我们还可以把(6.29)中的0/1损失函数换成别的替代函数以得到其他学习模型。

它们具有一个共性:优化目标中的第一项用来描述划分超平面的“间隔”大小,另一项\sum_{i=1}^{m}l(f(x_{i}),y_{i})用来表述训练集上的误差,可写为更一般的形式

\Omega (f)被称为结构风险(structural risk)用于描述f的某些性质,表述了我们希望获得什么样的模型,有助于削减假设空间,从而减小了最小化训练误差的过拟合风险。

\sum_{i=1}^{m}l(f(x_{i}),y_{i})被称为经验风险(empirical risk)用于描述模型与训练数据的契合程度;

C用于对两者进行折中。

(6.42)也可以称为正则化(regularization)\Omega (f)称为正则化项,C被称为正则化常数。

6.5 支持向量回归

支持向量回归(Support Vector Regression)-CSDN博客

​​​​​​​        与传统回归模型直接比较预测值和真实值来计算损失不同,支持向量回归(Support Vector Regression,简称SVR)同支持向量机,也容许我们出现一定的误差\epsilon,即当f(x)与y之间的误差超过\epsilon时才会计算损失

如图,形象地说就是在超平面旁生成了一个区域,只要落入这个范围都是正确的。

引入松弛变量\xi _{i}\hat{\xi }_{i},可将(6.43)重写为:SVM松弛变量图解-CSDN博客

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

与SVM类似,先用拉格朗日乘子法,将目标函数变成

令L对w,b,\xi _{i}\hat{\xi }_{i}的偏导为0,可得:

也是同样的,我们需要对偶问题:

需满足KKT条件,即要求:

可以看出,如果0<\alpha _{i}<C ,则必有\xi _{i}=0,进而有:

可以看出来,只有样本不落入这个间隔带中,两个α才能取非0值,且因为不能同时成立,所以\alpha _{i}\hat{\alpha _{i}}至少有一个为0

将(6.47)带入(6.7),得SVR的解形如

实践中我们会采取一种更鲁棒的方式,就是选取0<\alpha _{i}<C的样本求解b后取平均值。

若考虑特征映射形式(6.19),则(6.47)将形如

                                   f(x)=w^{T}\phi (x)+b                    (6.19)

进而可得:

 

数学建模之Python-支持向量回归(SVM)_支持向量回归预测python-CSDN博客

#程序文件Pex19_2.py
import numpy as np
import pylab as plt
from sklearn.svm import SVR

np.random.seed(123)
x=np.arange(200).reshape(-1,1)
y=(np.sin(x)+3+np.random.uniform(-1,1,(200,1))).ravel()

model = SVR(gamma='auto'); print(model)
model.fit(x,y); pred_y = model.predict(x)
print("原始数据与预测值前15个值对比:")
for i in range(15): print(y[i],pred_y[i])

plt.rc('font',family='SimHei'); plt.rc('font',size=15)
plt.scatter(x, y, s=5, color="blue", label="原始数据")
plt.plot(x, pred_y, '-r*',lw=1.5, label="预测值")
plt.legend(loc=1)

score=model.score(x,y); print("score:",score)
ss=((y-pred_y)**2).sum()  #计算残差平方和
print("残差平方和:", ss)
plt.show()



6.6 核方式

(这个其实在上面第一次提及核方法的地方做了解释,贴了链接,所以这一部分贴原文为主)

定理对损失函数没有限制,对正则化项Ω仅要求单调递增(?)

假设可通过某种映射\phi :\chi \mapsto F将样本映射到一个特征空间F,然后在F中执行线性判别分析:
​​​​​​​

线性判别分析(LDA)详解-CSDN博客

既然是线性的,那么就和第三章的东西很有关了。

当时在第三章也是这样要求一个损失值。

因为在实际问题中,我们是知道映射的具体形式的,所以我们直接用核函数\kappa (x,x_{i})=\phi(x_{i})^T \phi (x)表示这个映射,用J代替原先的损失l(这里证实了我们把它和第三章联系起来的可行性),再令Ω=0,得

由(6.59)得:

接下来是之前链接里说过的求核矩阵:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值