导航:首页 > 源码编译 > svm5的算法

svm5的算法

发布时间:2022-12-18 18:17:50

‘壹’ 分类算法 - SVM算法

SVM的全称是Support Vector Machine,即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。SVM要解决的问题可以用一个经典的二分类问题加以描述。如图1所示,红色和蓝色的二维数据点显然是可以被一条直线分开的,在模式识别领域称为线性可分问题。然而将两类数据点分开的直线显然不止一条。图2和3分别给出了A、B两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。每个决策面对应了一个线性分类器。虽然在目前的数据上看,这两个分类器的分类结果是一样的,但如果考虑潜在的其他数据,则两者的分类性能是有差别的。

之前在b站看到一个非常好的介绍!!十分推荐, 这是传送门

按照我自己的理解,以二维数据为例,我们喂给模型已经分类好的数据,那么假设有一线条可以将此部分数据正确划分为2大部分,这样可以形成2个等式,即横线两边的数值归类为1或者-1,一般情况下可以求出最大间隔即无数个解,因此需要一个限定条件求出最优的那条线条。限定方式为:无数个解形成一个解的范围,距离边缘相等的那条线条即是最优解。

有时候本来数据的确是可分的,也就是说可以用线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离的,可以由于一个橙色和一个蓝色的异常点导致我们没法按照线性分类支持向量机方法来分类。

以上讨论的都是在线性可分情况进行讨论的,但是实际问题中给出的数据并不是都是线性可分的,比如有些数据可能是曲线的。

那么这种非线性可分的数据是否就不能用SVM算法来求解呢?答案是否定的。事实上,对于低维平面内不可分的数据,放在一个高维空间中去就有可能变得可分。以二维平面的数据为例,我们可以通过找到一个映射将二维平面的点放到三维平面之中。理论上任意的数据样本都能够找到一个合适的映射使得这些在低维空间不能划分的样本到高维空间中之后能够线性可分。

当特征变量非常多的时候,在高维空间中计算内积的运算量是非常庞大的。考虑到我们的目的并不是为找到这样一个映射而是为了计算其在高维空间的内积,因此如果我们能够找到计算高维空间下内积的公式,那么就能够避免这样庞大的计算量,我们的问题也就解决了。实际上这就是我们要找的 核函数 ,即两个向量在隐式映射后的空间中的内积。

(1)对于边界清晰的分类问题效果好;
(2)对高维分类问题效果好;
(3)当维度高于样本数的时候,SVM 较为有效;
(4)因为最终只使用训练集中的支持向量,所以节约内存

(1)当数据量较大时,训练时间会较长;
(2)当数据集的噪音过多时,表现不好;
(3)SVM 不直接提供结果的概率估计,它在计算时直接使用 5 倍交叉验证。

(1)LR 与 SVM 都是分类算法;
(2)LR 与 SVM 都是监督学习算法;
(3)LR 与 SVM 都是判别模型;
(4)关于判别模型与生成模型的详细概念与理解,笔者会在下篇博文给出,这里不详述。
(5)如果不考虑核函数,LR 与 SVM 都是线性分类算法,也就是说他们的分类决策面都是线性的

这里需要说明的是,LR 也是可以用核函数的,因在 LR 算法里,每个样本点都必须参与决策面的计算过程,也就是说,如果在 LR 里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以在具体应用时,LR 很少运用核函数机制。

(1)损失函数不同;
(2)SVM 只考虑支持向量,而 LR 考虑全局(即远离的点对边界线的确定也起作用);
(3)在解决非线性问题时,SVM 采用核函数的机制,而 LR 通常不采用核函数的方法;
(4)SVM 的损失函数就自带正则(损失函数中的12||w||2项),这就是为什么 SVM 是结构风险最小化算法的原因,而 LR 必须另外在损失函数上添加正则项;
(5)LR是参数模型,SVM是非参数模型,本质不同。
(6)在训练集较小时,SVM 较适用,而 LR 需要较多的样本。

(1)LR 与线性回归都是广义的线性回归;
(2)线性回归模型的优化目标函数是最小二乘,而 LR 则是似然函数;
(3)线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,逻辑回归的鲁棒性比线性回归的要好。
(4)逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线性回归为理论支持的。但线性回归模型无法做到 sigmoid 的非线性形式,sigmoid 可以轻松处理 0/1 分类问题。
(5)线性回归主要做预测,LR 主要做分类(如二分类);

‘贰’ 机器学习算法中的SVM和聚类算法

相信大家都知道,机器学习中有很多的算法,我们在进行机器学习知识学习的时候一定会遇到过很多的算法,而机器学习中的SVM算法和聚类算法都是比较重要的,我们在这篇文章中就重点给大家介绍一下这两种算法,希望这篇文章能够帮助大家理解这两种算法。

机器学习算法——SVM

提道机器学习算法就不得不说一说SVM,这种算法就是支持向量机,而支持向量机算法是诞生于统计学习界,这也是机器学习中的经典算法,而支持向量机算法从某种意义上来说是逻辑回归算法的强化,这就是通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。不过如果通过跟高斯核的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。核事实上就是一种特殊的函数,最典型的特征就是可以将低维的空间映射到高维的空间。

于是问题来了,如何在二维平面划分出一个圆形的分类界线?其实我们在二维平面可能会很困难,但是通过核可以将二维空间映射到三维空间,然后使用一个线性平面就可以达成类似效果。也就是说,二维平面划分出的非线性分类界线可以等价于三维平面的线性分类界线。接着,我们可以通过在三维空间中进行简单的线性划分就可以达到在二维平面中的非线性划分效果。而支持向量机是一种数学成分很浓的机器学习算法。在算法的核心步骤中,有一步证明,即将数据从低维映射到高维不会带来最后计算复杂性的提升。于是,通过支持向量机算法,既可以维持计算效率,又可以获得非常好的分类效果。因此支持向量机在90年代后期一直占据着机器学习中最核心的地位,基本取代了神经网络算法。

机器学习算法——聚类算法

说完了SVM,下面我们给大家介绍一下聚类算法,前面的算法中的一个显着特征就是我的训练数据中包含了标签,训练出的模型可以对其他未知数据预测标签。在下面的算法中,训练数据都是不含标签的,而算法的目的则是通过训练,推测出这些数据的标签。这类算法有一个统称,即无监督算法。无监督算法中最典型的代表就是聚类算法。而聚类算法中最典型的代表就是K-Means算法。这一算法被广大朋友所应用。

现在,我们可以清楚认识到机器学习是一个综合性很强的学科。在这篇文章中我们给大家介绍了很多关于机器学习中的支持向量机和聚类算法的相关知识,通过这些知识我们不难发现机器学习中有很多有用的算法,熟练掌握这些算法是我们真正学会机器学习的必经之路。

‘叁’ SVM算法原理

一、决策面方程

以二维空间为例,二维空间中任意一条直线方程可以写为

我们将其向量化,可以得到

设用向量w代表矩阵a1和a2,用向量x代表矩阵x1和x2,标量γ代表b,则方程可化表示为

从方程可知,一个n维空间的超平面在二维空间上的表现,可以是一条直线,或者一个曲线(二维空间中只能看到这个n维超平面穿过而无法看到其模样), 超平面方程即是我们的决策面方程

二、函数间隔和几何间隔

在SVM监督学习中,我们规定标签数据为+1和-1两个值,这么做的目的, 可以计算出任意一个样本点在超平面方程上的表现结果的符号,与标签符号是否一致来判断分类的正确性 ,为此我们可以引入函数间隔的概念

但是当我们成比例的缩放w和γ,函数间隔的值也将成比例的变化,可是超平面的位置并没有发生任何变化,所以函数间隔并不是我们想要的分类间隔,为此,我们需要引入几何间隔的概念

还是以二维空间出发,任意一点到直线的距离可以写成

我们将其拓展到n维空间,直线方程即是我们的超平面方程,则n维空间中任何一点到超平面的距离可以写成

为此,我们引入几何间隔概念,其中||w||表示向量w的二范数

从几何间隔可以看出,就算等比例缩放w和γ,由于除上了||w||使得几何间隔的值不会改变,它只随着超平面位置的变化而变化,因此, 我们要寻找的分类间隔是几何间隔

三、不等式约束条件

SVM算法的目的是找到一个将分类效果达到最合理化的超平面,这个超平面即是分类器 。而评估分类器的好坏的标准就是分类间隔的大小

我们定义分类间隔的距离为d,好的分类器应该让所有样本点到决策面的几何间隔都大于等于d

化简上式,不等式两边同时除以d可得

由于||w||和d都是标量,可定义

则上式可化简为

在不等式两边同时乘以yi,即将两个式子化简为一个式子(这里体现了正是因为标签数据为+1和-1,才方便将约束条件变成一个约束方程)

这个约束方程的意义 即是任何样本点到超平面(分类器)的几何间隔都大于等于分类间隔

四、SVM最优化模型的数学描述

评估分类器的优劣是分类间隔的大小,且对于任意样本点都满足约束方程

由约束方程可知,当样本点落在支持向量边界上有如下关系

则分类间隔d可以表示为支持向量点到超平面的几何间隔

要让任何样本点都在d之外,即求分类间隔d的最大值,则目标函数可以写成

为了方便在后续最优化处理中对目标函数的求导,我们将目标函数做等效变化

由目标函数是二次的,而约束条件是线性的,则 SVM的数学模型即是:不等式约束条件下的二次型函数优化 ,而求解这一类优化问题,接下来我们需要构造 拉格朗乘子函数

五、引入拉格朗函数

目标函数是求解在约束条件g(x)下的二次型函数f(x)的最小值,直观上我们希望构造一个函数L(x),使得L(x)在f(x)的可行解区域内的求出的值和f(x)求出的值完全一样,而在f(x)的可行解区域外,L(x)的值又接近无穷大,这么做的目的,使得我们可以用一个函数L(x)来等效表示原问题的g(x)和f(x)

拉格朗函数的目的,就是将约束条件融合到目标函数中,构造一个新函数来表示目标函数,将有约束的优化问题转化为无约束的优化问题

下面,我们构造拉格朗函数来表示目标函数

其中αi是拉格朗日乘子,每一个约束条件对应一个拉格朗日乘子,其中αi大于等于0

则原优化问题可以转化为

讨论如下条件(1)(2):

(1) 当样本点不满足约束条件时,即说明在 可行解区域外

此时将αi置为正无穷大,那么θ(w)显然也是正无穷大

(2) 当样本点满足约束条件时,即说明在 可行解区域内

此时θ(w)的最小值就是原目标函数,于是综上所述,引入拉格朗乘子函数后,可以得到新的目标函数

我们用p*表示优化目标函数后的最优解,且与最初的目标函数等价

观察新的目标函数,如果直接求偏导数求解,那么一上来将面对w和b两个未知参数,而αi又是不等式约束,求解过程将非常复杂。换一个角度思考,如果将max和min的位置对调,变成如下新的目标函数

上式变化使用了 拉格朗日函数的对偶性,交换后的新问题即是原目标函数的对偶问题 ,我们用d*来表示对偶目标函数的最优解,可见d*的求导过程比p*相对容易,且d*<=p*,而当满足下列条件时,d*= p*

因为目标函数本身已经是一个凸函数,而优化问题又是求解最小值,所以目标函数的最优化问题就是凸优化问题,则接下来就要重点讨论KKT条件

六、KKT条件的描述

一个最优化模型能够表示成下列标准形式

其中f(x)是需要最小化的函数,h(x)是等式约束,g(x)是不等式约束,m和n分别是等式约束和不等式约束的数量

KKT条件即是规定f(x)的 最优值 必须满足以下(1)(2)(3)条件, 只有满足KKT条件,目标函数的最优化问题依然可以用拉格朗日乘子法解决

很明显,我们需要优化的目标函数属于带有不等式约束函数g(x),所以条件二显然满足,下面我们来分析条件一和条件三的理论

七、目标函数的等高线与约束条件的最优值分析(条件一)

对于KKT条件一的分析,我们假设目标函数是f(x1,x2)的二元函数,它的图像在三维空间里是一个曲面,准确的来说是一个凸曲面

其中g(x1,x2)是约束方程,要求目标函数f(x1,x2)的最小值,即转化为 求g(x1,x2)=c这条曲线上的一点,使得f(x1,x2)取得最小值,换个比喻,就是在山上(目标函数曲面)寻找一条山路(约束条件曲线)的最低点

我们画出目标函数的等高线,来分析目标函数最优值和约束条件的关系

对于研究目标函数z=f(x1,x2),当z取不同的值,即将曲线z投影在(x1,x2)组成的空间中(这里指的是二维空间),也就是曲面的等高线,上图中d1和d2即是两条目标函数的等高线,可以看出,当约束函数g(x1,x2)与目标函数的等高线有共同的交点, 即证明这组值同时满足在目标函数的可行域中,也符合约束条件的约束关系

如果等高线与g(x1,x2) 相交 ,则是一组目标函数的解,但是这个解一定不是最优解, 因为相交意味着肯定存在其它等高线在该条等高线的内部或者外部 ,可能会使得新的等高线与g(x1,x2)的交点更大或者更小,这就意味着只有当等高线与g(x1,x2) 相切 ,才可能得到最优解(切线可能多条)

所以最优解必须满足: 目标函数的负梯度方向与约束函数的梯度方向一致

而上式恒成立的条件就是: 拉格朗日乘子α >= 0 ,且这个式子就是目标函数对各个参数求偏导数的结果,即KKT的第一个条件:目标函数对各个参数的导数为0

八、分类讨论约束条件和拉格朗日乘子的组合(条件三)

对于KKT条件三,可以看出,因为所有的约束函数gi(x)<=0,所有的拉格朗日乘子αi>=0,要使得求和后结果为0,要么某个约束函数gi(x)=0,要么其对应的αi=0

从一个案例出发来分析KKT条件三的逻辑,假设目标函数和约束函数是

将不等式约束构造出拉格朗日函数,并分别对x1和x2求偏导数

而KKT的条件三要求最优解满足 ∑α*g(x) = 0,在这个案例里α和g(x)只有一个,结合条件一,可以得到

根据之前的分析,最优值满足条件三的话,要么α=0,要么g(x)=0

(i):如果α=0,则x1=1,x2=-2,代入g(x1,x2) =10-1-10*(-2)=29>0,发现这组解违背了约束函数g(x)<0,则舍弃这组解

(ii): 如果g(x1,x2)=0,则代入x1和x2的表达式到g(x)中,解出α=58/101>0,发现这组解不违背约束函数,则代入α解出x1=130/101,x2=88/101,则这组解有可能是最优解

综上(i)(ii)讨论,目标函数的最优值符合KKT条件三,也说明了 满足强对偶条件的优化问题的最优值必须满足KKT条件

九、求解对偶问题

上面分析了目标函数满足凸优化和KKT条件,则问题转化为求解原问题的对偶问题(即p*=d*)

根据对偶问题描述,先要求内侧w和b关于L(w,b,α)的最小化值,即求L对w和b的偏导数

将w和b的偏导数带入拉格朗函数化简得

整理一下最终化简结果为

从上述结果可以看出,样本的x和y是已知的,此时的 L(w,b,α)函数只有一个变量,即αi

我们归纳一下现在的目标函数为

现在目标函数变成了如上形式,其中αi>=0,这里隐含着一个假设,即数据100%线性可分,但是现实生活中,数据往往是不会那么规则的线性化,为此我们需要引入松弛变量

十、引入松弛变量

由于现实世界中的数据都是带有噪音的,也就是数据可能出偏离其正常的位置很远,而出现这种极端现象后往往会影响超平面的选择,也许将无法构造出将数据彻底分开的超平面出来

所以对于处理这种情况, SVM需要允许(妥协)出某些噪音很大的数据点能够偏离超平面,即允许其出现在超平面的错误的一侧 ,为此我们引入松弛变量C,这样我们的目标函数又变为

接下来为了研究讨论αi的取值范围,我们加上一个负号将目标函数等价转化为

十一、讨论拉格朗乘子的取值意义和其值域

回顾一下最初的约束条件为

设ui为该约束条件,可以归纳出αi关于约束函数的取值意义

αi只有满足上述3种情况,才能求出最优解,所以 当αi与约束条件ui冲突的时候,需要更新这些αi ,这也就是满足目标函数的第一个约束限制,即0<=αi<=C

而同时目标函数还受到第二个约束条件的限制,即

所以不能只更新一个αi因子,需要同时再次更新第二个αj因子,也就是 α因子总是成对的更新(αi对总是和αj配对),一增一减,此消彼长,才能保证加权和为0的约束 ,同时这也就是下面提及SMO算法的思想和多元函数化简为二元函数,在从二元函数化简为一元函数的难点

根据这个约束和α因子需要成对更新,假设我们选取的两个拉格朗乘子为α1和α2,则更新之前是old,更新之后是new,且更新前后需要满足和为0的约束

两个因子同时更新显然非常困难,所以需要先求出第一个αj的解,再用αj的解去表示更新第二个αi的解 ,后文的SMO算法会阐述这一点。因此需要先确定αj的取值范围,假设L和H分别为它的下界和上界,结合目标函数的约束限制来综合讨论L和H的取值关系

(i):当y1和y2异号时,可以得到

移项可得a2 = a1 - A,此时α的取值范围如下图所示

所以此时α的上下界H和L为

(ii):当y1和y2同号时,可以得到

移项可得a2 = -a1 + A,此时α的取值范围如下图所示

所以此时α的上下界H和L为

综上(i)(ii)的讨论,通过y1和y2的异号或者同号,可以推导出α更新后的上下界分别为

这个公式显得非常的重要,它将α因子限制在有效的矩形范围内,在SMO算法中,当我们更新完α后,由于α可能会被更新得很大或很小,因此需要经过裁剪来保证α的在约束条件内

12、SMO算法的思想

回顾之前第九,第十,第十一步的分析,目标函数为

目标函数只包含n个变量α的 多元函数 ,且带有两个约束条件,我们的 目的是求出目标函数的最小值,即找到一组α的组合,使得目标函数取得最小值

由第十一步的分析,我们需要不断更新这n个α因子,通过迭代来逼近函数达到最小值,但是如果一次性更新n个参数,将会有n!种组合,那么时间复杂度将会非常高,为此我们首先想到 坐标上升(下降)法

来通过一个例子来说明坐标上升法的思路

可知案例中要求一个三元函数的最大值, 算法的思想是每次迭代时只更新一个维度,通过多次迭代直到收敛来优化函数的最值 ,求出三个变量的偏导数推出其关系

通过迭代即就可以求出其最值

SMO算法借鉴了坐标上升(下降)法的思想来优化α因子组合,但是由于目标函数的第二个约束条件有加权和为0的限制,导致每次迭代时候不能只更新一个因子αi,必须同时更新与之配对的另一个因子αj,此消彼长才能保证加权和为0(第十一步中已提及)

所以SMO算法思想是将原始问题中,求解n个参数的二次规划问题,分解成了多个子二次规划问题来分别求解,每一个子问题只需要求解2个参数,即将多元函数推导为二元函数,再将二元函数推导为一元函数

13、多元函数推导为二元函数

目标函数是关于α的N元函数,通过SMO的算法思想,假设每次迭代更新,选取一对α1和α2的组合,其余的乘子不变, 首先需要将α1和α2从目标函数中分离出来 ,也就是将多元函数推导为二元函数

从N元函数中分离出α1和α2因子

由于上式推导结果过于复杂,我们定义2个表达式来表示上式常量部分,用来简化上式

又由于单独存下的常数项对以后的求导没有贡献,所以我们提出单独的常数项定义为Constant

带入vi和Constant表达式,则结果化简为

至此,我们将 多元函数推导为含有α1和α2变量的二元函数 ,接下来将这个二元函数推导为一元函数

14、二元函数推导为一元函数

我们需要推导出α1和α2的关系,然后用α2来表示α1带入二元函数,就可以推导出关于α2的一元函数了

由目标函数的第二个约束条件

同理根据SMO算法思想,从约束条件中分离出α1和α2

将等式两边同时乘以y1,可推导出α1和α2的关系

同理,我们定义两个表达式r和s来表示上式的常量部分,用来简化上式关系

带入r和s后,α1和α2的关系推导为

下面将α1带入我们的二元函数中,可得

至此, 我们将二元函数推导为只含有一个变量α2的一元函数 ,接下来终于可以对目标函数求导了

15、求解一元函数的偏导数,推导出第一个拉格朗乘子的递推关系

我们对一元函数求α2的偏导数为0

带入s=y1*y2和y2*y2=1,整理上式可求出α2

‘肆’ SVM算法-推导

第一部分:从几何意义到数学表达

第三部分:SMO
求解第二部分最后推导出的最小化问题,每次固定两个lambda,由于有最后一个条件限制:lambdai*yi + lambdaj yj = const,labmdai可以用lambdaj表达出来,最小化函数是一个抛物线,开口朝上,求导,令导数为0,获得没有限制的最优化问题,由于lambdai >= 0(第1个限制条件),做一个clipping,获得在限制条件下的lambdai最优解,然后也能求得lambdaj,就完成了一次lambdai和lambdaj的更新迭代。
一般取最违反KKT条件的lambdai和lambdaj来做更新。

svm软间隔

svm的核函数选择

一般选择高斯核函数,线性核函数是高斯核函数的一个特例;在特定的参数下,sigmoid核函数和高斯核函数具有类似的作用;相比于多项式核函数,高斯核函数的参数更少,更好调,当然,如果能把多项式核函数的参数调好,有可能会获得更好的效果。对于特征数量非常大的情况,会更倾向于使用线性核函数。

为什么要转化为对偶问题?

高斯核函数无限维的理解

‘伍’ svm算法是什么

SVM(Support Vector Machine)中文名为支持向量机,是常见的一种判别方法。

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。

数值求解特点:

SVM的求解可以使用二次凸优化问题的数值方法,例如内点法和序列最小优化算法,在拥有充足学习样本时也可使用随机梯度下降。

在二次凸优化问题中,SMO的每步迭代都严格地优化了SVM的对偶问题,且迭代会在有限步后收敛于全局极大值。SMO算法的迭代速度与所选取乘子对KKT条件的偏离程度有关,因此SMO通常采用启发式方法选取拉格朗日乘子。

在每次迭代时,SGD首先判定约束条件,若该样本不满足约束条件,则SGD按学习速率最小化结构风险;若该样本满足约束条件,为SVM的支持向量,则SGD根据正则化系数平衡经验风险和结构风险,即SGD的迭代保持了SVM的稀疏性。

‘陆’ svm算法是什么

支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。

SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。

SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一 。

SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。

动机

H1不能把类别分开。H2可以,但只有很小的间隔。H3以最大间隔将它们分开。

将数据进行分类是机器学习中的一项常见任务。 假设某些给定的数据点各自属于两个类之一,而目标是确定新数据点将在哪个类中。对于支持向量机来说,数据点被视为p维向量,而我们想知道是否可以用 (p-1)维超平面来分开这些点。

这就是所谓的线性分类器。可能有许多超平面可以把数据分类。最佳超平面的一个合理选择是以最大间隔把两个类分开的超平面。

因此,我们要选择能够让到每边最近的数据点的距离最大化的超平面。如果存在这样的超平面,则称为最大间隔超平面,而其定义的线性分类器被称为最大间隔分类器,或者叫做最佳稳定性感知器。

应用

1、用于文本和超文本的分类,在归纳和直推方法中都可以显着减少所需要的有类标的样本数。

2、用于图像分类。实验结果显示:在经过三到四轮相关反馈之后,比起传统的查询优化方案,支持向量机能够获取明显更高的搜索准确度。这同样也适用于图像分割系统,比如使用Vapnik所建议的使用特权方法的修改版本SVM的那些图像分割系统。

3、用于手写字体识别。

4、用于医学中分类蛋白质,超过90%的化合物能够被正确分类。基于支持向量机权重的置换测试已被建议作为一种机制,用于解释的支持向量机模型。

支持向量机权重也被用来解释过去的SVM模型。为识别模型用于进行预测的特征而对支持向量机模型做出事后解释是在生物科学中具有特殊意义的相对较新的研究领域。

以上内容参考网络-支持向量机

‘柒’ 支持向量机(SVM)常见问题

SVM是一种二分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。(间隔最大化是它的独特之处),通过该超平面实现对未知样本集的分类。

意义:原始样本空间中可能不存在这样可以将样本正确分为两类的超平面,但是我们知道如果原始空间的维数是有限的,也就是说属性数是有限的,则一定存在一个高维特征空间能够将样本划分。SVM通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身无法线性可分的数据分开。核函数的真正意义是做到了没有真正映射到高维空间却达到了映射的作用,即减少了大量的映射计算。

选择:

利用专家先验知识选定核函数,例如已经知道问题是线性可分的,就可以使用线性核,不必选用非线性核。

如果特征的数量大到和样本数量差不多,则选用线性核函数SVM或LR。

如果特征的数量小,样本的数量正常,则选用高斯核函数SVM。

如果特征的数量小,样本数量很多,由于求解最优化问题的时候,目标函数涉及两两样本计算内积,使用高斯核明显计算量会大于线性核,所以手动添加一些特征,使得线性可分,然后可以用LR或者线性核的SVM;

利用交叉验证,试用不同的核函数,误差最小的即为效果最好的核函数。

混合核函数方法,将不同的核函数结合起来。

当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机或神经网络等利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。

增、删非支持向量样本对模型没有影响;

支持向量样本集具有一定的鲁棒性;

有些成功的应用中,SVM 方法对核的选取不敏感

噪声数量太多

噪声以新的分布形式出现,与原先样本集的噪声分布表现的相当不同。此时噪声也有大概率落在最大分类间隔中间,从而成为支持向量,大大影响模型。

所以我们常说的鲁棒性其实是主要是体现在对Outlier(异常点、离群点)上。

这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,若存在缺失值它们在该特征维度很难正确的分类(例如SVM要度量距离(distance measurement),高斯核,那么缺失值处理不当就会导致效果很差),所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

SVM的空间消耗主要是在存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的内存和运算时间。如果数据量很大,SVM的训练时间就会比较长,所以SVM在大数据的使用中比较受限。

过拟合是什么就不再解释了。SVM其实是一个自带L2正则项的分类器。SVM防止过拟合的主要技巧就在于调整软间隔松弛变量的惩罚因子C。C越大表明越不能容忍错分,当无穷大时则退化为硬间隔分类器。合适的C大小可以照顾到整体数据而不是被一个Outlier给带偏整个判决平面。至于C大小的具体调参通常可以采用交叉验证来获得。每个松弛变量对应的惩罚因子可以不一样。

一般情况下,低偏差,高方差,即遇到过拟合时,减小C;高偏差,低方差,即遇到欠拟合时,增大C。

样本偏斜是指数据集中正负类样本数量不均,比如正类样本有10000个,负类样本只有100个,这就可能使得超平面被“推向”负类(因为负类数量少,分布得不够广),影响结果的准确性。

对于样本偏斜(样本不平衡)的情况,在各种机器学习方法中,我们有针对样本的通用处理办法:如上(下)采样,数据合成,加权等。

仅在SVM中,我们可以通过为正负类样本设置不同的惩罚因子来解决样本偏斜的问题。具体做法是为负类设置大一点的惩罚因子,因为负类本来就少,不能再分错了,然后正负类的惩罚因子遵循一定的比例,比如正负类数量比为100:1,则惩罚因子的比例直接就定为1:100,具体值要通过实验确定。

优点:

非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;

对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心;

支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量;

SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

小样本集上分类效果通常比较好。

少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:

①增、删非支持向量样本对模型没有影响;

②支持向量样本集具有一定的鲁棒性;

③有些成功的应用中,SVM 方法对核的选取不敏感

SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题。

缺点:

SVM算法对大规模训练样本难以实施。由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间(上面有讲)。

用SVM解决多分类问题存在困难。传统的SVM就是解决二分类问题的,上面有介绍不少解决多分类问题的SVM技巧,不过各种方法都一定程度上的缺陷。

对缺失值敏感,核函数的选择与调参比较复杂。

答:使用ROC曲线。Roc曲线下的面积,介于0.1和1之间。AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面。Auc作为数值可以直观的评价分类器的好坏,值越大越好,随机情况大概是0.5,所以一般不错的分类器AUC至少要大于0.5。

选择ROC和ROC下曲线面积是因为分类问题经常会碰到正负样本不均衡的问题,此时准确率和召回率不能有效评价分类器的性能,而ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。

答:大值特征会掩盖小值特征(内积计算)。高斯核会计算向量间的距离,也会产生同样的问题;多项式核会引起数值问题。影响求解的速度。数据规范化后,会丢失一些信息。预测的时候,也要进行规范化

答:1)训练速度:线性核只需要调节惩罚因子一个参数,所以速度快;多项式核参数多,难调;径向基核函数还需要调节γ,需要计算e的幂,所以训练速度变慢。【调参一般使用交叉验证,所以速度会慢】

2)训练结果:线性核的得到的权重w可以反映出特征的重要性,从而进行特征选择;多项式核的结果更加直观,解释性强;径向基核得到权重是无法解释的。

3)适应的数据:线性核:样本数量远小于特征数量(n<<m)【此时不需要映射到高维】,或者样本数量与特征数量都很大【此时主要考虑训练速度】;径向基核:样本数量远大于特征数量(n>>m)

答:如果σ选得很大的话,高次特征上的权重实际上衰减得非常快,使用泰勒展开就可以发现,当很大的时候,泰勒展开的高次项的系数会变小得很快,所以实际上相当于一个低维的子空间;

如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题,因为此时泰勒展开式中有效的项将变得非常多,甚至无穷多,那么就相当于映射到了一个无穷维的空间,任意数据都将变得线性可分。

相同

第一,LR和SVM都是分类算法。

第二,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。

第三,LR和SVM都是监督学习算法。

第四,LR和SVM都是判别模型。

第五,LR和SVM都有很好的数学理论支撑。

不同

第一,loss function不同。

第二,支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。

第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。​

第四,​线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。一个计算概率,一个计算距离!​

第五,SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!所谓结构风险最小化,意思就是在训练误差和模型复杂度之间寻求平衡,防止过拟合,从而达到真实误差的最小化。未达到结构风险最小化的目的,最常用的方法就是添加正则项,SVM的目标函数里居然自带正则项!!!再看一下上面提到过的SVM目标函数:

我们再来看看,所谓out lier,是怎么产生的,无非有两种情况,一种就是这个样本的标签y搞错了,一种就是没搞错,但这个样本是一个个例,不具备统计特性。

不论对于哪一种情况,svm会在f将这个out lier预测的比较正确时,就停止,不会一直优化对out lier的预测,因为没有什么太大意义了。而lr则不同,它会继续要求f对这个out lier的预测进行优化,并且永不停止,显然,这样的优化很可能会削弱f的泛化性能,因为没有必要死磕out lier 。

答案就是SVM!!!

‘捌’ 简述svm算法的原理

svm算法是在数据中找出最优间隔平面,如果数据线性不可分,那么可以使用核函数

‘玖’ 支持向量机(SVM)

        支持向量机(support vector machine),故一般简称SVM,通俗来讲,它是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器。其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。SVM在很多诸如文本分类,图像分类,生物序列分析和生物数据挖掘,手写字符识别等领域有很多的应用。

        支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。

        假设给定一些分属于两类的2维点,这些点可以通过直线分割, 我们要找到一条最优的分割线,如何来界定一个超平面是不是最优的呢?

        如图:

        在上面的图中,a和b都可以作为分类超平面,但最优超平面只有一个,最优分类平面使间隔最大化。 那是不是某条直线比其他的更加合适呢? 我们可以凭直觉来定义一条评价直线好坏的标准:

        距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线(图中的最优超平面),离所有点的距离最远。 由此, SVM算法的实质是找出一个能够将某个值最大化的超平面,这个值就是超平面离所有训练样本的最小距离。这个最小距离用SVM术语来说叫做间隔(margin) 。

        描述:给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):

        例如:现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。

        我们令分类函数为:

        当f(x) 等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点,如下图所示:

        一个点距离超平面的远近可以表示分类预测的确信或准确程度,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。

补充知识点: 点到平面的距离

        支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面.。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。

        间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

      按照我们前面的分析,对一个数据点进行分类, 当它的margin越大的时候,分类的confidence越大。 对于一个包含n个点的数据集,我们可以很自然地定义它的margin为所有这n个点的margin值中最小的那个。于是,为了使得分类的confidence高,我们希望所选择的超平面hyper plane能够最大化这个margin值。让所选择的超平面能够最大化这个“间隔”值,这个间隔就是下图中的Gap的一半:

为什么用几何间隔求最大的分离超平面而不用函数间隔?

例题:

我们构造了约束最优化问题,就是下面这个:

        此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (al variable) 的优化问题,即通过求解与原问题等价的对偶问题(al problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

补充知识点: 拉格朗日乘子法学习

                     拉格朗日KKT条件

                     KKT条件介绍

                     拉格朗日对偶

         通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier)α,定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):

 求解这个式子的过程需要拉格朗日对偶性的相关知识。

例题:

         接下来谈谈线性不可分的情况,因为 线性可分这种假设实在是太有局限性 了。下图就是一个典型的线性不可分的分类图,我们没有办法用一条直线去将其分成两个区域,每个区域只包含一种颜色的点。

         要想在这种情况下的分类器,有两种方式, 一种是用曲线 去将其完全分开,曲线就是一种 非线性 的情况,跟之后将谈到的 核函数 有一定的关系:

         另外一种还是用直线,不过不用去保证可分性 ,就是包容那些分错的情况,不过我们得加入惩罚函数,使得点分错的情况越合理越好。其实在很多时候,不是在训练的时候分类函数越完美越好,因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一个大忌。

我们可以为分错的点加上一点惩罚,对一个分错的点的 惩罚函数 就是 这个点到其正确位置的距离:

        对于线性不可分的情况,我们可以用核函数让空间从原本的线性空间变成一个更高维的空间 , 在这个高维的线性空间下,再用一个超平面进行划分 。 这儿举个例子,来理解一下如何利用空间的维度变得更高来帮助我们分类的:

        上图是一个线性不可分的图,当我们把这两个类似于椭圆形的点映射到一个高维空间后,映射函数为:

        用这个函数可以将上图的平面中的点映射到一个三维空间(z1,z2,z3),并且对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。

        形象说明:例如世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,比如说两本书,从(颜色,内容)两个维度来说,可能是一样的,我们可以加上作者这个维度,是在不行我们还可以加入页码,可以加入拥有者,可以加入购买地点,可以加入笔记内容等等。当维度增加到无限维的时候,一定可以让任意的两个物体可分了。

核函数定义:

核技巧在支持向量机中的应用:

常用核函数:

非线性支持向量机学习算法:

        支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有许多最优化算法可以用于这一一问题的求解。但是当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用。所以,如何高效地实现支持向量机学习就成为一一个重要的问题。目前人们已提出许多快速实现算法.本节讲述其中的序列最小最优化(sequential minimal optimization, SMO)算法。

        上述问题是要求解N个参数(α1,α2,α3,...,αN),其他参数均为已知,序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。

        整个SMO算法包括两部分,求解两个变量的 二次规划 问题和选择这两个变量的 启发式 方法。

 上面求得的(α1)new和(α2)new是在η>0的情况下求得的:

        当时为了推导公式我们直接默认它是大于0了,现在我们需要重新审视这一项(η)。这一项是原来关于的二次项的系数。我们可以分下面三种情况讨论:

(1)当η>0时 :这个二次函数开口向上,所以要求这个二次函数的最小值,如果说极值点不在计算出的可行域的范围内,就要根据这个极值点和可行域边界值的关系来得到取最小值的地方:

①如果这个极值点在可行域左边,那么我们可以得到这个可行域内二次函数一定在单增,所以此时L应该是那个取最小值的地方。就如大括号的第三种情况。

②如果这个极值点在可行域右边,那么此时可行域内一定单减,所以此时H就是那个取最小值的地方,就是大括号里的第一种情况。

(2)当η=0时: 这个二次函数就变成了一个一次函数,那么不管这个一次函数的单调性怎样,最小值一定是在边界处取到。所以到时候计算可行域的两个边界的值,看哪个小就用哪个。

(3)当η<0时: 这个二次函数开口向下,那么此时怎么得到取最小值的点呢?很容易就能想到:最小值也是在可行域的边界处取到。很容易理解,此时开口向下,当极值点在区间内时,最小值只能在端点处取,因为极值点处是最大的。而当极值点在区间外时,区间内一定是单调的,此时最小值也只能在端点处取。通过计算比较边界处的目标函数值,哪个小取哪个。

通过以上判断求出(α2)new以后,再根据公式求出(α1)new,然后带入目标函数(1)中。即如下过程:

        上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。

‘拾’ svm算法是什么

SVM算法中文翻译为支持向量机,它的英文全称是Support Vector Machine。

之所以叫作支持向量机,是因为该算法最终训练出来的模型,由一些支持向量决定。所谓的支持向量,也就是能够决定最终模型的向量。SVM算法最初是用来解决二分类问题的,而在这个基础上进行扩展,也能够处理多分类问题以及回归问题。

SVM算法的历史

早在1963 年,着名的前苏联统计学家弗拉基米尔·瓦普尼克在读博士期间,就和他的同事阿列克谢·切尔沃宁基斯共同提出了支持向量机的概念。

但由于当时的国际环境影响,他们用俄文发表的论文,并没有受到国际学术界的关注。直到 20 世纪 90 年代,瓦普尼克随着移民潮来到美国,而后又发表了SVM 理论。此后,SVM 算法才受到应有的重视。如今,SVM 算法被称为最好的监督学习算法之一。

阅读全文

与svm5的算法相关的资料

热点内容
人像摄影pdf 浏览:755
解压文件密码怎样重新设置手机 浏览:999
高考指南pdf 浏览:693
爬虫python数据存储 浏览:240
u盘怎么取消加密 浏览:429
567除以98的简便算法 浏览:340
pdf手机如何解压 浏览:15
python描述器 浏览:60
战地联盟3解压密码 浏览:805
s型命令 浏览:25
php年薪5年 浏览:71
如何上网上设个人加密账户 浏览:44
linux打开ssh服务 浏览:78
微信位置可以加密吗 浏览:470
算法蛮力法 浏览:438
随机排练命令 浏览:147
python多进程并发 浏览:41
安卓软件安装如何躲避安全检测 浏览:647
奇幻潮翡翠台源码百度云盘 浏览:187
什么软件可以免费pdf转word 浏览:15