机器学习——SVM多分类问题

这篇具有很好参考价值的文章主要介绍了机器学习——SVM多分类问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

线性SVM

1.什么是SVM?

线性二分类器的最优超平面

1、超平面

2、最优超平面

3、最优分类面

4、支持向量与支持向量机

非线性SVM 

 1、常见的核函数

2、SVM案例

3.举例分析

多分类SVM

1. 直接法

2. 间接法


 

线性SVM

1.什么是SVM?

svm多分类,机器学习,支持向量机,机器学习,算法

线性二分类器的最优超平面

1、超平面

根据百度百科的解释,超平面是n维欧式空间中余维度等于一的线性子空间,也就是必须是(n-1)维度。这是平面中的直线、空间中的平面之推广(n大于3才被称为“超平面”),是纯粹的数学概念,不是现实的物理概念。因为是子空间,所以超平面一定经过原点。

n 维空间中的超平面是由方程:svm多分类,机器学习,支持向量机,机器学习,算法

定义的子集,其中svm多分类,机器学习,支持向量机,机器学习,算法是不全为零的常数。

超平面是为了分割分类用的,超平面将空间划分为三部分,超平面本身,超平面上部,超平面下部。举例,对于二维空间来说,超平面为一维直线,这里定义超平面本身方程为wx+b=0,则超平面上部wx+b>0,超平面下部wx+b<0。代入x的值,计算得到的wx+b,根据与0的关系,即可知道当前的x属于哪一类。超平面参数其实是不唯一的,超平面的参数可以增大或者缩小任意正的尺度而不影响分类结果,实际上有无数个解。

2、最优超平面

假定训练数据可以被一个超平面分开,如果这个向量集合被超平面没有错误地分开,并且离超平面最近的向量与超平面之间的距离(称作间隔margin)是最大的,则我们说这个向量集合被这个最优超平面(或最大间隔超平面)分开。

svm多分类,机器学习,支持向量机,机器学习,算法

3、最优分类面

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

svm多分类,机器学习,支持向量机,机器学习,算法

 

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

svm多分类,机器学习,支持向量机,机器学习,算法

 

接下来的问题是,如何确定最优超平面呢?

从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。对一个数据点进行分类,当超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值。

不妨把离分类面最近的样本的决策函数值归一化为1,即强制:

svm多分类,机器学习,支持向量机,机器学习,算法 

svm多分类,机器学习,支持向量机,机器学习,算法

 

由平面之间的距离公式可得:

svm多分类,机器学习,支持向量机,机器学习,算法

 

所谓最优分类面,就是在线性可分情况下,要求分类线不但能将两类无错误地分开,而且要使两类的分类空隙最大,即:svm多分类,机器学习,支持向量机,机器学习,算法其中,s.t.,即subject to的意思,它导出的是约束条件。

4、支持向量与支持向量机

回顾下几何间隔的定义,可知:如果令函数间隔等于1(之所以令等于1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),则有 = 1 / ||w||且,从而上述目标函数转化成了svm多分类,机器学习,支持向量机,机器学习,算法

相当于在相应的约束条件下,最大化这个1/||w||值,而1/||w||便是几何间隔。   

如下图所示,中间的实线便是寻找到的最优超平面(Optimal Hyper Plane),其到两条虚线边界的距离相等,这个距离便是几何间隔,两条虚线间隔边界之间的距离等于2,而虚线间隔边界上的点则是支持向量。由于这些支持向量刚好在虚线间隔边界上,所以它们满足svm多分类,机器学习,支持向量机,机器学习,算法(这与我们前面说的强制化刚好吻合)。

 svm多分类,机器学习,支持向量机,机器学习,算法

简要介绍一些关键步骤,由于求的最大值相当于求的最小值,所以上述目标函数等价于(w由分母变成分子,从而也有原来的max问题变为min问题,很明显,两者问题等价):

svm多分类,机器学习,支持向量机,机器学习,算法 

 

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

拉格朗日对偶性,简单来讲,通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier),定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):svm多分类,机器学习,支持向量机,机器学习,算法

svm多分类,机器学习,支持向量机,机器学习,算法为拉格朗日乘子

分别对w和b求偏微分并令它们等于0,可得对偶问题。svm多分类,机器学习,支持向量机,机器学习,算法

 

求对的极大,即是关于对偶问题的最优化问题。经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w,b,只有。从上面的式子得到:

svm多分类,机器学习,支持向量机,机器学习,算法

 

(在这里还有一个需要思考的地方,即为什么要转化为对偶问题,前面说了两个优点,但是真的只有那两个吗,其实在数学层面还有一个,需要大家去思考,在这里我先提一下,有答案的可以评论)

对于一个数据点 x 进行分类,实际上是通过把 x 带入到算出结果然后根据其正负号来进行类别划分的。而前面的推导中我们得到:svm多分类,机器学习,支持向量机,机器学习,算法

 

即最优超平面的权值向量等于训练样本以一定的系数加权后的线性组合。可以得到分类函数为:svm多分类,机器学习,支持向量机,机器学习,算法

 

这里的形式的有趣之处在于,对于新点x的预测,只需要计算它与训练数据点的内积即可(表示向量内积),这一点至关重要,是之后使用 内核函数进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。大概说一下原因:

前面的公式根据KT条件,拉格朗日函数:svm多分类,机器学习,支持向量机,机器学习,算法

 

对应的鞍点(即最优解)满足:svm多分类,机器学习,支持向量机,机器学习,算法

 

可以推出时,必定有,必定有,它们对应的样本就是支持向量(Support Vectors or SVs)。该结论说明了支持向量决定了最优超平面,这种分类器被称为支持向量机(Support Vectors Machine),即SVM,说明远处的样本不影响分类面。svm多分类,机器学习,支持向量机,机器学习,算法

非线性SVM 

上面所讲的都是在线性情况下,如果是非线性呢?

 事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM咋处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数K ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。

 具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:svm多分类,机器学习,支持向量机,机器学习,算法

 

而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是这种类型的函数:svm多分类,机器学习,支持向量机,机器学习,算法

 

这里:svm多分类,机器学习,支持向量机,机器学习,算法是从输入空间到某个特征空间的映射,

这意味着建立非线性学习器分为两步:

1、首先使用一个非线性映射将数据变换到一个特征空间F

2、然后在特征空间使用线性学习器分类

而由于对偶形式就是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:svm多分类,机器学习,支持向量机,机器学习,算法

 

一开始的函数表明只是一个点,变换为映射以后,只要找到的结果,就可以实现非线性的分类,如果有一种方式可以在特征空间中直接计算内积,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,这样直接计算法的方法称为核函数方法:svm多分类,机器学习,支持向量机,机器学习,算法

 

这样我们可以在实际情况中直接使用K,而不用精确需要知道,因为从低维到高维的选择太多。而且高维空间很难理解。来看个核函数的例子。如下图所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时咱们该如何把这两类数据分开呢?svm多分类,机器学习,支持向量机,机器学习,算法

 

事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的,所以,一个理想的分界应该是一个“圆圈”而不是一条线(超平面)。如果用和来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:svm多分类,机器学习,支持向量机,机器学习,算法

 

注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为svm多分类,机器学习,支持向量机,机器学习,算法那么显然,上面的方程在新的坐标系下可以写做 

 svm多分类,机器学习,支持向量机,机器学习,算法

关于新的坐标,这正是一个 hyper plane 的方程!也就是说,如果我们做一个映射,将按照上面的规则映射为,那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。再进一步描述 Kernel 的细节之前,不妨再来看看上述例子在映射过后的直观形态。当然,你我可能无法把 5 维空间画出来,不过由于我这里生成数据的时候用了特殊的情形,所以这里的超平面实际的方程是这个样子的(圆心在轴上的一个正圆):svm多分类,机器学习,支持向量机,机器学习,算法

 

因此我只需要把它映射到这样一个三维空间中即可,下图即是映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的:

核函数相当于把原来的分类函数:svm多分类,机器学习,支持向量机,机器学习,算法

映射成:svm多分类,机器学习,支持向量机,机器学习,算法

而其中的可以通过求解如下 dual 问题而得到的:svm多分类,机器学习,支持向量机,机器学习,算法

 

这样一来问题就解决了吗?似乎是的:拿到非线性数据,就找一个映射,然后一股脑把原来的数据映射到新空间中,再做线性 SVM 即可。不过事实上好像并没有这么简单。在前面我们是利用,这样一个变换,把低维空间映射到高维空间,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维(一阶、二阶和三阶的组合),那么我们会得到:3(一次)+3(二次交叉)+3(平方)+3(立方)+1(x1*x2*x3)+2*3= 19维的新空间,这个数目是呈指数级爆炸性增长的,从而势必给计算带来非常大的困难,而且如果遇到无穷维的情况,就根本无从计算了。

此时我们才引入核函数,即可以实现从低维到高维的映射,又不导致最后结果的指数级增长。

举个例子:svm多分类,机器学习,支持向量机,机器学习,算法

 

当然还可以选择多种不同的映射。我们发现其实不需要映射到高维空间,再根据内积的公式进行计算,而可以字节在低维空间中进行计算,而不需要写出映射后的结果,即可以省去求映射函数的过程。 我们把这里的计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数 (Kernel Function) ,例如,在刚才的例子中,我们的核函数为:svm多分类,机器学习,支持向量机,机器学习,算法,核函数可以简化映射空间中的内积运算,正好我们SVM的分类函数中需要计算的样本都是以内积的形式出现的,所以利用核函数可以解决我们的非线性分类问题,还可以避免繁琐的计算。

 1、常见的核函数

常见的核函数如下:svm多分类,机器学习,支持向量机,机器学习,算法

 svm多分类,机器学习,支持向量机,机器学习,算法

但是我们并不是任何时候都可以使用核函数的,必须满足一定的条件才行,这里引出一个定理:svm多分类,机器学习,支持向量机,机器学习,算法

 

核函数的本质其实是对样本进行包装,使样本在某个高维空间中可分,而却不知道高维空间是什么。

2、SVM案例

svm多分类,机器学习,支持向量机,机器学习,算法

 

SVM的思想是要求分类线不但能将两类无错误地分开,并且要使两类的分类空隙最大,由于在很多实际分类问题中,由于高推广能力,SVM表现的都很好,比如文本分类,基因数据分类。

核函数的选择对结果有很大的影响,但是核函数如何选择并没有统一的方法,需要靠自己的工程实践经验。

3.举例分析

举例分析:

svm多分类,机器学习,支持向量机,机器学习,算法

svm多分类,机器学习,支持向量机,机器学习,算法

多分类SVM

SVM本身是一个二值分类器。SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:直接法 和 间接法。

1. 直接法


直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中。

2. 间接法


主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有 one-against-one 和 one-against-all 两种。

一对多法(one-versus-rest 简称OVR SVMs)
训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

例如:假如我有四类要划分(也就是4个label),他们是A、B、C、D。

于是我在抽取训练集的时候,分别抽取

(1)A所对应的向量作为正集,B,C,D所对应的向量作为负集;

(2)B所对应的向量作为正集,A,C,D所对应的向量作为负集;

(3)C所对应的向量作为正集,A,B,D所对应的向量作为负集;

(4)D所对应的向量作为正集,A,B,C所对应的向量作为负集;

使用这四个训练集分别进行训练,然后的得到四个训练结果文件。

在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试。最后每个测试都有一个结果 f 1 ( x ) , f 2 ( x ) , f 3 ( x ) , f 4 ( x ) f1(x),f2(x),f3(x),f4(x)f1(x),f2(x),f3(x),f4(x) 于是最终的结果便是这四个值中最大的一个作为分类结果。

评价:这种方法有种缺陷,训练数据集不平衡,因而不是很实用。可以在抽取数据集的时候,从完整的负集中再抽取三分之一作为训练负集。

目前SVM进行多分类主要是两种类型:OVR&OVO

假如现在又A B C这三个类别,然后我们需要进行多分类,然后针对不同的类别我们需要详细阐述

OVR

将A分类正样本,BC那个类分为负样本
将B分类正样本,AC那个类分为负样本
将C分类正样本,AB那个分类为负样本
先右测试数据D,分别丢到3个分类器中,然后看那个分类器的得分高,那么就把数据判别为哪个类别
OVO

将AB分为一组正负样本
将AC分为一组正负样本
将BC分为一组正负样本
现有测试数据D,分别丢到3个分类器中,统计哪个类别出现的次数最多,那就把数据判别为哪个类别
一般情况,使用OVR还是比较多的,默认也就是OVR。如果有n个类别,那么使用OVO训练的分类器就是,因此一般情况下使用OVR这种分类。

SVM都已经有写好的库函数,我们只需要进行调用就行了,这个SVM库集中在sklearn中,我们可以从sklearn导入.

如果我们进行二分类那就使用svm.LinearSVC(),当然SVM中还有SVR(支持向量回归)

大概说一下几个比较重要的参数,或者是在训练中我们需要注意是超参数。

  • C越大说明分类的越准确,但是有可能出现过拟合;C越小,噪声点越多,泛化能力越强容易欠拟合
  • decision_function_shape='ovr',如果进行多分类是需要声明的,不声明默认就是ovr
  • degree 多项式的维度
  • gamma 就是高斯函数中的
  • kernel 就是核函数默认是rbf也就是高斯函数
  • max_iter 最大的迭代次数
  • propobaility是否采用概率估计,默认是否
  • tol 误差控制在0.001的时候就停止训练,max_iter默认是-1,就用tol来控制什么时候停止训练
  • verbose允许冗余输出

C和gamma都是典型的超参,我们可以通过列举组合法最终判定模型最优的时候超参的设置
 文章来源地址https://www.toymoban.com/news/detail-770400.html

到了这里,关于机器学习——SVM多分类问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [学习笔记] [机器学习] 10. 支持向量机 SVM(SVM 算法原理、SVM API介绍、SVM 损失函数、SVM 回归、手写数字识别)

    视频链接 数据集下载地址:无需下载 学习目标: 了解什么是 SVM 算法 掌握 SVM 算法的原理 知道 SVM 算法的损失函数 知道 SVM 算法的核函数 了解 SVM 算法在回归问题中的使用 应用 SVM 算法实现手写数字识别器 学习目标: 了解 SVM 算法的定义 知道软间隔和硬间隔 在很久以前的

    2024年02月09日
    浏览(72)
  • 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析。 其具有以下特征: (1)SVM可以表示为凸优化问题,因此可以利用已知的

    2024年02月04日
    浏览(31)
  • python机器学习决策树和SVM向量机算法实现红酒分类

    经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量(克/升) ash:灰分含量(克/升) alcalinity_of_ash:灰分碱度(以mEq/L为单位)

    2024年02月08日
    浏览(29)
  • 机器学习与深度学习——通过SVM线性支持向量机分类鸢尾花数据集iris求出错误率并可视化

    先来看一下什么叫数据近似线性可分,如下图所示,蓝色圆点和红色圆点分别代表正类和负类,显然我们不能找到一个线性的分离超平面将这两类完全正确的分开;但是如果将数据中的某些特异点(黑色箭头指向的点)去除之后,剩下的大部分样本点组成的集合是线性可分的,

    2023年04月18日
    浏览(37)
  • 机器学习——支持向量机SVM

    支持向量机(SVM)是一种二类分类模型,其基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大,间隔最大使它有别于感知机,支持向量机也可通过核技巧使它成为非线性分类器。支持向量机的学习策略是间隔最大化,可将其转化为一个求解凸二次

    2024年01月17日
    浏览(34)
  • SVM(支持向量机)-机器学习

    支持向量机(Support Vector Machine,SVM) 是一种用于分类和回归分析的监督学习算法 。它属于机器学习中的一类强大而灵活的模型,广泛应用于模式识别、图像分类、自然语言处理等领域。 基本原理: SVM的基本原理是通过找到能够有效分隔不同类别的超平面来进行分类。在二维

    2024年02月03日
    浏览(31)
  • 机器学习-支持向量机SVM

    在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 我们将从一些简单的2D数据集开始使用SVM来查看它们的工作原理。 然后,我们将对一组原始电子邮件进行一些预处理工作,并使用SVM在处理的电子邮件上构建分类器,以确定它们是否为垃圾邮件。 我们要做

    2024年02月12日
    浏览(32)
  • 机器学习(六)支持向量机(SVM)

    目录 1.间隔与支持向量 1.1线性可分 1.2支持向量 1.3 最大间隔超平面 2.对偶问题 2.1拉格朗日乘子法 2.2 SMO算法 2.3SMO算法代码实现 3.核函数 4. SVM实例(手写体数字识别) 5.实验总结 支持向量机(SVM) 是有监督学习中最有影响力的机器学习算法之一,一般用于解决二分类问题(

    2024年02月09日
    浏览(28)
  • 【机器学习】SVM支持向量机模型

     本站原创文章,转载请说明来自 《老饼讲解-机器学习》 ml.bbbdata.com 目录 一. SVM的目标和思想    1.1 SVM硬间隔模型的原始目的 1.2 SVM的直接目标 1.3 什么是支持向量  二. SVM的支持平面的表示方式 2.1 支持面表示方式的初步思路 2.2 初步思路的缺陷与改进 2.3 支持面的最终表示

    2023年04月23日
    浏览(51)
  • 【机器学习】支持向量机SVM入门

    相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法 首先我们回顾逻辑回归中的经典假设函数,如下图: 对于任意一个实例 (

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包