深度学习第四次培训(SVM算法)

发布于:2022-12-27 ⋅ 阅读:(250) ⋅ 点赞:(0)

SVM算法

SVM需要超平面wx+b来分割数据集(此处以线性可分为例),因此会有一个模型训练过程来找到w和b的值。训练完成之后就可以拿去预测了,根据函数y=wx+b的值来确定样本点x的label,不需要再考虑训练集。对于SVM,是先在训练集上训练一个模型,然后用这个模型直接对测试集进行分类。

SVM算法和KNN算法对比分析

1.KNN分类问题,离哪些点近就归为哪一类,而SVM分类问题则是找决策边界后再把数据进行分开

2.KNN对每个样本都要考虑,而SVM是要去找一个函数把达到样本可分

3.KNN不能处理样本维度太高的东西,SVM处理高纬度数据比较优秀

4.KNN没有训练过程,但是预测过程需要挨个计算每个训练样本和测试样本的距离,当训练集和测试集很大时,预测效率低。SVM有一个训练过程,训练完直接得到超平面函数,根据超平面函数直接判定预测点的label,预测效率很高

SVM算法原理及实现步骤

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示, w⋅x+b=0 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

1.寻找最大间隔

既然这样的直线是存在的,那么我们怎样寻找出这样的直线呢?与二维空间类似,超平面的方程也可以写成一下形式:

 有了超平面的表达式之后之后,我们就可以计算样本点到平面的距离了。假设为样本的中的一个点,其中表示为第个特征变量。那么该点到超平面的距离就可以用如下公式进行计算:

 

其中||W||为超平面的范数,常数b类似于直线方程中的截距。 这是一个有约束条件的优化问题,通常我们可以用拉格朗日乘子法来求解。

求L关于求偏导数得: 

 

2.松弛变量

由于实际中很多样本数据都不能够用一个超平面把数据完全分开。如果数据集中存在噪点的话,那么在求超平的时候就会出现很大问题。从图三中课看出其中一个蓝点偏差太大,如果把它作为支持向量的话所求出来的margin就会比不算入它时要小得多。更糟糕的情况是如果这个蓝点落在了红点之间那么就找不出超平面了。

式中ξi的含义为允许第i个数据点允许偏离的间隔。如果让ξ任意大的话,那么任意的超平面都是符合条件的了。所以在原有目标的基础之上,我们也尽可能的让ξ的总量也尽可能地小。所以新的目标函数变为:

 

 

新的拉格朗日函数变为:

 

代入原式化简之后得到和原来一样的目标函数:

 

经过添加松弛变量的方法,我们现在能够解决数据更加混乱的问题。通过修改参数C,我们可以得到不同的结果而C的大小到底取多少比较合适,需要根据实际问题进行调节。 

3.核函数

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

事实上,对于低维平面内不可分的数据,放在一个高维空间中去就有可能变得可分。以二维平面的数据为例,我们可以通过找到一个映射将二维平面的点放到三维平面之中。理论上任意的数据样本都能够找到一个合适的映射使得这些在低维空间不能划分的样本到高维空间中之后能够线性可分。我们再来看一下之前的目标函数:

定义一个映射使得将所有映射到更高维空间之后等价于求解上述问题的对偶问题:

 

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

常用核函数表:

SVM算法优缺点 

SVM算法优点:

1.解决了小样本情况下的机器学习

SVM算法缺点:

1支持向量机算法对大规模训练样本难以实施,这是因为支持向量算法借助二次规划求解支持向量,这其中会设计m阶矩阵的计算,所以矩阵阶数很大时将耗费大量的机器内存和运算时间。

代码实现

 


网站公告

今日签到

点亮在社区的每一天
去签到