ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:29.33KB ,
资源ID:6814013      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6814013.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SVM实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SVM实验报告.docx

1、SVM实验报告svm分类算法 一、 数据源说明 1、 数据源说远和理解: ticeval2000.txt: 这个数据集是需要预测( 4000个客户记录)的数据集。它和ticdata2000.txt它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。共有4003(自己加了三条数据),根据要求,用来做预测。 tictgts2000.txt:最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预测的结果进行校验。我们的预测结果将放在result.txt文件中。 数据集理解:本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列,

2、可以分为0、1两类。我们首先需要对ticdata2000.txt进行训练,生成model,再根据model进行预测。 2、 数据清理 代码中需要对数据集进行缩放的目的在于: a、避免一些特征值范围过大而另一些特征值范围过小; b、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到 -1,1 或者是 0,1 之间。 二、 数据挖掘的算法说明 1、 svm算法说明 2、 实现过程 在源程序里面,主要由以下2个函数来实现: (1) struct svm_model *svm_train(const struct svm_problem *prob, const st

3、ruct svm_parameter *param); 该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下: struct svm_problem /存储本次参加运算的所有样本(数据集),及其所属类别。 int n; /记录样本总数 double *y; /指向样本所属类别的数组 struct svm_node *x; /指向一个存储内容为指针的数组 ; 其中svm_node的结构体定义如下: struct svm_node /用来存储输入空间中的单个特征 int index; /输入空间序号,假设输入空间数为m double value; /该输入空间的值 ;

4、 所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下: 图1.1libsvm训练时,样本数据在内存中的存放结构 只需在内存中申请n*(m+1)*sizeof(struct svm_node)大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob参数的设置。 参数param,是svm_parameter数据结构,具体结构定义如下: struct svm_parameter / 训练参数 int svm_type; /svm类型, int kernel_type; /核函数类型 int degree; /* for poly */ d

5、ouble gamma; /* for poly/rbf/sigmoid */ double coef0; /* for poly/sigmoid */ /* these are for training only */ double cache_size; /* in mb 制定训练所需要的内存*/ double eps; /* stopping criteria */ double c; /* for c_svc, epsilon_svr and nu_svr ,惩罚因子*/ int nr_weight; /* for c_svc 权重的数目*/ int *weight_label; /*

6、 for c_svc 权重,元素个数由nr_weight 决定*/ double* weight; /* for c_svc */ double nu; /* for nu_svc, one_class, and nu_svr */ double p; /* for epsilon_svr */ int shrinking; /* use the shrinking heuristics 指明训练过程是否使用压缩*/ int probability; /* do probability estimates 指明是否要做概率估计*/ 其中,svm类型和核函数类型如下: 设定完这两个参数,就可以直

7、接在程序中调用训练函数进行训练了,该其函数返回一个struct svm_model *svm模型的指针,可以使用svm_save_model(const char *model_file_name, const struct svm_model *model)函数,把这个模型保存在磁盘中。至此,训练函数的移植已经完成。 (2) double svm_predict(const struct svm_model *model, const struct svm_node *x); 参数model,是一个svm模型的指针,可以使用函数struct svm_model *svm_load_model

8、(const char *model_file_name),导入训练时保存好的svm模型,此函数返回一个svm模型的指针,可以直接赋值给变量model。 参数x,是const struct svm_node结构体的指针,本意是一个输入空间的指针,但实际上,该函数执行的时候,是从参数x处计算输入空间,直到遇到单个样本数据结束标记-1才结束,也就是说,该函数运算了单个样本中的所有输入空间数据。因此,在调用此函数时,必须先把预测样本的数据按图3.4中的固定格式写入内存中。另外,该函数只能预测一个样本的值,本文需要对图像中的所有像数点预测,就要使用for循环反复调用。 该函数返回一个double类型,

9、指明被预测数据属于哪个类。面对两分类问题的时候,通常使用+1代表正样本,即类1;-1代表负样本,即类2。最后根据返回的double值就可以知道预测数据的类别了。 三、 算法源代码及注释说明 1、 需要在工程中添加头文件 svm.h 和源文件svm.cpp 2、 自己编写的源代码(c+实现)(共230行): #include svm.h #include <iostream> #include <list> #include <iterator> #include <vector> #include <string> #include

10、<ctime> using namespace std; #ifdef win32 #pragma warning (disable: 4514 4786) #endif svm_parameter param; svm_problem prob; svm_model *svmmodel; list<svm_node*> xlist; list<double> ylist ; const int max=10; const int ntsttimes=10; vector<int> predictvalue; vector<int>

11、realvalue; int trainnum=0; /设置参数 void setparam() param.svm_type = c_svc; param.kernel_type = rbf; param.degree = 3; param.gamma = 0.5; param.coef0 = 0; param.nu = 0.5; param.cache_size = 40; param.c = 500; param.eps = 1e-3; param.p = 0.1; param.shrinking = 1; / param.probability = 0; param.nr_weight

12、 = 0; param.weight = null; param.weight_label =null; void train(char *filepath) file *fp; int k; int line=0; int temp; if(fp=fopen(filepath,rt)=null) return ; while(1) svm_node* features = new svm_node85+1; for(k=0;k<85;k+) fscanf(fp,%d,&temp); featuresk.index = k + 1; featuresk.value = temp/

13、(max*1.0) ; features85.index = -1; fscanf(fp,%d,&temp); xlist.push_back(features); ylist.push_back(temp); line+; trainnum=line; if(feof(fp) break; setparam(); prob.l=line;篇二:svm分类器-人脸识别专题报告 svm分类器-人脸识别专题报告 摘要:本次试验报告,介绍了人脸识别方法分类器的设计并进行人脸识别。主要是设计svm分类器,并用来进行人脸分类识别,并对分类器实验结果做出分析。实验主要步骤:首先对图像预处理,转换成

14、向量,再通过pca算法对orl人脸数据库图像进行降维特征提取,运用svm工具箱对数据进行训练,再利用svm分类方法对特征向量进行分类识别,寻找和待识别图片最为接近的训练样本第一张图片。最后在matlab上进行实验仿真,分析实验结果。 关键字:最近邻法、pca算法、多类svm、人脸识别 1.引言 人脸识别是模式识别的一个发展方向和重要应用,人脸检测和识别在安全识别、身份鉴定、以及公安部门的稽查活动中有重要作用。本文主要使用pca算法、多类svm训练和svm分类器设计人脸识别算法。从orl人脸图像数据库中,构建自建人脸训练数据库和测试数据库,采用k-l变换进行特征脸提取,并实现人脸识别。通过k-l

15、变换在人脸识别中的应用,加深对所学内容的理解和认识,进一步加深理解模式识别的算法。 2.人脸识别系统 完整的人脸识别系统至少包括两个主要环节。首先在输入图像中找到人脸的位置即人脸检测,将人脸从背景中检测出来;其次,将检测到的人脸图像进行预处理、特征提取和识别。如下图1所示: 图 1 人脸识别系统虽然有诱人的应用前景,但是在现实中却还没有开始大规模的使用。目前,国内外多所大学和研究机构已研制出一些较好的人脸识别原型系统,一些较成熟的商业人脸识别系统也已投入应用,但从技术的角度来看,大样本集、非可控条件下的稳健识别技术仍不成熟,用计算机自动进行人脸的定位和识别十分困难,目前的识别效果(正确率,速度

16、)不如其他的生物识别技术,如指纹识别,视网膜识别等等。人们在日常生活中就进行了大量的人脸定位和识别工作,当然全部是由人的视觉系统和大脑“自动”进行的。目前还不清楚人的视觉系统和大脑的工作原理,因此这项人可以轻而易举完成的任务,牵涉到模式识别、图 象处理及生理、心理学等方面的诸多知识,对于目前还只会死板地执行程序指令的计算机来说却是极端困难。 3.算法简述 3.1 pca算法 3.2 svm算法 支持向量机(support vector machine,svm)是在统计学理论的基础上发展起来的新一代学习算法,它在文本分类、手写识别、图像分类、生物信息学等领域中获得较好的应用。相比于容易过度拟合训

17、练样本的人工神经网络,支持向量机对于未见过的测试样本具有更好的推广能力。 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. 投票过程:如果使用训练集

18、(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)。如有两个以上的最大值,则一般可以简单地取第一个最大值所对应的类别。 4.实验步骤 该实验选取的是orl人脸数据库作为实验样本,总共40个人,实验样

19、本分为训练样本和测试样本。首先设置训练样本集,选择40个人前5张图片作为训练样本,进行训练,并将训练后的数据存放到multisvmtrain.mat中保存。然后设置测试样本集,将40个人后5张图片作为测试样本,进行选取识别。 实验流程图如下: 整个训练过程,包括读入图像,pca降维,以及多类svm训练,实现的关键代码如下: display(读入人脸数据.); imgrow,imgcol,facecontainer,facelabel=readfaces(nfacesperperson,nperson); . display(pca降维.); pcafaces, w = fastpca(face

20、container, 20); % 主成分分析pca % pcafaces是200*20的矩阵, 每一行代表一张主成分脸(共40人,每人5张),每个脸20个维特征 . %数据规格化 display(scaling.); x,a0,b0 = scaling(x); 训练完毕后,将数据保存。 (2)开始识别: 打开一张图片(每个人的后5张中选择),然后对该图片进行pca变换降维,特征提取、规格化,从保存的训练数据库中读取数据,通过svm分类器识别该测试样本的类别,并显示该图片对应人的第一张图片和类别。主要代码如下: % 读入相关训练结果 display(载入训练参数.); load(mat/mul

21、tisvmtrain.mat); xnewface = readaface(newfacepath); % 读入一个测试样本 xnewface = double(xnewface); xnewface = (xnewface-meanvec)*v; % 经过pca变换降维 xnewface = scaling(xnewface,1,a0,b0); xnewface = readaface(newfacepath); % 读入一个测试样本 xnewface = double(xnewface); xnewface = (xnewface-meanvec)*v; % 经过pca变换降维 xnewf

22、ace = scaling(xnewface,1,a0,b0); (3)最后进行测试: 测试是指分类所有的测试样本(40个人的后50张图像,共200个样本),并计算识别率。主要实现代码如下: nfacesperperson = 5; nperson = 40; btest = 1; % 读入测试集合 display(读入测试集合.); imgrow,imgcol,testface,testlabel = readfaces(nfacesperperson, nperson, btest); % 读入相关训练结果 display(载入训练参数.); load(mat/pca.mat); load

23、(mat/scaling.mat); load(mat/traindata.mat); load(mat/multisvmtrain.mat); % pca降维 display(pca降维处理.); m n = size(testface); testface = (testface-repmat(meanvec, m, 1)*v; % 经过pca变换降维 testface = scaling(testface,1,a0,b0); % 多类 svm 分类 display(测试集识别中.); classes = multisvmclassify(testface); display(.); %

24、计算识别率 nerror = sum(classes = testlabel); accuracy = 1 - nerror/length(testlabel); display(对于测试集200个人脸样本的识别率为, num2str(accuracy*100), %); 5.实验仿真 该实验在matlab上进行实验仿真,主要包括样本的训练、保存,打开一张待识别图片,然后调用训练数据库,对该图片进行识别,并显示出该人的第一张图片和该人的类别,以及对全部测试样本进行分类,并计算识别率。 实验仿真结果图如下: 篇三:分享-文本分类实验报告 北京邮电大学 2013-2014学年第1学期实验报告 (代

25、码就不分享了,都是文本格式处理的代 码.欢迎大家批评指正!) 课程名称: 数据仓库与数据挖掘 实验名称:svm文本分类 实验完成人: 姓名:学号: 姓名:学号: 姓名:学号: 日 期: 2013 年11 月 实验一:svm文本分类 1. 实验目的 ? 熟悉爬虫的使用,可以利用网络爬虫抓取所需的网络语料 ? 熟悉中文分词软件,可以熟练使用接口完成分词任务 ? 熟悉文本分类必要的预处理步骤,并运用到实验实践中 ? 熟悉特征提取方法,包括chi-square 和 lda特征提取 ? 了解svm机器学习方法,可以运用开源工具完成文本分类过程 2. 实验分工 xxx: (1) 运用爬虫对语料库新闻的收集

26、 (2) 对数据的预处理工作 (3) 后期的不同对比试验的测试 xxx: (1) 特征的提取 (2) 训练集和测试集的生成 (3) 后期的不同对比试验的测试 3. 实验环境 中文分词与lda特征提取运行环境: (1) java version 1.7 (2) 开发环境:eclipse python代码运行环境: (1)python 3.2 4. 主要设计思想 4.1 实验工具介绍 web crawler:由实验室集体开发的网络爬虫,不对外公开。可以方便的通过正则表达式的配置,轻松的完成对网络数据的提取,并且可以根据需求完成过滤老新闻、不合适的网址格式等功能。最终的爬取结果文件已经经过程序处理,

27、可以直接得到最需要得到的内容。例如:在此实验中,最终的爬取结果即为已经从网站中提取出的新闻标题和正文。 ictclas:全称为汉语词法分析系统。具有简易的图形演示界面,和不同语言的api接口,开发者可以根据自己的需求选择不同的接口。主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;在今年的12月中下旬会发布ictclas2014版本。 lib svm: 是由台湾大学林智仁副教授等开发的一个简单、易于使用和快速有效的svm模式识别与回归的软件包。除了主体训练,测试的程序,还提供了一些使用的工具,例如子集的选择,参数的选择与归一化的操作等实用的方法。 jgibblda: 使

28、用java实现了latent dirichlet allocation(lda),使用了gibbs采样来进行参数估计。 4.2 特征提取与表达方法的设计 在此次实验中,我们采用了两种特征提取的方法。针对不同的方法提取的特征分别作了文本分类实验。所有的特征提取与特征表达的详细步骤会在5.3种进行描述。 chi特征提取: 根据上面的公式,最终建立成了数据字典。 经过chi特征提取建立成数据字典,数据字典如图所示(已经经过了按照字母排序处理): 在每个词的前面是数据字典中,每个词对应的id。 最终的特征向量表达方法为: class_id word_id:tf-idf 第一列class_id为此文本所

29、属的新闻类别,word_id为数据字典中每个词对应的word_id,tf-idf为每篇文档中,对应的tf-idf值。 lda特征提取: lda是主题模型的一种。假设一篇文章可以由不同的主题组成,把每篇文章中的主题分布概率来当作这篇文章的特征,从而形成了特征向量。主题的数量可以由人工根据情况指定或者通过其他方法科学的得到合理也就是概率最大的主题数量,再对其进行人工指定。 经过lda主题模型分析之后,在通过简单的处理,变换成svm可以接受的输入格式,会得到如下的特征向量: 图中的第一列为文本的所属类别。后面的为topic_id:probability。topic_id为相应的主题id,probab

30、ility为这篇文档此主题的分布情况。 两种特征提取的方法,都将会在5.3中进行详细描述。 4.3 分类算法的选择 我们使用的svm(support vector machine)分类算法,是最大margin分类算法中的一种。svm是一种可训练的机器学习方法,在小样本中可以得到优秀的训练模型。 图1 如图中所示,svm分类算法可以根据最边界的样本点,也就是支持向 量,达到二分类的目的。当数据的样本线性不可分时,会通过核函数篇四:模式识别第二次上机实验报告 北京科技大学计算机与通信工程学院 模式分类第二次上机实验报告 姓名:xxxxxx 学号:00000000 班级:电信11 时间:2014-04-16 一、实验目的 1掌握支持向量机(svm)的原理、核函

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

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