SVM支持向量机白话入门
- 格式:doc
- 大小:66.00 KB
- 文档页数:24
支持向量机(SVM )原理及应用一、SVM 的产生与发展自1995年Vapnik(瓦普尼克)在统计学习理论的基础上提出SVM 作为模式识别的新方法之后,SVM 一直倍受关注。
同年,Vapnik 和Cortes 提出软间隔(soft margin)SVM ,通过引进松弛变量i ξ度量数据i x 的误分类(分类出现错误时i ξ大于0),同时在目标函数中增加一个分量用来惩罚非零松弛变量(即代价函数),SVM 的寻优过程即是大的分隔间距和小的误差补偿之间的平衡过程;1996年,Vapnik 等人又提出支持向量回归 (Support Vector Regression ,SVR)的方法用于解决拟合问题。
SVR 同SVM 的出发点都是寻找最优超平面(注:一维空间为点;二维空间为线;三维空间为面;高维空间为超平面。
),但SVR 的目的不是找到两种数据的分割平面,而是找到能准确预测数据分布的平面,两者最终都转换为最优化问题的求解;1998年,Weston 等人根据SVM 原理提出了用于解决多类分类的SVM 方法(Multi-Class Support Vector Machines ,Multi-SVM),通过将多类分类转化成二类分类,将SVM 应用于多分类问题的判断:此外,在SVM 算法的基本框架下,研究者针对不同的方面提出了很多相关的改进算法。
例如,Suykens 提出的最小二乘支持向量机 (Least Square Support Vector Machine ,LS —SVM)算法,Joachims 等人提出的SVM-1ight ,张学工提出的中心支持向量机 (Central Support Vector Machine ,CSVM),Scholkoph 和Smola 基于二次规划提出的v-SVM 等。
此后,台湾大学林智仁(Lin Chih-Jen)教授等对SVM 的典型应用进行总结,并设计开发出较为完善的SVM 工具包,也就是LIBSVM(A Library for Support Vector Machines)。
支持向量机的基本原理
支持向量机(Support Vector Machine, SVM)是一种二分类模型,其基本原理是找到一个最优的超平面来进行数据的划分。
其基本思想是将样本空间映射到高维特征空间,找到一个超平面使得正负样本之间的间隔最大化,从而实现分类。
具体来说,SVM的基本原理包括以下几个步骤:
1. 寻找最优超平面:将样本空间映射到高维特征空间,使得样本在特征空间中线性可分。
然后寻找一个超平面来最大化两个不同类别样本的间隔(也称为“分类间隔”)。
2. 构建优化问题:SVM通过解决一个凸二次规划问题来求解最优超平面。
该优化问题的目标是最大化分类间隔,同时限制样本的分类正确性。
3. 核函数技巧:在实际应用中,数据通常是非线性可分的。
通过引入核函数的技巧,可以将非线性问题转化为高维或无限维的线性问题。
常用的核函数有线性核、多项式核、高斯核等。
4. 寻找支持向量:在求解优化问题时,只有一部分样本点对于最优超平面的确定起到决定性作用,这些样本点被称为“支持向量”。
支持向量决定了超平面的位置。
5. 分类决策函数:在得到最优超平面后,可以通过计算样本点到超平面的距离来进行分类。
对于新的样本点,根据其距离超平面的远近来判断其所属类别。
支持向量机的基本原理可以简单概括为在高维特征空间中找到一个最优超平面,使得样本的分类间隔最大化。
通过引入核函数的技巧,SVM也可以处理非线性可分的问题。
支持向量机具有理论基础牢固、分类效果好等优点,在实际应用中得到了广泛的应用。
svm支持向量机原理支持向量机(Support Vector Machine,简称SVM)是一种二分类模型,基本思想是寻找一个最优的超平面来将不同类别的数据分开。
SVM 可以用于分类、回归和异常检测等领域。
SVM 的核心思想是将数据映射到高维空间,使得样本在该空间中线性可分。
我们可以将数据集看做在一个n维空间中的点,其中n是特征数。
在这个空间中,我们希望找到一个超平面,它能够将不同类别的数据分开。
当然,可能存在很多条可以分离不同类别的超平面,而SVM算法的目标是找到能够最大化两条平面(即类别之间的间隔)距离的那条。
SVM的一个关键点是支持向量。
在图上,我们可以看到,支持向量就是离超平面最近的那些点。
如果这些点被移动或删除,超平面的位置可能会改变。
SVM最常用的内核函数是高斯核函数(Radial Basis Function,RBF),它将数据点映射到一些非线性的空间,增加了分类的准确性。
SVM算法的优点在于它们能够处理高维数据,而且不受维度灾难的限制。
此外,它们可以通过在核函数中使用不同的参数来适应不同的数据类型。
这种灵活性意味着即使在处理不同类型的数据时,SVM算法的表现也很出色。
SVM算法的缺点在于,当数据集非常大时,它们很难优化,需要很长时间来训练模型;另外,SVM算法的结果不够直观和易理解,而且对于离群点的处理也不是非常理想。
综上所述,SVM 是一种广泛应用的机器学习算法,它的优点包括精确性、适应性和高度灵活性。
当然,它的性能取决于应用场景和正确定义其参数的能力。
支持向量机原理支持向量机(Support Vector Machine,SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。
支持向量机的学习策略是间隔最大化,可形式化为一个求解凸二次规划问题。
SVM是一种分类算法,它的基本原理是找到一个超平面,将不同类别的数据分隔开来,使得两个类别的数据点到超平面的距离最大化。
支持向量机的原理主要包括间隔、支持向量、对偶问题和核函数等几个方面。
首先,我们来看支持向量机的间隔。
在支持向量机中,间隔是指两个异类样本最近的距离,而支持向量机的目标就是要找到一个超平面,使得所有样本点到这个超平面的距离最大化。
这个距离就是间隔,而支持向量机的学习策略就是要最大化这个间隔。
其次,支持向量机的支持向量。
支持向量是指离超平面最近的那些点,它们对超平面的位置有影响。
支持向量决定了最终的超平面的位置,而其他的点对超平面的位置没有影响。
因此,支持向量是支持向量机模型的关键。
然后,我们来看支持向量机的对偶问题。
支持向量机的原始问题是一个凸二次规划问题,可以通过求解对偶问题来得到最终的分类超平面。
通过对偶问题,我们可以得到支持向量的系数,从而得到最终的分类超平面。
最后,我们来看支持向量机的核函数。
在实际应用中,很多时候样本不是线性可分的,这时就需要用到核函数。
核函数可以将原始特征空间映射到一个更高维的特征空间,使得样本在这个高维特征空间中线性可分。
常用的核函数有线性核、多项式核和高斯核等。
综上所述,支持向量机是一种非常强大的分类算法,它通过最大化间隔来得到最优的分类超平面,支持向量决定了最终的超平面的位置,对偶问题可以通过求解对偶问题来得到最终的分类超平面,而核函数可以处理非线性可分的情况。
支持向量机在实际应用中有着广泛的应用,是一种非常重要的机器学习算法。
希望本文对支持向量机的原理有所帮助,让读者对支持向量机有更深入的理解。
支持向量机作为一种经典的机器学习算法,有着重要的理论意义和实际应用价值。
SVM⽀持向量机原理(⼀)SVM的简介⽀持向量机(Support Vector Machine)是Cortes和Vapnik于1995年⾸先提出的,它在解决⼩样本、⾮线性及⾼维模式识别中表现出许多特有的优势,并能够推⼴应⽤到函数拟合等其他机器学习问题中[10]。
⽀持向量机⽅法是建⽴在统计学习理论的VC 维理论和结构风险最⼩原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能⼒(即⽆错误地识别任意样本的能⼒)之间寻求最佳折衷,以期获得最好的推⼴能⼒[14](或称泛化能⼒)。
以上是经常被有关SVM 的学术⽂献引⽤的介绍,我来逐⼀分解并解释⼀下。
Vapnik是统计机器学习的⼤⽜,这想必都不⽤说,他出版的《Statistical Learning Theory》是⼀本完整阐述统计机器学习思想的名著。
在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等⼀系列问题。
与统计机器学习的精密思维相⽐,传统的机器学习基本上属于摸着⽯头过河,⽤传统的机器学习⽅法构造分类系统完全成了⼀种技巧,⼀个⼈做的结果可能很好,另⼀个⼈差不多的⽅法做出来却很差,缺乏指导和原则。
所谓VC维是对函数类的⼀种度量,可以简单的理解为问题的复杂程度,VC维越⾼,⼀个问题就越复杂。
正是因为SVM关注的是VC维,后⾯我们可以看到,SVM解决问题的时候,和样本的维数是⽆关的(甚⾄样本是上万维的都可以,这使得SVM很适合⽤来解决⽂本分类的问题,当然,有这样的能⼒也因为引⼊了核函数)。
结构风险最⼩听上去⽂绉绉,其实说的也⽆⾮是下⾯这回事。
机器学习本质上就是⼀种对问题真实模型的逼近(我们选择⼀个我们认为⽐较好的近似模型,这个近似模型就叫做⼀个假设),但毫⽆疑问,真实模型⼀定是不知道的(如果知道了,我们⼲吗还要机器学习?直接⽤真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多⼤差距,我们就没法得知。
简述支持向量机的基本原理和相关参数支持向量机(Support Vector Machines,简称SVM)是一种监督学习算法,在许多应用中被广泛使用,例如分类、回归和异常检测等领域。
其基本原理是将输入数据映射到高维空间中,定义一个超平面进行分类或回归等任务。
SVM的基本原理包括以下三个方面:1.最大化间隔:在分类问题中,SVM的目标是能够找到一个分界线(或超平面),它能够将不同类别的数据分开,并且在这两个类别之间的最大间隔内没有任何数据点。
这个间隔称为间隔(margin),目标是最大化这个间隔。
2.核函数:如果我们不能够实际地通过映射将数据集映射到高维空间中,或者在高维空间中模型过于复杂,那么就需要使用核函数。
核函数能够将低维输入数据映射到高维空间中,再使用SVM来分隔数据。
3.对偶问题:SVM的对偶问题的解决方案比直接解决原问题更方便。
对偶问题的解决方案仅涉及到数据点之间的内积,而不涉及原始数据。
仅使用内积可以简化计算,避免计算映射数据,从而降低复杂性。
SVM相关参数主要包括:1. C:C是一个正则化参数,控制模型的复杂度和对错误分类的容忍程度。
当C较小时,SVM尝试最大化间隔,甚至将不正确的分类点排除在外。
当C较大时,忽略一些错误分类点以更好地拟合数据。
2. 核函数参数:SVM支持不同类型的核函数,例如线性核、多项式核和径向基核等,每个核函数都有其自身的参数。
对于径向基函数核,有一个参数gamma,控制分类较复杂的曲线,如果gamma很小,该函数的分类结果会更平滑。
3. 容忍度:容忍度参数(tolerance)是一个非常小的数值,用于检测算法收敛时分类结果的变化是否值得继续优化。
如果分类结果的变化小于容忍度,则算法解决方案足够接近理想解决方案,并且不需要继续检查是否存在更好的解决方案。
支持向量机的概念
支持向量机(Support Vector Machine,SVM)是一种常用的
机器学习算法,用于分类和回归问题。
它的核心思想是将样本映射到高维空间中,并在该空间中找到一个最优的超平面,以将不同类别的样本最大程度地分开。
具体来说,SVM在高维空间中寻找一个超平面,使得该超平
面与离它最近的各类样本的距离最大。
这些离超平面最近的样本点被称为支持向量,因为它们对于确定超平面起到了关键的作用。
通过这种方式,SVM能够有效地处理高维数据,并在
复杂的数据集中实现较好的分类效果。
SVM的基本原理可以理解为将原始的样本数据点映射到一个
高维特征空间,并通过最大化样本点与超平面之间的间隔来找到最优的超平面。
间隔表示了样本点与决策边界的距离,支持向量机的目标是找到使间隔最大化的超平面。
SVM的优点包括可以处理高维数据、对于样本点的位置不敏感、具有较好的泛化性能等。
它在分类问题上的应用非常广泛,并且在文本分类、图像识别、生物信息学等领域取得了很好的效果。
然而,SVM也存在一些缺点,例如对大规模数据集的
处理效率较低、需要选择合适的核函数等。
支持向量机的概念可以通过上述的描述理解,它是一种用于分类和回归问题的机器学习算法,通过在高维空间中寻找最优的超平面来实现分类任务。
支持向量机支持向量机回归原理简述及其MATLAB实例支持向量机 (Support Vector Machine, SVM) 是一种在监督学习中应用广泛的机器学习算法。
它既可以用于分类问题(SVM),又可以用于回归问题(SVR)。
本文将分别简要介绍 SVM 和 SVR 的原理,并提供MATLAB 实例来展示其应用。
SVM的核心思想是找到一个最优的超平面,使得正样本和负样本之间的间隔最大化,同时保证误分类的样本最少。
这个最优化问题可以转化为一个凸二次规划问题进行求解。
具体的求解方法是通过拉格朗日乘子法,将约束优化问题转化为一个拉格朗日函数的无约束极小化问题,并使用庞加莱对偶性将原问题转化为对偶问题,最终求解出法向量和偏差项。
SVR的目标是找到一个回归函数f(x),使得预测值f(x)和实际值y之间的损失函数最小化。
常用的损失函数包括平方损失函数、绝对损失函数等。
与SVM类似,SVR也可以使用核函数将问题转化为非线性回归问题。
MATLAB实例:下面以一个简单的数据集为例,展示如何使用MATLAB实现SVM和SVR。
1.SVM实例:假设我们有一个二分类问题,数据集包含两个特征和两类样本。
首先加载数据集,划分数据集为训练集和测试集。
```matlabload fisheririsX = meas(51:end, 1:2);Y=(1:100)';Y(1:50)=-1;Y(51:100)=1;randn('seed', 1);I = randperm(100);X=X(I,:);Y=Y(I);X_train = X(1:80, :);Y_train = Y(1:80, :);X_test = X(81:end, :);Y_test = Y(81:end, :);```然后,使用 fitcsvm 函数来训练 SVM 模型,并用 predict 函数来进行预测。
```matlabSVMModel = fitcsvm(X_train, Y_train);Y_predict = predict(SVMModel, X_test);```最后,可以计算分类准确度来评估模型的性能。
第1 2章12.1 案例背景12.1.1 SVM概述支持向量机(Support Vector Machine,SVM)由Vapnik首先提出,像多层感知器网络和径向基函数网络一样,支持向量机可用于模式分类和非线性回归。
支持向量机的主要思想是建立一个分类超平面作为决策曲面,使得正例和反例之间的隔离边缘被最大化;支持向量机的理论基础是统计学习理论,更精确地说,支持向量机是结构风险最小化的近似实现。
这个原理基于这样的事实:学习机器在测试数据上的误差率(即泛化误差率)以训练误差率和一个依赖于VC维数(Vapnik - Chervonenkis dimension)的项的和为界,在可分模式情况下,支持向量机对于前一项的值为零,并且使第二项最小化。
因此,尽管它不利用问题的领域内部问题,但在模式分类问题上支持向量机能提供好的泛化性能,这个属性是支持向量机特有的。
支持向量机具有以下的优点:①通用性:能够在很广的各种函数集中构造函数;②鲁棒性:不需要微调;③有效性:在解决实际问题中总是属于最好的方法之一;④计算简单:方法的实现只需要利用简单的优化技术;⑤理论上完善:基于VC推广性理论的框架。
在“支持向量”x(i)和输入空间抽取的向量x之间的内积核这一概念是构造支持向量机学习算法的关键。
支持向量机是由算法从训练数据中抽取的小的子集构成。
支持向量机的体系结构如图12 -1所示。
图12-1 支持向量机的体系结构其中K为核函数,其种类主要有:线性核函数:K(x,x i)=x T x i;多项式核函数:K(x,x i)=(γx T x i+r)p,γ>0;径向基核函数:K(x,x i )=exp(-γ∥x −x i ∥2), γ>0;两层感知器核函数:K(x,x i )=tanh(γx T x i+r )。
1.二分类支持向量机C - SVC 模型是比较常见的二分类支持向量机模型,其具体形式如下:1)设已知训练集:T ={(x 1,y 1),…,(x i ,y i )}∈(X ×Y )ι其中,x i ∈X =R n ,y i ∈Y ={1,-1}( i =1,2,…,ι);x i 为特征向量。
SVM-⽀持向量机总结⼀、SVM简介(⼀)Support Vector Machine1. ⽀持向量机(SVM:Support Vector Machine)是机器学习中常见的⼀种分类算法。
2. 线性分类器,也可以叫做感知机,其中机表⽰的是⼀种算法。
3. 在实际应⽤中,我们往往遇到这样的问题: 给定⼀些数据点,它们分别属于两个不同的类。
我们现在要找到⼀个线性分类器把这些数据分成AB两类。
最简单的办法当然是,画⼀条线,然后将它们分成两类。
线的⼀侧,属于A类,另⼀侧,则属于B类。
SVM算法可以让我们找到这样⼀个最佳的线(超平⾯),来划分数据。
相⽐于KNN之类的算法,SVM算法只需要计算⼀次,得出最佳线(超平⾯)即可。
⾯对测试数据,只需要判断数据点落在线的哪⼀侧,就可以知道该数据点所属分类了。
⽐起KNN每次都需要计算⼀遍邻居点的分类,SVM算法显得简单⽆⽐。
(⼆)Sklearn参数详解—SVM1 sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)penalty:正则化参数,L1和L2两种参数可选,仅LinearSVC有。
loss:损失函数,有‘hinge’和‘squared_hinge’两种可选,前者⼜称L1损失,后者称为L2损失,默认是是’squared_hinge’,其中hinge是SVM的标准损失,squared_hinge是hinge的平⽅。
dual:是否转化为对偶问题求解,默认是True。
svm的基本原理
SVM(支持向量机)是一种机器学习算法,其基本原理如下:
1. SVM的目标是找到一个超平面,将不同类别的样本分隔开。
超平面可以视为一个n维空间中的一个(n-1)维子空间,其中n
是特征的数量。
2. SVM通过最大化两个类别之间的间隔来确定这个超平面。
间隔是指超平面到最近的样本距离的两倍。
这个间隔可以被视为控制模型的容忍度,即越大的间隔意味着模型对于噪声和变化的容忍度较低。
3. SVM的核心思想是将高维空间中的样本映射到一个更高维
空间中,以便更容易分隔不同的类别。
这个映射通常是非线性的,核函数被用来计算两个样本在高维空间中的相似度。
4. SVM算法通常基于二分类问题,但也可以通过多次训练和
组合来解决多分类问题。
5. SVM不仅能够在线性可分的情况下进行分类,还可以通过
使用软间隔(即允许一些样本在超平面的错误一侧)来处理一定程度的线性不可分性。
6. SVM还可以通过引入惩罚参数来平衡间隔的大小和分类错
误的容忍度。
这样可以调整模型的复杂度和泛化能力。
7. SVM算法的训练过程可以通过求解一个凸优化问题进行,
这个问题可以被转化为一个二次规划问题并使用现有的优化算法进行求解。
总而言之,SVM是一种通过找到一个超平面来实现数据分类的机器学习算法,它利用最大间隔的原理进行分类,并通过核函数来处理线性不可分性。
(一)SVM的八股简介支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。
以上是经常被有关SVM 的学术文献引用的介绍,有点八股,我来逐一分解并解释一下。
Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《Statistical Learning Theory》是一本完整阐述统计机器学习思想的名著。
在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。
与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。
所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC 维越高,一个问题就越复杂。
正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。
结构风险最小听上去文绉绉,其实说的也无非是下面这回事。
机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。
比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。
这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。
我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。
最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。
这个差值叫做经验风险Remp(w)。
以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。
此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。
回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。
统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。
很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。
置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC 维越大,推广能力越差,置信风险会变大。
泛化误差界的公式为:R(w)≤Remp(w)+Ф(n/h)公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。
统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
SVM正是这样一种努力最小化结构风险的算法。
SVM其他的特点就比较容易理解了。
小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。
多说一句,关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的(反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用)。
高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦(相对照而言,kNN算法在分类时就要用到所有样本,样本数巨大,每个样本维数再一高,这日子就没法过了……)。
下一节开始正式讨论SVM。
别嫌我说得太详细哦。
SVM入门(二)线性分类器Part 1线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式.在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子。
如图所示C1和C2是要区分的两个类别,在二维平面中它们的样本如上图所示。
中间的直线就是一个分类函数,它可以将两类样本完全分开。
一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面(Hyper Plane)!实际上,一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题(例如这里的二元分类问题——回答一个样本属于还是不属于一个类别的问题)需要离散的输出值,例如用1表示某个样本属于类别C1,而用0表示不属于(不属于C1也就意味着属于C2),这时候只需要简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。
例如我们有一个线性函数g(x)=wx+b我们可以取阈值为0,这样当有一个样本xi需要判别的时候,我们就看g(x i)的值。
若g(xi)>0,就判别为类别C1,若g(xi)<0,则判别为类别C2(等于的时候我们就拒绝判断,呵呵)。
此时也等价于给函数g(x)附加一个符号函数sg n(),即f(x)=sgn [g(x)]是我们真正的判别函数。
关于g(x)=wx+b这个表达式要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则xT=(3,8) ,而不是x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。
二,这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的w成为了n维向量(在二维的这个例子中,w是二维向量,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);三,g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即wx +b=0,我们也把这个函数叫做分类面。
实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。
此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。
下一节我们就仔细说说分类间隔,也补一补相关的数学知识。
SVM入门(三)线性分类器Part 2上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。
如下:Di=(xi,yi)xi就是文本向量(维数很高),yi就是分类标记。
在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。
有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:δi=yi(wxi+b)这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。
首先注意到如果某个样本属于该类别的话,那么wxi+b>0(记得么?这是因为我们所选的g(x)=wx+b就通过大于0还是小于0来判断分类),而yi也大于0;若不属于该类别的话,那么wxi+b<0,而yi也小于0,这意味着yi(wxi+b)总是大于0的,而且它的值就等于|wxi+b|!(也就是|g(xi)|)现在把w和b进行一下归一化,即用w/||w||和b/||w||分别代替原来的w 和b,那么间隔就可以写成这个公式是不是看上去有点眼熟?没错,这不就是解析几何中点xi到直线g(x)=0的距离公式嘛!(推广一下,是到超平面g(x)=0的距离, g(x)=0就是上节中提到的分类超平面)小Tips:||w||是什么符号?||w||叫做向量w的范数,范数是对向量长度的一种度量。
我们常说的向量长度其实指的是它的2-范数,范数最一般的表示形式为p-范数,可以写成如下表达式向量w=(w1, w2, w3,…… wn)它的p-范数为看看把p换成2的时候,不就是传统的向量长度么?当我们不指明p的时候,就像||w||这样使用时,就意味着我们不关心p的值,用几范数都可以;或者上文已经提到了p的值,为了叙述方便不再重复指明。
当用归一化的w和b代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,我们下面就简称几何间隔为“距离”。