支持向量机算法

                 支持向量机


  支持向量机是一种二类分类模型。其基本模型为定义在特征空间上的间隔最大的线性分类器,间隔最大是它有别有感知机。支持向量机还包括核技巧,使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,形式的化为求解凸二次规划问题,也等价于正则化的和业务损失函数的最小化问题。

  支持向量机学习算法模型分类:

  (1)线性可分支持向量机。当训练集线性可分的时候,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机。又称为硬间隔支持向量机。

  (2)线性近似可分支持向量机。当训练集近似线性可分的时候,通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机。又称为软间隔支持向量机。

  (3)非线性支持向量机。当训练集线性不可分的时候,通过核技巧以及软间隔最大化,学习非线性支持向量机。

  

  在讲支持向量机之前,首先说一下感知机学习算法、线性回归、逻辑斯蒂回归。

  (1)感知机学习算法是基于错误点驱动的,通过最小化误分类点到分类超平面之间的距离 SUM [ yi(w.xi+b)].最终得到的分类超平面不止一个。

   (2)线性回归是通过最小二乘法来构造拟合函数:y = (w.xi+b)。线性回归是一个回归问题。X的各维线性叠加和与输出yi成线性关系。

  (3)逻辑斯蒂回归。X的线性叠加和与输出Yi不再成线性关系,而是符合逻辑斯蒂分布。学习策略是对数损失。各个样本服从伯努利分布,然后利用极大似然函数分布,表示出似然函数,然后对数表示。求解参数,利用梯度下降法。

 

(1)线性可分支持向量机 

  给定线性可分训练集,通过硬间隔最大化或者等价的求相应的凸二次规划问题学习得到的分离超平面。

  分离超平面为: w.x+b=0.

   推导过程:一般来说,一个样本点距离分离超平面的远近可以表示分类预测的准确程度。如果分类正确,那么yi(w.xi+b)>0。所以可以用yi(w.xi+b)表示分类的正确性与确信度。这就是函数间隔的概念。

  函数间隔

   样本点的函数间隔: Di= yi(w.xi+b)

   训练集的函数间隔:定义为最小的函数间隔。

            D= min Di=  min yi(w.xi+b)

  可以用函数间隔表示分类的正确性与确信度,但是选择分离超平面时,只有函数间隔是不够的。比如成比例的改变w和b,超平面没有变,但是函数间隔却变成了原来的2倍。于是引入了几何间隔。

  样本点的几何间隔为 Mi= yi(w.xi+b)/||W||.即对W做了一个限制。

  训练数据集的几何间隔:定义为最小的几何间隔。

                   M= min Mi = min yi(w.xi+b)/||W||

   支持向量机学习的基本想法是求解能够正确划分训练数据集并且集合间隔最大的分离超平面。对线性可分的训练集而言,线性可分的分离超平面有无数多条,但是几何间隔最大的分离超平面是唯一的。

  间隔最大化的直观解释就是:对训练数据集找到集合间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的的点)也有足够大的确信度将其分开。

  即离超平面最近的点是最难分的点,反映了整个分类学习器的性能

  最大间隔分离超平面:

     Max  M

     St:yi(w.xi+b)/||W||>=M   i=1,2,….N

  即我们希望最大化几何间隔M,约束条件表示每个样本点的集合间隔都至少是M。

  考虑到几何间隔和函数间隔的关系,这个问题可以改写成:

     Max D/||W||

    St  yi(w.xi+b)>=D  i=1,2,….N

   函数间隔D的取值并不会影响最优化问题的解,事实上,将w和b等比例的改变,对目标函数的优化没有任何影响。这样可以去D=1,那么目标函数变成了1/||W||。同时 1/||W||与1/2||W||^2是等价的。

  即此时目标函数变成(后面涉及公式,都是在word中弄好了,截图上来):

        

   这是一个凸二次规划问题。

   线性可分训练数据集的最大间隔分离超平面是存在且唯一的。

      

  上述原始问题是标准的QP问题,除了QP现成的解法之外,还可以应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。引入对偶问题的好处:

  (1)    对偶问题往往更容易求解

  (2)    自然引入核函数,进而推广到非线性分类问题。

 

  首先构建拉格朗日函数,将不等式约束加入到目标函数之中。


 

   这就是原始问题。

  根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题。

  通过对偶变换,我们将求解顺序做了一个变换。首先对w,b求导,并令其等于0,最后整理得到对偶问题为:

St  


        

  以上推导的是对偶问题,跟原始问题有啥关系呢?

  在最优化中,如果满足KKT条件,那么原始问题和对偶问题的最优值相等。

 

(2)线性近似可分支持向量机,即软间隔支持向量机

  训练集数据并不总是线性可分的,通常情况下,训练集数据有一些异常点,将这些异常点去掉之后,剩下的大部分样本组成的集合是线性可分的。

  线性不可分意味着某些样本点不满足函数间隔大于等于1的约束条件。为了解决这个问题,可以对每个样本点引入一个松弛变量。使得函数间隔加上松弛变量之后大于等于1.这样约束条件变成:

  同时每个松弛变量,都要支付一个代价,目标函数由原来的,变成了

   

 

  线性支持向量机的损失函数是合页损失。

  


(4)参数的求解

   支持向量机参数的求解是利用SMO(序列最小最优化算法)算法的,其基本思路就是:所有所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就找到了。其特点就是不断的将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量满足KKT条件。


(5)优缺点

  SVM有如下主要几个特点:

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

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

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

  (4)SVM 是一种有坚实理论基础的新颖的小样本学习方法。

它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。

从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题;

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

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

  这种“鲁棒”性主要体现在:

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

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

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

 

  两个不足:

  (1) SVM算法对大规模训练样本难以实施

  由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有J.Platt的SMO算法、

   (2) 用SVM解决多分类问题存在困难经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。

  主要有

  一对多组合模式、一对一组合模式和SVM决策树;

  再就是通过构造多个分类器的组合来解决。

  主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。


  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab支持向量机算法是一种非常强大的机器学习算法,适用于分类、回归和异常检测等任务。Matlab中的支持向量机算法实现了多种核函数,可以处理非线性问题。以下是Matlab支持向量机算法的主要步骤: 1. 数据准备:将数据集分为训练集和测试集,并对数据进行归一化处理。 2. 模型选择:选择支持向量机算法的类型和核函数类型,以及其他参数。 3. 模型训练:使用训练集训练支持向量机模型,得到模型的参数。 4. 模型测试:使用测试集测试模型的性能,并计算模型的准确率、精确率和召回率等指标。 5. 模型优化:根据测试结果调整模型参数,提高模型的性能。 Matlab支持向量机算法可以使用SVM函数实现,该函数提供了训练和测试支持向量机模型所需的所有功能。以下是Matlab中使用支持向量机算法实现分类的示例代码: % 准备数据 load fisheriris X = meas(:,3:4); Y = species; % 划分训练集和测试集 cv = cvpartition(Y,'Holdout',0.3); Xtrain = X(training(cv),:); Ytrain = Y(training(cv),:); Xtest = X(test(cv),:); Ytest = Y(test(cv),:); % 训练支持向量机模型 SVMmodel = fitcsvm(Xtrain,Ytrain,'KernelFunction','rbf','Standardize',true); % 测试模型 Ypred = predict(SVMmodel,Xtest); % 计算准确率 accuracy = sum(Ypred==Ytest)/numel(Ytest); 以上代码使用了径向基核函数(rbf)训练了一个支持向量机模型,并使用测试集计算了模型的准确率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值