中科大模式识别大作业miniproject.docx

上传人:b****6 文档编号:6395919 上传时间:2023-01-06 格式:DOCX 页数:7 大小:161.99KB
下载 相关 举报
中科大模式识别大作业miniproject.docx_第1页
第1页 / 共7页
中科大模式识别大作业miniproject.docx_第2页
第2页 / 共7页
中科大模式识别大作业miniproject.docx_第3页
第3页 / 共7页
中科大模式识别大作业miniproject.docx_第4页
第4页 / 共7页
中科大模式识别大作业miniproject.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

中科大模式识别大作业miniproject.docx

《中科大模式识别大作业miniproject.docx》由会员分享,可在线阅读,更多相关《中科大模式识别大作业miniproject.docx(7页珍藏版)》请在冰豆网上搜索。

中科大模式识别大作业miniproject.docx

中科大模式识别大作业miniproject

模式识别miniproject实验报告

 

报告人:

李南云

学号:

SA16173027

日期:

2016.12.23

 

数据分析

在此简要的说明一下数据情况,给定数据集分为train和test两个data文件,

train.data是11列8285行,意味着有8285个样本,矩阵的最后一列是该列所对应的样本类别。

根据统计,train数据前466个样本均为1类,而后7819个样本均为-1类,所以该分类器为二分类问题。

MATLAB中用importdata()读取数据,并将样本和其所属类别分开来,样本为trnset,所属类别为trnclass,train数据用于训练分类器。

Test.data是11列2072行,同样也意味着有2072个样本,最后一列为该列所对应样本类别,test数据前117为1类,后1955个数据为-1类。

同样读取数据后,分为tstset和tstclass两个矩阵,前者代表2072个样本,后者代表所对应样本的类别,我们需要将train所训练好的分类器应用在tstset样本上,输出分类结果tstclass1,将其与tstclass相比较,计算每个类别的正确率和总的正确率。

算法介绍

本次实验采用了SVM(supportvectormachines)分类模型,由于数据线性不可分而且在实际问题中数据也大都线性不可分,所以本次试验采取的线性不可分SVM方法,即将数据向高维空间映射,使其变得线性可分。

本实验选取的二分类算法,SVC_C。

下面先以线性分类器为例,来引入SVM算法的一些概念和处理流程,如图1所示,假设C1和C2是需要区分的类别,而在二维平面中它们的样本如图,中间的一条直线就是一个线性分类函数,由图中可以看出,这个线性分类函数可以完全的将两类样本区分开来,我们就称这样的数据是线性可分的,否则则为线性不可分,本实验中所采用的数据在二维空间里分布如图2和图3所示(红色标注分类为1的样本,蓝色标注为分类为-1的样本),明显线性不可分。

图1

图2

图3

设图1中线性函数为g(x)=wx+b(x是样本的向量表示),那么当有一个样本xi需要判别的时候,就可以看g(xi)的值,若g(xi)>0就判别为C1类,若g(xi)<0就判别为C2类(等于的时候就拒绝判断)。

此时也等价与给函数g(x)附加一个符号函数sgn(),即f(x)=sgn[g(x)]是我们真正的判别函数,中间那条线的表达式是g(x)=0,即wx+b=0,我们也把这个函数叫做分类面。

在此我们就不对几何间隔、二次规划问题、支持向量等做详细的介绍了。

SVM在线性分类器上做了重大改进,即为——核函数!

线性分类器只能对线性可分的样本进行处理,但是实际中很多样本都是线性不可分的,那么这种线性可分的分类器就不适用了,是否有某种办法,让线性不可分的数据变得线性可分呢?

实际上是有的!

我们可以用一个二维平面中的分类问题作为例子,如图4

图4

横轴短点a和b之间红色的部分里的所有点为正类,两边的黑色点为负类,我们明显找不到符合要求的线性函数将两类数据区分开来,但是可以找到一条曲线例如图5中的曲线来判断所属类别,它的函数表达式可以写为g(x)=c0+c1x+c2x2。

图5

明显它不是一个线性函数,但是我们可以新建一个向量a和y1

=

=

这样g(x)就可以转化为f(y)=,即:

g(x)=f(y)=a*y

在任意维度的空间中,这种形式的函数都是一个线性函数,因为自变量y的次数不大于1.这样原来在二维空间中线性不可分的问题映射到四维空间中,就变成了线性可分的,这也就形成了我们最初想解决线性不可分问题的基本思路——向高维空间转化,使其变得线性可分。

而转化的最关键部分就是找打x对于y的映射方法,遗憾的是假设x’是由x变换得到的高维变量,在此维度下,问题线性可分,那么只需要计算f(x’)=+b的值来进行分类,即只关心高维空间里内积的值。

而从理论上来说x’是由x变换得来的,因此广义上可以吧它叫做x的函数,而w’是常量,它是一个低维空间向量里的常量w经过x与x’之间相同的变换得到的,所以给定了一个w和w’的值,我们就可以有一个确定的f(x’)的值与其对应。

那么是否能有这样一种的函数K(w,x),它接受低维空间的输入值,却能够计算出高维空间的内积

如果真的有这种函数,那么当给定了一个低维空间的输入x之后,使g(x)=K(w,x)+b和f(x’)=+b这两个函数的计算结果就完全一样,我们就不用费力的去找映射关系了。

而上述的K(w,x)却是存在,它被称为核函数(核,kernel),而且只要是满足了Mercer条件的函数,就可以作为核函数。

核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。

那么就有两个问题:

1.既然有很多核函数,针对具体问题我们应该怎么选择呢?

2.如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办呢?

对于第一个问题——核函数的选择我不太了解它选择中所需要的指导原则

通常而言,径向基核函数(RBF)是比较合理的选择,本次实验也是采用的径向基核函数,这个核函数将样本非线性地映射到一个更高维的空间,与线性核不同,它能够处理分类标注和属性的非线性关系,并且,线性核是RBF的一个特例,同时,sigmoid核的表现很想一定参数的RBF核。

第二个原因,超参数的数量会影响到模型选择的复杂度,而多项式核比RBF核具有更多的超参数。

最后,RBF核有更少的数值复杂度。

当然也存在一些情形RBF核是不适用的。

特别的,当特征维数非常大的时候,很可能只能适用线性核。

本实验采用RBF作为核函数,并使用了‘boxconstraint’参数,这是SVM的惩罚系数,一般是按[···,0.1,1,10,···]这样的规律调节尝试。

实验

1.评价标准

当然是使用正确率作为评价标准啦!

我们统计了对于正类即1的误判率和对于负类-1的误判率,因为所给数据中,正类较少,负类较多,我们尝试对读取的数据多少进行调节,并计算时间,后续分析结果,总结问题。

2.整体实验方法和步骤

①将train和test数据读取,并分别将其分成set和class;

②训练并得到分类器;

③测试输出;

④计算评价指标;

⑤减少读取的train数据的负类,并重复上述过程;

⑥总结;

3.分类器训练算法的参数调整步骤:

①随机生成多个参数(解);

②在目标函数上验证解的质量;

③根据解的质量由好到坏进行排序,取出其中较好的一部分,在这些解的每个元素上加上一个随机数,从而得到一些新的解;

④把新解和老解比较,取出最好的一部分,作为下一次迭代的初始解;

实验结果

得到测试输出后,将其与test数据的第11列进行比较,相同即为判断正确,并计算正确率。

Excel中我用test数据的第11列减去输出结果,即结果为0即为正确,结果不为0,即为错误。

下图6为正类和负类部分excel数据截图

图6

经统计总的正确率为74.81%,对于正类数据的判别正确率为61.54%,负类数据的判别率为75.60%,负类数据的正确判别率明显更高一些,这可能是由于训练数据中负类数据占大多数的原因,所以负类的判别正确率明显的更好一些。

整个训练外加测试时间为24.8980秒。

下面我们只读取的train数据的前932个,即训练数据中正类和负类的数目相同,这时我们可以看到结果,总的正确率有所降低为69.16%,其中分类器判别正类的正确率为70.94%,负类为69.05%。

两相差减小,此时负类的判别率比起全部读取数据时降低了大约5%,而正类的却增加了近10%!

此时明显对正类比较敏感,当然总体还是降低了····

当我再次把读取train的负类的数据量增加到正类的2倍时,即正类样本为466个,副类样本为932个,此时总的正确率为74.47%,test正类数据判断的正确率为62.39%,负类数据为75.19%,可以看到此时已经与将8285个训练样本全部放进去的结果大抵相同。

后来我又尝试了读取的train与test数据量相等,此时的总的正确率为72.78%,正类为63.25%,负类为73.35%。

没有提升,反而降低了,不过并没有太大的改变。

下面表格整理了一下结果:

Train

(1)

Train(-1)

Test

总正确率

正类正确率

负类正确率

466

7819

2072

74.81%

61.54%

75.60%

466

466

2072

69.16%

70.94%

69.05%

466

466*2

2072

74.47%

62.39%

75.19%

466

1606

2072

72.78%

63.25%

73.35%

本来想测一下所有的数据,给出一个曲线图,跑一个要20多秒,跑完的话时间太长了,所以没有测······

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1