ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【人工智能实验】SVM分类器的设计与应用

2021-03-21 18:58:44  阅读:351  来源: 互联网

标签:SVM 函数 人工智能 分类器 正确率 参数 vote 实验


目录

实验五SVM分类器的设计与应用

一、实验目的

二、实验原理

1、人脸识别系统的基本框架

2、利用主成分分析PCA实现特征提取

3、SVM分类器设计

三、实验结果

1、选用Sigmoid函数作为核函数,降维数选为20.

2、选用表3.2提供的核函数以及参数,进行最优降维数的确定。

四、实验总结

1、算法步骤

2、比较不同核函数对分类结果的影响

3、训练集和测试集如何划分

4、分析本次实验不同数据量引起的运行时间的变化情况

4、核心代码

5、思考与体会

6、参考文献:


实验五SVM分类器的设计与应用

一、实验目的

1、熟悉SVM的基本设计原理。

2、掌握SVM的使用方法。

3、利用SVM实现人脸识别。

二、实验原理

1、人脸识别系统的基本框架

如图2.1所示

图1 人脸识别系统的基本框架

 

2、利用主成分分析PCA实现特征提取

图像识别中,常常用矩阵来表示人脸图像。然而,高维图像数据对整个识别系统的识别速度有限的,也不利于实时识别系统的实现。降维技术是解决这一问题的常用方法,使数据从原始图像高维空间转化为维数大大减小的特征空间,同时,又保留原始图像数据的绝大部分信息。

主成分分析利用K-L变换得到高维图像空间的一组正交基,保留其中较大的特征值对应的正交基,组成特征脸空间。将PCA用于人脸图像的最优表示,应用主分量重构人脸,提出特征脸(Eigenface)的概念,用PCA实现人脸图像的紧致表示,认为任何一幅图像都可以用一组特征脸的线性加权和来近似重构,其权重系数可以通过将人脸图像在本征脸空间投影得到,然后用投影到低维空间中基函数上的系数来表示人脸并进行识别,并采用奇异值分解(SVD)算法简化了特征脸的计算。

对于一幅M×N的人脸图像,将其每列相连构成一个D=M×N维的列向量。D就是人脸图像即图像空间的维数,设n是训练样本的数目,xi 为第i 幅人脸图像

为了减少维数,把特征值从大到小排列,选取前m 个,构成新的特征空间。由于这些特征向量对应的图像很像人脸,所以被称为“特征脸”。任何一幅图像都可以向特征脸子空间投影并获得一组坐标系数,这组坐标系数表明了该图像在特征脸子空间的位置,从而作为人脸识别的依据

PCA可去除原成分各维之间的相关性并进行降维,对降维后维数的选择要看对最小平方误差的要求,被舍去的协方差矩阵的特征根的平方和与所有特征根的平方和就是最小平方误差。

3、SVM分类器设计

支持向量机(Support Vector Machine,SVM )是在统计学理论的基础上发展起来的新一代学习算法,它在文本分类、手写识别、图像分类、生物信息学等领域中获得较好的应用。

SVM是一个二分器,只能用于2类样本的分类,现在我们将它推广到多类问题。本文是对SVM进行推广到能够处理多类问题。可采用一对一的投票策略。将A、B、C、D 4类样本分成多个两类分类训练集,即(A,B)、(A,C)、(A,D)、(B,C)、(B,D)、(C,D),得到6个(对于n类问题,为n(n-1)/2 个)SVM二分器。在测试的时候,把测试样本x依次送入这6个二分器,采取投票形式,最后得到一组结果。投票是以如下方式进行。

初始化:vote(A)=vote(B)=vote(C)=vote(D)=0.

投票过程:如果使用训练集(A,B)得到的分类器将x判定为A类,则vote(A)=vote(A)+1,否则 vote(B)=vote(B)+1;如果使用(A,C)训练的分类器将x判定为A类,则vote(A)=vote(A)+1,否则vote(C)=vote(C)+1;...;如果使用(C,D)训练的分类器将x判定为C类,则vote(C)=vote(C)+1,否则vote(D)=vote(D)+1。

最终判决:Max(vote(A),vote(B),vote(C),vote(D))。如有两个以上的最大值,则一般可以简单地取第一个最大值所对应的类别。

三、实验结果

1、选用Sigmoid函数作为核函数,降维数选为20.

由python编程(见附件ex5.m),将参数取值范围设置为[0.001,1],随机选取50个,不同参数对正确率的影响见图3.1.1,进而得到最优分类结果如下表3.1.1所示:

表3.1.1 参数及正确率对应表

核函数

最优参数

运行时间

正确率

Sigmoid

0.04

133.970s

96.25%

 

图3.1.1 不同参数对正确率的影响

 

为了得到更优的结果,我们进一步将参数的取值范围缩小至[0.01 0.05],随机选取50个,此参数范围下不同参数对正确率的影响见图3.1.2,进而得到最优分类结果如下表3.1.2所示:

表3.1.2 参数及正确率对应表

核函数

最优参数

运行时间

正确率

Sigmoid

0.025

135.860s

96.75%

图3.1.2 不同参数对正确率的影响

 

2、选用表3.2提供的核函数以及参数,进行最优降维数的确定。

    不同降维数对于正确率的影响如图3.2所示,我们最终选取的降维数以及最优正确率如下表3.2.1所示,在降维数为30时,正确率达到97.35%

表3.2.1 最优降维数和正确率

降维数

正确率

运行时间

30

97.35%

123.136s

 

图3.2.1 不同降维数对于正确率的影响

四、实验总结

1算法步骤

Step1  读取训练数据集;

Step2  主成分分析法降维并去除数据之间的相关性;

Step3  数据规格化;

Step4  SVM训练(选取径向基和函数)得到分类函数;参见:multiSVMtrain.m

Step5  读取测试数据、降维、规格化;

Step6  step4 产生的分类函数进行分类(多分类问题,采用一对一投票策略,归位得票最多的一类);

Step7  计算正确率。

2、比较不同核函数对分类结果的影响

为了确定合适的核函数,我们做了以下实验。gamma值选择从0.0001开始,实验结果如图4.2所示,其中x_label即枚举的gamma参数值,y_label为分类结果的正确率,图中不同颜色曲线代表选用不同的核函数,其中蓝色曲线代表选用高斯核,橙色曲线代表选用多项式核,绿色曲线代表选用Sigmoid核。我们发现当gamma值趋近于1时,rbf kernel(高斯核函数)和Sigmoid均出现了较差的结果,多项式核函数处于较高的正确率。但是,本次我们选取的是一个正确率最高的值或者相对较高的值,我们发现rbf和Sigmoid核函数在gamma取值为0.1左右时,正确率较高,因此我们可以选取rbf和Sigmoid核函数作为本次实验的核函数。

图4.2 不同核函数不同参数识别率对比图

3、训练集和测试集如何划分

这里我们采用k折交叉验证方法进行划分数据集,对于本次实验,由于每一类样本的数据并不很多,采用此方法很好的解决了数据量不足的问题,同时也提高了算法的准确率,此处k=10,kf=KFold(n_splits=10,shuffle=True)。

4、分析本次实验不同数据量引起的运行时间的变化情况

在做不同核函数不同参数识别率对比实验(见图4.2)时,运行时间差别很大,具体结果如下表4.4所示:

表4.4 不同样本数量对运行时间的影响

 

20样本

40样本

运行时间

366.672s

1798.895s

 

根据参考文献1,选取20个样本点进行实验,运行时间为366.672s,但是如果考虑所有数据量的情况,即根据40个人脸样本进行参数的选择实验,运行时间达到1798.895s,接近于0.5h。同时,这两出运行时间的对比,对我以后的实验有所启发。由于我们只是选取合适的核函数,而不是进行正确率的最优选择,因此我们在综合考虑正确率和时间的条件下,可以适当的降低数据量,同时还不影响正确核函数的选择。

 

4、核心代码

(1)PCA降维及数据规格化

(2)SVM核心算法

5、思考与体会

对于本次实验,采用PCA降维来减少特征值,这里首先采用参考资料提供的20维作为降维目标,进行核函数和参数的调节,最终结果达到96.75%,后来通过选取不同的降维数来选取一个最优的结果,最终选取降维数为30,正确率达到97.35%。

通过本次实验,我学会了使用scikit-learn中提供的一些智能算法,SVM的算法库分为两类,一类是分类的算法库,包括SVC,NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR,NuSVR和LinearSVR 3个类。

最重要的是,让我明白了选取参数和核函数的重要性,对于SVM算法,选取不同的核函数得到的结果是不同的,因此在选取核函数之前,事先查阅了资料并亲自实践,核函数得以确定。另外,GridSearchCV这个函数太好用了,只要把参数输进去,就能给出最优化的结果和参数,python的功能真是强大!

6、参考文献:

1、不同模型参数的比较:https://www.cnblogs.com/ascii0x03/p/6129443.html

2、scikit-learn SVM算法库使用概述:https://www.cnblogs.com/pinard/p/6117515.html

3、模型调参利器 GridSearchCV(网格搜索)参数的说明:https://www.cnblogs.com/1994tj/p/11176766.html

代码

https://download.csdn.net/download/weixin_43442778/16017373

推荐文章

  •     700套个人简历模板(考研保研工作):https://mp.csdn.net/editor/html/114280230
  •     人工智能2019年秋季学期期末复习知识点整理:https://mp.csdn.net/editor/html/104431474
  •     Fisher线性分类器的设计与实现,感知器算法的设计实现:https://download.csdn.net/download/weixin_43442778/16017212

欢迎大家关注【小果果学长】微信公众号,获取更多资料和源码,期待你的点赞和支持!
 

标签:SVM,函数,人工智能,分类器,正确率,参数,vote,实验
来源: https://blog.csdn.net/weixin_43442778/article/details/115053425

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有