多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 支持向量机 * [第一部分 线性可分的SVM推导](#第一节) * [第二部分 线性不可分的SVM推导](#第二节) * [第三部分 多类别的SVM推导](#第三节) * [第四部分 线性可分的SVM实验](#第四节) * [第五部分 线性不可分的SVM实验](#第五节) * [第六部分 多类别的SVM实验](#第六节) <h5 id="第一节">第一部分:线性可分的SVM推导</h5> &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp要想理解SVM我们首先要从多维空间的平面方程说起。我们先从三维空间说起吧,然后我们再推广到更高维空间。我们主要用到点法式方程。<br> &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp点法式方程: 点法式是通过平面的一个法向量和平面的一个点来确定一个平面的。法向量是与这个平面所有向量垂直的向量。那么要求法向量就相当简单我们只需要取这个平面上的两个向量a,b由于垂直向量点乘为0我们可以列出方程组an=0 bn=0 两个式子就可以解出法向量n=(p,q,t) 然后我们知道一个点A(l,o,c) 根据点法式的原形得出平面方程 p(x-l)+q(y-o)+t(z-c)=0 化成一般式子:px + qy + tz + d = 0 其中d = -(pl + qo+ tc)如果d = 0证明平面过原点。否则不过原点(记住) 得到的一个个结论: 1. 平面**用向量表示为:N*X+d=0**(其中向量维度可以是任意维度d是标量) 好了准备工作做完我们开始正式进入主题。 现在我们有一批样本每个样本:X={x1, x2, x3.....}其中x1,x2,x3......等是每个样本的属性。因为这一节我们进行可线性分类的二分类问题。 假设:![](https://box.kancloud.cn/44fcab839e5c21fb60c1ca96cad90835_656x181.png) 我们的目标是求出两个最大间隔的平面的中间的平面的方程(其中在那两条直线上的样本点就叫做支持向量): ![](https://box.kancloud.cn/865e0c50744ff592e84a2776fbcb5e2d_922x812.png) :-: 其中方程后面的1和-1表示:两种类别用1和-1来分开(其中的1和-1只是为了方便推导,其实可以任意不同常数) 现在有了方程我们可以去求要优化的目标函数了。就是间隔的大小: 学过高等数学应该知道点到面的距离公式: ![](https://box.kancloud.cn/86656676c4b1eaa3e887e79e0e84d653_498x180.png) :-: 其中的向量是行向量 我们很容易得到间隔大小为:![](https://box.kancloud.cn/f7ca77444d5e1dcfa6bf4de3ad1ed627_266x138.png) 好我们整理一下要优化的问题如下所示: ![](https://box.kancloud.cn/28fab2018af931c3c1df909437536385_645x175.png) 我们可变成等价的问题如下: ![](https://box.kancloud.cn/c323ab13e6aaee566f455126fe283718_777x221.png) 此问题是凸二次规划问题能直接用现成的优化计算包求解,但我们有更高效的办法。 注意:一定要搞明白这里面的变量和要优化的目标函数。这里的目标函数很明显就是间隔值,自变量是W, b,一定注意X是确定的值。 这相当于求一个有约束函数的最值问题。我们首先想到的是拉格朗日乘子法。我们得到拉格朗日函数: ![](https://box.kancloud.cn/20e82a33be8dbc552e0d3a8331d81911_768x114.png) 并对W和b求导为0可得到: ![](https://box.kancloud.cn/8475644a16f78164bcf60b3ce28339c0_905x250.png) :-: 其中α>=0 ![](https://box.kancloud.cn/2ebc256f65fc9107385d9c83a4be8de3_1273x340.png) ![](https://box.kancloud.cn/9b1e62b6cbc63df0391856cdce5a3b11_973x636.png) 注意:这里把对W,b有约束的优化的问题通过用拉格朗日函数求偏导为0,然后带入目标函数,转换成了对α有约束的优化问题。 ***** 分析: 因为上面的求拉格朗日函数时,是不等式约束,所以应该满足KKT条件:![](https://box.kancloud.cn/218d6d4df56fa774b8d446c6c624c55d_671x188.png) 我们分析一下这几个条件我们已经知道了每一个拉格朗日乘子α对应一个样本,分析最后一个不等式,我们可以知道拉格朗日乘子α=0或者对应样本yf(x)=1。如果α=0则该样本不会出现拉格朗日函数中也就不会对要求的超平面方程起作用。若α>0则必有对应的样本yf(x)=1,既该样本在最大间隔边界上。是一个支持向量。 重点:(当然前面的模型假设也很重要)整体思路先对Wb求最优化(KKT条件),然后求导为0.现在Wb变成只与变量拉格朗日乘子有关的。然后变成对拉格朗日乘子优化问题。求出后拉格朗日乘子后直接得到Wb既求解完毕。我们可以使用KKT条件分析:拉格朗日常数与每个样本对应。如果拉格朗日乘子为0那么对应的样本对求解W没有作用。在图像上的含义也就是没有在最大间隔平面上。 ***** 下面就是想办法求出拉格朗日乘子的算法。为了求这个我们换成了对偶问题。只与拉个朗日乘子一个变量有关(注意始终样本使常量) 这里我们就不说怎么求解拉格朗日乘子了,可以去查资料,一个著名的方法师SMO。 如果仔细观察我们还没有给出求解b的过程呢。 ![](https://box.kancloud.cn/780583fd0c7a6dde44d5db75b1a601e6_741x359.png)