支持向量积

支持向量积:

支持向量就是离分隔超平面最近的那些点。
机就是表示的一种算法,而不是表示机器

优点:泛化错误率低,计算开销不大,结果易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。
适用数据类型:数值型和标称型数据

支持向量积的理解:

如果两组数据之间已经分隔的足够开,因此很容易就能画出一条直线将两组数据点分开,在这种情况下,这组数据称为线性可分数据。

上述将数据集分开的直线称为分隔超平面(也就是分类的决策边界)
如果数据点离决策边界越远,那么最后的预测结果也就越可信

我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为-----------间隔

一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的纸,就是超平面。

决策面方程:
y=ax+b 将y轴变为x2将x轴变为x1

在这里插入图片描述w1代表a,w2代表-1。 γ代表b。
标量γ的作用也没有变,依然决定了直线的截距。此时,我们称w为直线的法向量

我们已经知道间隔的大小实际上就是支持向量对应的样本点到决策面的距离的二倍。那么图中的距离d我们怎么求?

在这里插入图片描述
我们目的是为了找出一个分类效果好的超平面作为分类器。分类器的好坏的评定依据是分类间隔W=2d的大小,即分类间隔W越大,我们认为这个超平面的分类效果越好。此时,求解超平面的问题就变成了求解分类间隔W最大化的为题。W的最大化也就是d最大化的

在这里插入图片描述
对于存在分类间隔的两类样本点,我们一定可以找到一些超平面面,使其对于所有的样本点均满足下面的条件

在这里插入图片描述
在这里插入图片描述
这是为了在进行最优化的过程中对目标函数求导时比较方便,但这绝对不影响最优化问题最后的求解

在这里插入图片描述
在学习求解最优化问题之前,我们还要学习两个东西:拉格朗日函数和KKT条件

使用拉格朗日方程的目的,它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题

我们在拉格朗日优化我们的问题这个道路上,需要进行下面二个步骤:
1 将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数
2 使用拉格朗日对偶性,将不易求解的优化问题转化为易求解的优化

在这里插入图片描述
我们看一下我们的新目标函数,先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数w和b的方程,而αi又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:

在这里插入图片描述
如果集合中任意2个元素连线上的点也在集合中,那么这个集合就是凸集
其几何意义表示为函数任意两点连线上的值大于对应自变量处的函数值

凸优化问题的定义是:求取最小值的目标函数为凸函数的一类优化问题。目标函数是凸函数我们已经知道,这个优化问题又是求最小值。所以我们的最优化问题就是凸优化问题。

对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子L(a, b, x)= f(x) + ag(x)+bh(x),KKT条件是说最优值必须满足以下条件:
1 L(a, b, x)对x求导为零;
2 h(x) =0;
3 a*g(x) = 0;

现在,凸优化问题和KKT都满足了.问题转换成了对偶问题。而求解这个对偶学习问题,可以分为三个步骤:
首先要让L(w,b,α)关于w和b最小化,
然后求对α的极大,
最后利用SMO算法求解对偶问题中的拉格朗日乘子

在这里插入图片描述

化简得到如下式子

在这里插入图片描述
从上面的式子,我们可以看出,此时的L(w,b,α)函数只含有一个变量,即αi

在这里插入图片描述
现在我们的优化问题变成了如上的形式。对于这个问题,我们有更高效的优化算法,即序列最小优化(SMO)算法。我们通过这个优化算法能得到α,再根据α,我们就可以求解出w和b,进而求得我们最初的目的:找到超平面,即”决策平面”

MO算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解的结果完全一致的。在结果完全相同的同时,SMO算法的求解时间短很多

SMO算法的目标是求出一系列alpha和b,一旦求出了这些alpha,就很容易计算出权重向量w并得到分隔超平面。

SMO算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到了一对合适的alpha,那么就增大其中一个同时减小另一个。这里所谓的”合适”就是指两个alpha必须符合以下两个条件,
条件之一就是两个alpha必须要在间隔边界之外,
而且第二个条件则是这两个alpha还没有进进行过区间化处理或者不在边界上。

在这里插入图片描述
实际上,对于上述目标函数,是存在一个假设的,即数据100%线性可分。但是,目前为止,我们知道几乎所有数据都不那么”干净”。这时我们就可以通过引入所谓的松弛变量(slack variable),来允许有些数据点可以处于超平面的错误的一侧。这样我们的优化目标就能保持仍然不变,但是此时我们的约束条件有所改变

松弛变量 C
在这里插入图片描述

也就是说,如果存在不能满足KKT条件的αi,那么需要更新这些αi,这是第一个约束条件。此外,更新的同时还要受到第二个约束条件的限制,即、

在这里插入图片描述

SMO的伪代码:
创建一个alpha向量并将其初始化为0向量
当迭代次数小于最大迭代次数时(外循环):
对数据集中的每个数据向量(内循环):
如果该数据向量可以被优化:
随机选择另外一个数据向量
同时优化这两个向量
如果两个向量都不能被优化,退出内循环
如果所有向量都没被优化,增加迭代数目,继续下一次循环

def loadDataSet(fileName):
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = line.strip().split('\t')
        dataMat.append([float(lineArr[0]), float(lineArr[1])])
        labelMat.append(float(lineArr[2]))
    return dataMat,labelMat
>>> import svmMLiA
>>> dataArr,labelArr=svmMLiA.loadDataSet('testSet.txt')
>>> labelArr
[-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0<
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级编程语言,拥有丰富的库和工具来支持各种机器学习任务,其中包括支持向量机(SVM)算法。SVM是一种非常有效的算法,可以应用于多光谱分类任务。 多光谱分类是一种通过分析物体在各个波段上的反射、发射或透射谱来对其进行分类的方法。每个波段的数据都可以视为特征向量,而每个样本(即物体)都有一个特定的类别。SVM可以通过建立一个最优的超平面来将不同类别的样本分开,从而实现多光谱数据的分类。 Python的支持向量机库scikit-learn提供了一系列函数和类来实现SVM算法。可以使用scikit-learn中的SVC类来构建一个支持向量机分类器,并通过传入多光谱数据和对应的标签来训练模型。可以使用该分类器对新的多光谱数据进行预测,并将其归类为特定的类别。 在进行多光谱分类任务时,首先需要准备好多光谱数据和对应的标签。然后使用Python中的scikit-learn库来构建SVM分类器,并进行模型的训练和预测。可以根据实际情况选择不同的参数和核函数来优化模型的性能。最后可以使用模型对新的多光谱数据进行分类,并根据预测结果进行后续的分析和决策。 总而言之,Python支持向量机库scikit-learn提供了丰富的功能来支持多光谱分类任务。通过构建SVM分类器和使用多光谱数据进行训练和预测,可以实现对多光谱数据的准确分类和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值