SVM实验报告.docx

上传人:b****6 文档编号:6814013 上传时间:2023-01-10 格式:DOCX 页数:17 大小:29.33KB
下载 相关 举报
SVM实验报告.docx_第1页
第1页 / 共17页
SVM实验报告.docx_第2页
第2页 / 共17页
SVM实验报告.docx_第3页
第3页 / 共17页
SVM实验报告.docx_第4页
第4页 / 共17页
SVM实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

SVM实验报告.docx

《SVM实验报告.docx》由会员分享,可在线阅读,更多相关《SVM实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

SVM实验报告.docx

SVM实验报告

svm分类算法

一、数据源说明

1、数据源说远和理解:

ticeval2000.txt:

这个数据集是需要预测(4000个客户记录)的数据集。

它和ticdata2000.txt它具有相同的格式,只是没有最后一列的目标记录。

我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。

共有4003(自己加了三条数据),根据要求,用来做预测。

tictgts2000.txt:

最终的目标评估数据。

这是一个实际情况下的目标数据,将与我们预测的结果进行校验。

我们的预测结果将放在result.txt文件中。

数据集理解:

本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列,可以分为0、1两类。

我们首先需要对ticdata2000.txt进行训练,生成model,再根据model进行预测。

2、数据清理

代码中需要对数据集进行缩放的目的在于:

a、避免一些特征值范围过大而另一些特征值范围过小;

b、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。

因此,通常将数据缩放到[-1,1]或者是[0,1]之间。

二、数据挖掘的算法说明

1、svm算法说明

2、实现过程

在源程序里面,主要由以下2个函数来实现:

(1)structsvm_model*svm_train(conststructsvm_problem*prob,conststructsvm_parameter*param);

该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下:

structsvm_problem//存储本次参加运算的所有样本(数据集),及其所属类别。

{

intn;//记录样本总数

double*y;//指向样本所属类别的数组

structsvm_node**x;//指向一个存储内容为指针的数组

};

其中svm_node的结构体定义如下:

structsvm_node//用来存储输入空间中的单个特征

{

intindex;//输入空间序号,假设输入空间数为m

doublevalue;//该输入空间的值

};

所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下:

图1.1libsvm训练时,样本数据在内存中的存放结构

只需在内存中申请n*(m+1)*sizeof(structsvm_node)大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob参数的设置。

参数param,是svm_parameter数据结构,具体结构定义如下:

structsvm_parameter//训练参数

{

intsvm_type;//svm类型,

intkernel_type;//核函数类型

intdegree;/*forpoly*/

doublegamma;/*forpoly/rbf/sigmoid*/

doublecoef0;/*forpoly/sigmoid*/

/*thesearefortrainingonly*/

doublecache_size;/*inmb制定训练所需要的内存*/

doubleeps;/*stoppingcriteria*/

doublec;/*forc_svc,epsilon_svrandnu_svr,惩罚因子*/

intnr_weight;/*forc_svc权重的数目*/

int*weight_label;/*forc_svc权重,元素个数由nr_weight决定*/double*weight;/*forc_svc*/

doublenu;/*fornu_svc,one_class,andnu_svr*/

doublep;/*forepsilon_svr*/

intshrinking;/*usetheshrinkingheuristics指明训练过程是否使用压缩*/

intprobability;/*doprobabilityestimates指明是否要做概率估计*/}

其中,svm类型和核函数类型如下:

设定完这两个参数,就可以直接在程序中调用训练函数进行训练了,该其函数返回一个structsvm_model*svm模型的指针,可以使用svm_save_model(constchar*model_file_name,conststructsvm_model*model)函数,把这个模型保存在磁盘中。

至此,训练函数的移植已经完成。

(2)doublesvm_predict(conststructsvm_model*model,conststructsvm_node*x);

参数model,是一个svm模型的指针,可以使用函数structsvm_model*svm_load_model(constchar*model_file_name),导入训练时保存好的svm模型,此函数返回一个svm模型的指针,可以直接赋值给变量model。

参数x,是conststructsvm_node结构体的指针,本意是一个输入空间的指针,但实际上,该函数执行的时候,是从参数x处计算输入空间,直到遇到单个样本数据结束标记-1才结束,也就是说,该函数运算了单个样本中的所有输入空间数据。

因此,在调用此函数时,必须先把预测样本的数据按图3.4中的固定格式写入内存中。

另外,该函数只能预测一个样本的值,本文需要对图像中的所有像数点预测,就要使用for循环反复调用。

该函数返回一个double类型,指明被预测数据属于哪个类。

面对两分类问题的时候,通常使用+1代表正样本,即类1;-1代表负样本,即类2。

最后根据返回的double值就可以知道预测数据的类别了。

三、算法源代码及注释说明

1、需要在工程中添加头文件svm.h和源文件svm.cpp

2、自己编写的源代码(c++实现)(共230行):

#includesvm.h

#include<iostream>

#include<list>

#include<iterator>

#include<vector>

#include<string>

#include<ctime>

usingnamespacestd;

#ifdefwin32

#pragmawarning(disable:

45144786)

#endif

svm_parameterparam;

svm_problemprob;

svm_model*svmmodel;

list<svm_node*>xlist;

list<double>ylist;

constintmax=10;

constintntsttimes=10;

vector<int>predictvalue;

vector<int>realvalue;

inttrainnum=0;

//设置参数

voidsetparam()

{

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=0;

param.weight=null;

param.weight_label=null;

}

voidtrain(char*filepath)

{

file*fp;

intk;

intline=0;

inttemp;

if((fp=fopen(filepath,rt))==null)return;

while

(1)

{

svm_node*features=newsvm_node[85+1];

for(k=0;k<85;k++)

{

fscanf(fp,%d,&temp);

features[k].index=k+1;

features[k].value=temp/(max*1.0);}

features[85].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分类器,并用来进行人脸分类识别,并对分类器实验结果做出分析。

实验主要步骤:

首先对图像预处理,转换成向量,再通过pca算法对orl人脸数据库图像进行降维特征提取,运用svm工具箱对数据进行训练,再利用svm分类方法对特征向量进行分类识别,寻找和待识别图片最为接近的训练样本第一张图片。

最后在matlab上进行实验仿真,分析实验结果。

关键字:

最近邻法、pca算法、多类svm、人脸识别

1.引言

人脸识别是模式识别的一个发展方向和重要应用,人脸检测和识别在安全识别、身份鉴定、以及公安部门的稽查活动中有重要作用。

本文主要使用pca算法、多类svm训练和svm分类器设计人脸识别算法。

从orl人脸图像数据库中,构建自建人脸训练数据库和测试数据库,采用k-l变换进行特征脸提取,并实现人脸识别。

通过k-l变换在人脸识别中的应用,加深对所学内容的理解和认识,进一步加深理解模式识别的算法。

2.人脸识别系统

完整的人脸识别系统至少包括两个主要环节。

首先在输入图像中找到人脸的位置即人脸检测,将人脸从背景中检测出来;其次,将检测到的人脸图像进行预处理、特征提取和识别。

如下图1所示:

图1

人脸识别系统虽然有诱人的应用前景,但是在现实中却还没有开始大规模的使用。

目前,国内外多所大学和研究机构已研制出一些较好的人脸识别原型系统,一些较成熟的商业人脸识别系统也已投入应用,但从技术的角度来看,大样本集、非可控条件下的稳健识别技术仍不成熟,用计算机自动进行人脸的定位和识别十分困难,目前的识别效果(正确率,速度)不如其他的生物识别技术,如指纹识别,视网膜识别等等。

人们在日常生活中就进行了大量的人脸定位和识别工作,当然全部是由人的视觉系统和大脑“自动”进行的。

目前还不清楚人的视觉系统和大脑的工作原理,因此这项人可以轻而易举完成的任务,牵涉到模式识别、图

象处理及生理、心理学等方面的诸多知识,对于目前还只会死板地执行程序指令的计算机来说却是极端困难。

3.算法简述

3.1pca算法

3.2svm算法

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

相比于容易过度拟合训练样本的人工神经网络,支持向量机对于未见过的测试样本具有更好的推广能力。

svm是一个二分器,只能用于2类样本的分类,现在我们将它推广到多类问题。

本文是对svm进行推广到能够处理多类问题。

采用一对一的投票策略。

将a、

b、c、d4类样本两类两类的分成训练集,即(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))。

如有两个以上的最大值,则一般可以简单地取第一个最大值所对应的类别。

4.实验步骤

该实验选取的是orl人脸数据库作为实验样本,总共40个人,实验样本分为训练样本和测试样本。

首先设置训练样本集,选择40个人前5张图片作为训练样本,进行训练,并将训练后的数据存放到multisvmtrain.mat中保存。

然后设置测试样本集,将40个人后5张图片作为测试样本,进行选取识别。

实验流程图如下:

整个训练过程,包括读入图像,pca降维,以及多类svm训练,实现的关键代码如下:

display(读入人脸数据...);

[imgrow,imgcol,facecontainer,facelabel]=readfaces(nfacesperperson,nperson);...

display(pca降维...);

[pcafaces,w]=fastpca(facecontainer,20);%主成分分析pca

%pcafaces是200*20的矩阵,每一行代表一张主成分脸(共40人,每人5张),每个脸20个维特征

...

%数据规格化

display(scaling...);

[x,a0,b0]=scaling(x);

训练完毕后,将数据保存。

(2)开始识别:

打开一张图片(每个人的后5张中选择),然后对该图片进行pca变换降维,特征提取、规格化,从保存的训练数据库中读取数据,通过svm分类器识别该测试样本的类别,并显示该图片对应人的第一张图片和类别。

主要代码如下:

%读入相关训练结果

display(载入训练参数...);

load(mat/multisvmtrain.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变换降维

xnewface=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(mat/scaling.mat);

load(mat/traindata.mat);

load(mat/multisvmtrain.mat);

%pca降维

display(pca降维处理...);

[mn]=size(testface);

testface=(testface-repmat(meanvec,m,1))*v;%经过pca变换降维testface=scaling(testface,1,a0,b0);

%多类svm分类

display(测试集识别中...);

classes=multisvmclassify(testface);

display(..............................);

%计算识别率

nerror=sum(classes~=testlabel);

accuracy=1-nerror/length(testlabel);

display([对于测试集200个人脸样本的识别率为,num2str(accuracy*100),%]);

5.实验仿真

该实验在matlab上进行实验仿真,主要包括样本的训练、保存,打开一张待识别图片,然后调用训练数据库,对该图片进行识别,并显示出该人的第一张图片和该人的类别,以及对全部测试样本进行分类,并计算识别率。

实验仿真结果图如下:

篇三:

分享-文本分类实验报告

北京邮电大学2013-2014学年第1学期实验报告

(代码就不分享了,都是文本格式处理的代

码.欢迎大家批评指正!

课程名称:

数据仓库与数据挖掘

实验名称:

svm文本分类

实验完成人:

姓名:

学号:

姓名:

学号:

姓名:

学号:

日期:

2013年11月

实验一:

svm文本分类

1.实验目的

?

熟悉爬虫的使用,可以利用网络爬虫抓取所需的网络语料?

熟悉中文分词软件,可以熟练使用接口完成分词任务?

熟悉文本分类必要的预处理步骤,并运用到实验实践中?

熟悉特征提取方法,包括chi-square和lda特征提取

?

了解svm机器学习方法,可以运用开源工具完成文本分类过程

2.实验分工

xxx:

(1)运用爬虫对语料库新闻的收集

(2)对数据的预处理工作

(3)后期的不同对比试验的测试

xxx:

(1)特征的提取

(2)训练集和测试集的生成

(3)后期的不同对比试验的测试

3.实验环境

中文分词与lda特征提取运行环境:

(1)javaversion1.7

(2)开发环境:

eclipse

python代码运行环境:

(1)python3.2

4.主要设计思想

4.1实验工具介绍

webcrawler:

由实验室集体开发的网络爬虫,不对外公开。

可以方便的通过正则表达式的配置,轻松的完成对网络数据的提取,并且可以根据需求完成过滤老新闻、不合适的网址格式等功能。

最终的爬取结果文件已经经过程序处理,可以直接得到最需要得到的内容。

例如:

在此实验中,最终的爬取结果即为已经从网站中提取出的新闻标题和正文。

ictclas:

全称为汉语词法分析系统。

具有简易的图形演示界面,和不同语言的api接口,开发者可以根据自己的需求选择不同的接口。

主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;在今年的12月中下旬会发布ictclas2014版本。

libsvm:

是由台湾大学林智仁副教授等开发的一个简单、易于使用和快速有效的svm模式识别与回归的软件包。

除了主体训练,测试的程序,还提供了一些使用的工具,例如子集的选择,参数的选择与归一化的操作等实用的方法。

jgibblda:

使用java实现了latentdirichletallocation(lda),使用了gibbs采样来进行参数估计。

4.2特征提取与表达方法的设计

在此次实验中,我们采用了两种特征提取的方法。

针对不同的方法提取的特征分别作了文本分类实验。

所有的特征提取与特征表达的详细步骤会在5.3种进行描述。

chi特征提取:

根据上面的公式,最终建立成了数据字典。

经过chi特征提取建立成数据字典,数据字典如图所示(已经经过了按照字母排序处理):

在每个词的前面是数据字典中,每个词对应的id。

最终的特征向量表达方法为:

class_idword_id:

tf-idf……

第一列class_id为此文本所属的新闻类别,word_id为数据字典中每个词对应的word_id,tf-idf为每篇文档中,对应的tf-idf值。

lda特征提取:

lda是主题模型的一种。

假设一篇文章可以由不同的主题组成,把每篇文章中的主题分布概率来当作这篇文章的特征,从而形成了特征向量。

主题的数量可以由人工根据情况指定或者通过其他方法科学的得到合理也就是概率最大的主题数量,再对其进行人工指定。

经过lda主题模型分析之后,在通过简单的处理,变换成svm可以接受的输入格式,会得到如下的特征向量:

图中的第一列为文本的所属类别。

后面的为topic_id:

probability。

topic_id为相应的主题id,probability为这篇文档此主题的分布情况。

两种特征提取的方法,都将会在5.3中进行详细描述。

4.3分类算法的选择

我们使用的svm(supportvectormachine)分类算法,是最大margin分类算法中的一种。

svm是一种可训练的机器学习方法,在小样本中可以得到优秀的训练模型。

图1

如图中所示,svm分类算法可以根据最边界的样本点,也就是支持向

量,达到二分类的目的。

当数据的样本线性不可分时,会通过核函数篇四:

模式识别第二次上机实验报告

北京科技大学计算机与通信工程学院

模式分类第二次上机实验报告

姓名:

xxxxxx

学号:

00000000

班级:

电信11

时间:

2014-04-16

一、实验目的

1.掌握支持向量机(svm)的原理、核函

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

当前位置:首页 > 医药卫生 > 预防医学

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

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