如果有一个hog svm 样本训练技巧点标记错了,会对SVM模型有什么影响

实践|使用Python训练SVM模型识别手写体数字
当前位置: > 公众号文章 >
> 实践|使用Python训练SVM模型识别手写体数字
实践|使用Python训练SVM模型识别手写体数字
作者:蓝鲸网站分析博客支持向量机SVM(Support Vector Machine)是有监督的分类预测模型,本篇文章使用机器学习库scikit-learn中的手写数字数据集介绍使用Python对SVM模型进行训练并对手写数字进行识别的过程。准备工作手写数字识别的原理是将数字的图片分割为8X8的灰度值矩阵,将这64个灰度值作为每个数字的训练集对模型进行训练。手写数字所对应的真实数字作为分类结果。在机器学习sklearn库中已经包含了不同数字的8X8灰度值矩阵,因此我们首先导入sklearn库自带的datasets数据集。然后是交叉验证库,SVM分类算法库,绘制图表库等。读取并查看数字矩阵从sklearn库自带的datasets数据集中读取数字的8X8矩阵信息并赋值给digits。查看其中的数字9可以发现,手写的数字9以64个灰度值保存。从下面的8×8矩阵中很难看出这是数字9。以灰度值的方式输出手写数字9的图像,可以看出个大概轮廓。这就是经过切割并以灰度保存的手写数字9。它所对应的64个灰度值就是模型的训练集,而真实的数字9是目标分类。我们的模型所要做的就是在已知64个灰度值与每个数字对应关系的情况下,通过对模型进行训练来对新的手写数字对应的真实数字进行分类。设置模型的特征X和预测目标Y查看数据集中的分类目标,可以看到一共有10个分类,分布为0-9。我们将这个分类目标赋值给Y,作为模型的预测目标。手写数字的64个灰度值作为特征赋值给X,这里需要说明的是64个灰度值是以8×8矩阵的形式保持的,因此我们需要使用reshape函数重新调整矩阵的行列数。这里也就是将8×8的两维数据转换为64×1的一维数据。查看特征值X和预测目标Y的行数,共有1797行,也就是说数据集中共有1797个手写数字的图像,64列是经过我们转化后的灰度值。将数据分割为训练集和测试集将1797个手写数字的灰度值采用随机抽样的方法分割为训练集和测试集,其中训练集为60%,测试集为40%。查看分割后的测试集数据,共有1078条数据。这些数据将用来训练SVM模型。对SVM模型进行训练将训练集数据X_train和y_train代入到SVM模型中,对模型进行训练。下面是具体的代码和结果。使用测试集测对模型进行测试使用测试集数据X_test和y_test对训练后的SVM模型进行检验,模型对手写数字分类的准确率为99.3%。这是非常高的准确率。那么是否真的这么靠谱吗?下面我们来单独测试下。我们使用测试集的特征X,也就是每个手写数字的64个灰度值代入到模型中,让SVM模型进行分类。然后查看前20个手写数字的分类结果,也就是手写数字所对应的真实数字。下面是具体的分类结果。再查看训练集中前20个分类结果,也就是真实数字的情况,并将之前的分类结果与测试集的真实结果进行对比。以下是测试集中前20个真实数字的结果,与前面SVM模型的分类结果对比,前20个结果是一致的。使用混淆矩阵来看下SVM模型对所有测试集数据的预测与真实结果的准确率情况,下面是一个10X10的矩阵,左上角第一行第一个数字60表示实际为0,SVM模型也预测为0的个数,第一行第二个数字表示实际为0,SVM模型预测为1的数字。第二行第二个数字73表示实际为1,SVM模型也预测为1的个数。从混淆矩阵中可以看到,大部分的数字SVM的分类和预测都是正确的,但也有个别的数字分类错误,例如真实的数字2,SVM模型有一次错误的分类为1,还有一次错误分类为7。以下为scikit-learn官方的案例说明及代码 &&&&Read moreEnd.
微信号功能介绍关注大数据和互联网趋势,最大,最权威,最干货的大数据微信号(dashuju36)。大数据第一科技媒体。不发软文,只做知识分享。
微信扫描二维码关注
该公众号的更多微文查看: 17498|回复: 46|关注: 1
再议归一化问题
<h1 style="color:#4 麦片财富积分
不知何许人也~
入门, 积分 324, 距离下一级还需 176 积分
关注者: 240
[train_scale,test_scale,ps] = scaleForSVM(train_data,test_data,ymin,ymax)
train_data:训练集
test_data:测试集
ymin:归一化范围下限(可不输入,默认为0)
ymax:归一化范围上限(可不输入,默认为1)
train_scale:归一化后的训练集
test_scale:归一化后的测试集
ps:归一化映射
测试代码:
train_data = [1 12;3 4;7 8]
test_data = [9 10;6 2]
[train_scale,test_scale,ps] = scaleForSVM(train_data,test_data,0,1)
运行结果:
train_data =
& &&&1& & 12
& &&&3& &&&4
& &&&7& &&&8
test_data =
& &&&9& & 10
& &&&6& &&&2
train_scale =
& && && &0& & 1.0000
& & 0.2500& & 0.2000
& & 0.7500& & 0.6000
test_scale =
& & 1.0000& & 0.8000
& & 0.6250& && && &0
ps =
& && &name: 'mapminmax'
& &&&xrows: 2
& && &xmax: [2x1 double]
& && &xmin: [2x1 double]
& & xrange: [2x1 double]
& &&&yrows: 2
& && &ymax: 1
& && &ymin: 0
yrange: 1
复制代码
说明:归一化并不是必须采用的预处理方法。但一旦采用了,这个步骤就十分重要,因为这是使用SVM的第一步骤,原始数据从这里将会被变化,若处理不当会使后面的分类或回归效果不佳。
& && && &原始数据到底该怎么进行归一化,我想到的是以下的几个问题:
(1)是对每一个样本进行进行归一化(按行归一化)还是对每一个维度进行归一化(按列归一化)?
(2)是将训练集和测试集分别归一化还是放在一起形成一个大矩阵一起进行归一化?
对于上面的我个人的理解和给出的解决办法是:
(1)对每一个维度进行归一化
理由:对于每个样本,由于它的每一个维度的量纲不同,若对每一个样本进行归一化且在量纲数量级差别悬殊时会使样本中较低数量级的属性变为0,会使原始信息过多丧失。比如:
sample =
& & 1& & 2& & 0.5& & 100000
& & 5& & 7& & 0.4& & 200000
复制代码& && &&&
若按行对每一个样本进行[0,1]归一化(按行归一化),则结果为:
sample_scale =
& & 0.0000& & 0.0000& && && &0& & 1.0000
& & 0.0000& & 0.0000& && && &0& & 1.0000
复制代码
你会看到由于数量级的差别,对于每一样本的前三维的数据都被归一化为0,这样其实是不合理,会使原始数据的信息过多丢失。但若采用对每一维度进行归一化,就不会大范围发生这种情况,因为对于同一维度,量纲级别是相同的。对每一维度进行[0,1]归一化(按列归一化),结果为:
sample_scale =
& &&&0& &&&0& &&&1& &&&0
& &&&1& &&&1& &&&0& &&&1
复制代码
(2)将训练集和测试集放在一起,一起进行归一化。
理由:用测试代码中的例子
train_data =
& &&&1& & 12
& &&&3& &&&4
& &&&7& &&&8
test_data =
& &&&9& & 10
& &&&6& &&&2
复制代码
若先将训练集进行归一化(按每一维度进行),然后把这个归一化映射记录下来,当有测试集时再用这个归一化映射对测试集进行归一化,对训练集进行归一化时对于第一维度归一化映射记录的最大值是7,这就接受一个假设是所有数据的第一维度的最大值不能超过7,但我们看到新的测试集拿来的时候它的第一维度的值不一定非得小于7,测试数据中的测试集的第一维度的最大值为9&7。即若分别归一化会产生这种不合理的现象。将训练集和测试集放在一起归一化就可以避免这种情况,统一归一化时每一维度的最大值和最小值是从训练集和测试集中寻找。
关于这个问题,我和论坛的一些朋友曾一起详细讨论过,有的朋友说这样做不合理,因为这样做的话测试集间接参与的SVM模型的建立,他们的意思是SVM的整体思路是用训练集建立SVM模型,然后用这个模型来预测测试集;或者说得更明白一点就是用训练集建立一个固定的SVM模型,然后每来一个测试集,就可以用这个固定SVM模型来进行预测。对此,我个人的给出的解释和理解是,我们处理的问题是面向数据的,当有新的测试集来的时候,若我们能建立一个更加适合这个测试集的SVM模型来预测,这样岂不是更好,即将原始训练集和新来的测试集放在一起统一归一化,这样得到的SVM模型更加适合当前的测试集,当又有新的测试集来的时候,我们再将这个新的测试集和原始的训练集放在重新归一化,再进行后续的SVM步骤,建立SVM模型。
以上归一化问题是见仁见智的,您可以保留自己的意见,以上是我个人的见解,事实证明将训练集和测试集放在一起归一化的效果绝对要比分别归一化的效果要好很多。您可以自行验证测试,用事实说话。
[ 本帖最后由 faruto 于
14:08 编辑 ]
[url=.cn/faruto][color=red]孤单是一个人的狂欢狂欢是一群人的孤单[/color][/url] [url=/thread-.html]神经网络30个案例分析[/url]
<h1 style="color:# 麦片财富积分
关注者: 4
关于归一化,我觉得应该是按列来进行归一化,因为这是一个特征的所有数据,而按照行来进行归一化,实质上是不符合我们原本的设计想法的;另外就是应该把测试集和训练集集中在一起一起进行归一化。
举个例子来说,你提取的特征有面积,直径,和周长,测试集50,训练集50个。当你归一化的时候,应该是面积这一个特征进行归一化,直径和周长分别进行归一化。面积,直径和周长是不同的三种数据,拿单位来说也同样可以理解,面积的单位是平方厘米,直径是厘米,能把平方厘米和厘米一起进行归一化么?自然不能。
对于测试集和训练集,应该是一起要进行归一化的,对面积来说,如果分别归一化,其实测试集和训练集最大最小值是不同的,那放在一起作比较就没有价值了。
最后关于新的测试集,我觉得同样道理,应该是重新进行归一化。
<h1 style="color:# 麦片财富积分
关注者: 1
对第一个问题,我赞同,但对是否把训练集和测试集一起我不完全赞同。
把训练集和测试集一起归一化的确如上所说,会提高分类效果。但是前提是,我们在做实验室的时候,训练集和测试集都是我们自己选定的。或者说是已经有了所有特征,只不过分成训练集和测试集而已。因此,把它们一起归一化没问题。但实际的问题中这样往往是不可能的。
第一,就以我做的方向来说,目的是提取图像的特征,然后把它们分为两类或者多类(提取什么特征等细节略)。首先是找很多的图像库(原始图像必须是未压缩,未经过任何处理的),然后提取特征,进行训练,得到模型。在检测阶段(首先并不知道会对图像又什么样的操作),对待检测的图像,提取同样的特征,然后进行分类。试问,这个时候如何再把它们一起归一化?(由于图像源的非稳态特性,同一个图像源的图像都有较大差别,往往训练集会非常庞大,以尽可能考虑更多的可能性)
第二,在利用分类器开发产品的时候,往往都是先把模型训练好,然后来一个待检测的内容,直接输入模型进行检测。不可能再重新训练模型,而且实时性也是很大的问题。例如,我有个同学做异常声音的识别问题,主要目的是要能区分正常的声音和异常声音,例如枪声等,而且是开发产品,前期就必须训练大量的实例,有时候后一次训练就要几天。训练好模型后再对未知声音进行分类。此时又如何能实现同时归一化?
个人认为,为了折中,还是分开归一化。
<h1 style="color:#4 麦片财富积分
不知何许人也~
关注者: 240
回复 3# zh1985444 的帖子
恩。有道理。有些实际问题。是需要分开归一化。。放在一起归一化对于有的问题不实际
所以说具体问题具体分析~
有些东西不能太死板~
[url=.cn/faruto][color=red]孤单是一个人的狂欢狂欢是一群人的孤单[/color][/url] [url=/thread-.html]神经网络30个案例分析[/url]
<h1 style="color:#4 麦片财富积分
不知何许人也~
关注者: 240
二楼和三楼的两位朋友都非常认真的看了帖子。并且非常认真的大家一起探讨。
非常感谢。。O(∩_∩)O
[url=.cn/faruto][color=red]孤单是一个人的狂欢狂欢是一群人的孤单[/color][/url] [url=/thread-.html]神经网络30个案例分析[/url]
<h1 style="color:# 麦片财富积分
关注者: 1
大家各抒己见,互相分享自己的看法与所得。
matlab论坛给了我很大的帮助,尤其是faruto在LIBSVM方面的介绍,很有用。值得学习
<h1 style="color:#4 麦片财富积分
不知何许人也~
关注者: 240
回复 6# zh1985444 的帖子
互相探讨互相提高~O(∩_∩)O
[url=.cn/faruto][color=red]孤单是一个人的狂欢狂欢是一群人的孤单[/color][/url] [url=/thread-.html]神经网络30个案例分析[/url]
<h1 style="color:# 麦片财富积分
很好的帖子 很好的论坛。。。。。。。。。。。。。。。。
<h1 style="color:# 麦片财富积分
我以下的理解是针对BP网络而言的。
我目前是做BP网络非线性拟合,因为数据量庞大,样本等问题,一直收敛不到我的要求,我之前也考虑按维数归一化,因为我的样本第一个数据是300左右,最后的数据是0.1左右,这样的话由于一个样本的数据之间差异太大所以如果一起归一,再反归一的话肯定会造成误差增大。
第二个问题就是输出输出一起归一的问题,不看数据,如果一起归一的话,可能因为是做的同等变换,有可能是要效果好一点,但是也有个问题就是你的输入和输出的要是有数量级上的差别的话,一起归一我觉得就不好。
另外2楼说到量纲的问题,之前我和导师说想数据归一化,她说数据是有物理意义存在的,要是归一化了这个物理意义就没有了。但是,我觉得,这个BP网络吧,说白点就是扔进去一组数据,它给你输出一组数据,它不管你这个数据的量纲啊,物理意义啊,反正输入A,输出就是B。所以我觉得在对数据进行某些处理的时候,就不用考虑其他问题的。
<h1 style="color:# 麦片财富积分
我觉得肯定是按维归一化,因为不同维之间的量纲、数量级是不同的。而本维则是一种在统计学上的,当数量达到一定程度随机变化后的正态分布,具有可比性、延续性。不同维之间归一化我觉得差距会很大。另外对于测试集是否归一化,就用涉及的SVM模型,有的是这样的,有的则不是。但是似乎都可以有较好的结果。核函数都是一样的,估计与算法有关。
站长推荐 /2
Powered by47301人阅读
机器学习&数据分析(21)
SVM的文章介绍多如牛毛,很多介绍都非常详尽,而我却一点都不开窍,始终无法理解其中的奥秘。
这次,我要用自己粗浅的语言,来撩开我与SVM之间的面纱。
1. SVM是要解决什么问题?
之前,冲上来就看SVM的应用,简介,最优化计算方法等。从没认真想过SVM要解决什么问题。
下面一幅是常用的图,来解释SVM的需求。
SVM最基本的应用是分类。 求解最优的分类面,然后用于分类。
最优分类面的定义:&
对于SVM,存在一个分类面,两个点集到此平面的最小距离最大,两个点集中的边缘点到此平面的距离最大。
从直观上来看,下图左边的,肯定不是最优分类面;而右边的能让人感觉到其距离更大,使用的支撑点更多,至少使用了三个分类面,应该是最优分类面。
那么,是不是一个最优分类面需要两个或三个以上的点才能确定那?
这个要依据实际情况而定。
如下图,左图是由三个点,来确定的一个最优分类面,不同类别的两个点确定一个中心点,而同类的两个点可以确定方向向量。这个最优分类面,需要三个点。
但对于右图,直接获取不同类别的两个点的垂面,即是最优分类面。这个分类面,则需要两个点。
以上,情况的分析,使得求解最优分类面的思路,模式比较复杂。
若采用穷举法,至少需要以下过程。
先取不同类别的两个点,求解中心连线的垂面。如以上右图模式
然后判断其他点到此垂面的距离,若有更小的距离(或负&#20540;,即分类错误),则选取以上左图模式。
穷举所有点。采用最直接的方式处理,则其运算复杂度为 m*n*n, 若n & m.
这个还没有用到高维映射哪,如果再加上高维映射的处理,算法恐怕就更复杂了。所以,穷举法是不太现实的。
2. 从直观到数学推论
由直观到拟合:
直观上,存在一个最优的超平面。
那么,我们就假设这个最优面的公式是:
W * X &#43; b = 0,
那么对于所有的点集x,
都存在平行于最优超平面,的点集的边界面
W * xi &#43; b &= 1 或 W * xi &#43; b &= -1, 这里 yi可以归一化为1,-1
最大化这两个平行超平面的距离。即
max &2 / ||w||
或者说是 最小化w,即 min ||w||
另外一个条件是&W * xi &#43; b &= 1 或 W * xi &#43; b &= -1。
这个有点超出平时用的计算方法了(如果没学过最优化理论),因既有求极&#20540;,又有不等式存在。这个是典型的QP(quandratic programming)二次规划问题。
高数里面有有关求极&#20540;的理论,采用的是拉&#26684;朗日乘子法,但其条件是等式。
所以,需要将不等式,转化为等式的形式。 方法就引入变量。
给每个点配上一个系数α,若是边界点,那么α就为大于0,否则就为0.
则&αi * yi * (W * xi &#43; b) = 0.
从另一方面来讲,αi也可以看做是拉&#26684;朗日系数,采用拉&#26684;朗日乘子法,求极&#20540;。
由于αi也是未知的。所以,又需要求出αi。
即 min ( max L ), max L 是因为后面的超平面公式经过减号后变成了 &= 形式,其求和的最大&#20540;为0。
先对min求极&#20540;, 对w,和b进行微分。
推导出以下关系
(blog没公式编辑器,想偷懒只要剪贴了)
终于推出简单点的公式了。由min 到 max 也是一个对偶转换的过程,又称dual
求max极&#20540;,并且,只有一个等式约束条件,缺点就是未知变量也增加了。
接下来,就是用最优化的方法,求取极&#20540;了。
对未知变量,取一个初始&#20540;,然后用点集中的点,一个接一个的进行训练。
直至未知变量收敛。
3. SMO 解法
SVM 从简单边界分类思路,到复杂的拉&#26684;朗日求解。
其实,对于二次规划问题,有经典的最速下降法,牛顿法等最优化求解方法。而SMO是一个SVM的优化算法,避开了经典的二次规划问题。
消除w,转换为&αi 的求解。这是一个更加有效的求解方法
利用KKT条件,再加上一堆的推论,终于有以下公式:
还是这么多公式和术语,真是令我头疼。只能先记着,后面慢慢消化。
原理理解:
&αi *&&αj &* ... 其实仍然是一个多元规划问题,所以,先多做几个假设:
1. 假设除&α1 之外,其他都是定&#20540;,那么据∑ni=1αiyi=0,&&α1可以直接定下来,就无法进行优化了。
2. 若有&α1,&&α2是变量,其他是常量,&α2可以由&α1来表示,代入到目标函数中,就形成了一个一元二次函数。这样就能轻易地求极&#20540;了。其中,还是要考虑约束条件的:
0 &= ai &= C. 总之,求极&#20540;是方便可行多了。
采用此方法,选取不同的&αi,&&αj求极&#20540;。 然后选取最大的。
SMO就是采用这种原理,只不过它不是依次或随机选取&α,而是采用启发式算法选取最优的两个维度。
&John C. Platt 的那篇论文 Fast Training of Support Vector Machines Using Sequential Minimal Optimization,有原理,有伪代码可以参考。
http://blog.pluskid.org/?page_id=683
介绍的也是比较深入浅出的。
3. SVM种类有哪些,适用场景及优缺点
SVM的空间复杂度:
SVM 是所占内存,是样本数据量的平方。
《A Tutorial on Support Vector Machines for Pattern Recognition》 &1998KluwerAcademicPublishers,Boston,训练计算复杂度在O(Nsv^3&#43;LNsv^2&#43;d*L*Nsv)和O(d*L^2)之间,其中Nsv是支持向量的个数,L是训练集样本的个数,d是每个样本的维数(原始的维数,没有经过向高维空间映射之前的维数).
总的来讲,SVM的SMO算法根据不同的应用场景,其算法复杂度为~N 到~N^2.2之间,而chunking scale的复杂度为~N^1.2 到~N^3.4之间。一般SMO比chunking算法有一阶的优势。
线性SVM比非线性SVM的smo算法要慢一些。所以,据原著论文的测试,SMO算法,在线性svm上快1000倍,在非线性上快15倍。
对于SVM的SMO算法的内存需求时线性的,这使得其能适用比较大的训练集。
所以,如果数据量很大,SVM的训练时间就会比较长,如垃圾邮件的分类检测,没有使用SVM分类器,而是使用了简单的naive bayes分类器,或者是使用逻辑回归模型分类。
---------------------
其他观点:
SVM在小样本训练集上能够得到比其它算法好很多的结果。支持向量机之所以成为目前最常用,效果最好的分类器之一,在于其优秀的泛化能力,这是是因为其本身的优化目标是结构化风险最小,而不是经验风险最小,因此,通过margin的概念,得到对数据分布的结构化描述,因此减低了对数据规模和数据分布的要求。
SVM也并不是在任何场景都比其他算法好,对于每种应用,最好尝试多种算法,然后评估结果。如SVM在邮件分类上,还不如逻辑回归、KNN、bayes的效果好。
SVM各个参数的含义?
sigma: rbf核函数的参数,用于生成高维的特征,常用的有几种核函数,如径向核函数,线性核函数,这个也需要凭经验来选择。
C:惩罚因子。在最优化函数中,对离群点的惩罚因子,也是对离群点的重视程度体现。这个也是凭经验和实验来选择。
分类型SVM,需要调优的参数有惩罚因子C,核函数参数。 C的取&#20540;&10^-4, 10^-3, 10^-2,... 到 1, 5... 依次变大
分类型SVM, 在一定程度上与C-SVM相同,将惩罚因子C换成了因子nu。其最优化的函数略有不同。nu的取&#20540;是0-1,一般取&#20540;从0.1到0.8. 0代表样本落入间隔内的数目最小的情况,1代表样本可以落入间隔可以很多的情况。
wiki上的原话:
main motivation for the nu versions of SVM is that it has a has a more meaningful interpretation. This is because nu represents an upper bound on the fraction of training samples which are errors (badly predicted) and a lower bound on the fraction of samples
which are support vectors. Some users feel nu is more intuitive to use than C or epsilon.&
用于回归的svm模型
nu-SVR:同上
---------------------------
4. 其他相关概念:
VC维:将N个点进行分类,如分成两类,那么可以有2^N种分法,即可以理解成有2^N个学习问题。若存在一个假设H,能准确无误地将2^N种问题进行分类。那么这些点的数量N,就是H的VC维。 这个定义真生硬,只能先记住。一个实例就平面上3个点的线性划分的VC维是3. 而平面上 VC维不是4,是因为不存在4个样本点,能被划分成2^4 = 16种划分法,因为对角的两对点不能被线性划分为两类。更一般地,在r 维空间中,线性决策面的VC维为r&#43;1。
置信风险: 分类器对 未知样本进行分类,得到的误差。也叫期望风险。
经验风险: 训练好的分类器,对训练样本重新分类得到的误差。即样本误差
结构风险:[置信风险, 经验风险], 如(置信风险 &#43; 经验风险) / 2
置信风险的影响因素有: 训练样本数目和分类函数的VC维。训练样本数目,即样本越多,置信风险就可以比较小;VC维越大,问题的解的种类就越多,推广能力就越差,置信风险也就越大。因此,提高样本数,降低VC维,才能降低置信风险。
而一般的分类函数,需要提高VC维,即样本的特征数据量,来降低经验风险,如多项式分类函数。如此就会导致置信风险变高,结构风险也相应变高。过学习overfit,就是置信风险变高的缘故。
结构风险最小化SRM(structured risk minimize)就是同时考虑经验风险与结构风险。在小样本情况下,取得比较好的分类效果。保证分类精度(经验风险)的同时,降低学习机器的 VC 维,可以使学习机器在整个样本集上的期望风险得到控制,这应该就是SRM的原则。
当训练样本给定时,分类间隔越大,则对应的分类超平面集合的 VC 维就越小。(分类间隔的要求,对VC维的影响)
根据结构风险最小化原则,前者是保证经验风险(经验风险和期望风险依赖于学习机器函数族的选择)最小,而后者使分类间隔最大,导致 VC 维最小,实际上就是使推广性的界中的置信范围最小,从而达到使真实风险最小。
训练样本在线性可分的情况下,全部样本能被正确地分类(咦这个不就是传说中的yi*(w*xi&#43;b))&=1的条件吗),即经验风险Remp 为 0 的前提下,通过对分类间隔最大化(咦,这个就是Φ(w)=(1/2)*w*w嘛),使分类器获得最好的推广性能。
对于线性不可分的状况,可以允许错分。即对于离群点降低分类间隔。将距离原来的分类面越远,离群就越严重,这个距离,可以用一个&#20540;--松弛变量来表示,只有离群点才有松弛变量。当然,要对这个&#20540;加以限制,即在最小化函数里,加入一个惩罚项,里面还有一个可以人为设定的惩罚项C。当C无限的大,那么就退化为硬间隔问题,不允许有离群点,问题可能无解。若C=0,无视离群点。有时C&#20540;需要多次尝试,获取一个较好的&#20540;。 这个里面可分析还很多,后面再学习。
核函数作用:将完全不可分问题,转换为可分或达到近&#20284;可分的状态。
松弛变量:解决近&#20284;可分的问题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:769195次
积分:7046
积分:7046
排名:第2201名
原创:109篇
评论:149条
(1)(2)(1)(7)(3)(1)(1)(3)(4)(2)(1)(6)(2)(1)(2)(2)(2)(8)(5)(4)(2)(3)(4)(4)(7)(4)(9)(11)(9)

我要回帖

更多关于 svm训练样本 的文章

 

随机推荐