svm算法实验实验报告_第1页
svm算法实验实验报告_第2页
svm算法实验实验报告_第3页
svm算法实验实验报告_第4页
svm算法实验实验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 / 21 svm 算法实验实验报告 SVM分类算法 一、 数据源说明 1、 数据源说远和理解: 采用的实验数据源为第 6组: The Insurance Company Benchmark : 这个数据集用来训练和检验预测模型,并且建立了一个 5822个客户的记录的描述。每个记录由 86个属性组成,包含社会人口数据和产品的所有关系。社会人口数据是由派生邮政编码派生而来的,生活在具有相同邮政编码地区的所有客户都具有相同的社会人口属性。第 86个属性:“大篷车:家庭移动政策” ,是我 们的目标变量。共有 5822条记录,根据要求,全部用来训练。 : 这个数据集是需要预测的数据集。它和它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。共有4003,根据要求,用来做预测。 :最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预测的结果进行校验。我们的预测结果将放在文件中。 数据集理解:本实验任务可以理解为分类问题,即分为 2类,也就是数据源的第 86列,可以分为 0、 1 两类。我们首先需要对进行训练 ,生成 model,再根据 model 进行2 / 21 预测。 2、 数据清理 代码中需要对数据集进行缩放的目的在于: A、避免一些特征值范围过大而另一些特征值范围过小; B、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到 -1,1 或者是 0,1 之间。 二、 数据挖掘的算法说明 1、 svm算法说明 LIBSVM 软件包是台湾大学林智仁博士等用 C+实现的 SVM 库,并且拥有 matlab,perl 等工具箱或者代码 ,移植和使用都比较方便 .它可以解决分类问题、回归问题以及分布估计等问题,提供了线性、多项式、径向基和 S 形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。 2、 实现过程 在源程序里面,主要由以下 2 个函数来实现: struct svm_model *svm_train; 该函数用来做训练,参数 prob,是 svm_problem 类型数据,具体结构定义如下: struct svm_problem /存储本次参加运算的所有样本,及其所属类别。 3 / 21 int n; /记录样本总数 double *y; /指向样本所属类别的数组 struct svm_node *x; /指向一个存储内容为指针的数组 ; 其中 svm_node 的结构体定义如下: struct svm_node /用来存储输入空间中的单个特征 int index; /输入空间序号,假设输入空间数为 m double value; /该输入空间的值 ; 所以, prob 也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下: 图训练时,样本数据在内存中的存放结构 只需在内存中申请 n*sizeof 大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob 参数的设置。 参数 param,是 svm_parameter 数据结构,具体结构定义如下: struct svm_parameter / 训练参数 int svm_type; /SVM 类型, 4 / 21 int kernel_type; /核函数类型 int degree; /* for poly */ double 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 _weight; /* for C_SVC 权重的数目 */ int *weight_label; /* for C_SVC 权重,元素个数由 _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 类型和核函数类型如下: enum C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, 5 / 21 NU_SVR ; /* svm_type */ enum LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED ; /* kernel_type */ 只需申请一个 svm_parameter 结构体,并按实际需要设定 SVM 类型、核函数和各种参数的值即可完成参数 param 的设置。 设定完这两个参数,就可以直接在程序中调用训练函数进行训练了,该其函数返回一个 struct svm_model *SVM模型的指针,可以使用 svm_save_model 函数,把这个模型保存在磁盘中。至此,训练函数的移植已经完成。 double svm_predict; 参数 model,是一个 SVM模型的指针,可以使用函数struct svm_model *svm_load_model,导入训练时保存好的SVM 模型,此函数返回一个 SVM 模型的指针,可以直接赋值给变量 model。 参数 x,是 const struct svm_node 结构体的指针,本意是一个输入空间的指针,但实际 上,该函数执行的时候,是从参数 x处计算输入空间,直到遇到单个样本数据结束标记 -1才结束,也就是说,该函数运算了单个样本中的所有输入空间数据。因此,在调用此函数时,必须先把预测样本的数据按图中的固定格式写入内存中。另外,该函数只能预测一个样本的值,本文需要对图像中的所有像数点预测,就要使用 for 循环反复调用。 该函数返回一个 double类型,指明被预测数据属于6 / 21 哪个类。面对两分类问题的时候,通常使用 +1代表正样本,即类 1; -1代表负样本,即类 2。最后根据返回的 double 值就可以知道预测数据的类别了 。 三、 算法源代码及注释说明 1、 需要在工程中添加头文件 和源文件 2、 自己编写的源代码: #include #include #include #include #include #include #include using namespace std; #ifdef WIN32 #pragma warning #endif svm_parameter param; svm_problem prob; svm_model *svmModel; list xList; list yList ; 7 / 21 const int MAX=10; const int nTstTimes=10; vector predictvalue; vector realvalue; int trainNum=0; /设置参数 void setParam _type = C_SVC; _type = RBF; = 3; = ; = 0; = ; _size = 40; = 500; = 1e-3; = ; = 1; / = 0; param._weight = 0; = NULL; 8 / 21 _label =NULL; void train FILE *fp; int k; int line=0; int temp; if)=NULL)return ; while svm_node* features = new svm_node85+1; for fscanf; featuresk.index = k + 1; featuresk.value = temp/ ; features85.index = -1; fscanf; _back; _back; line+; 9 / 21 trainNum=line; if) break; setParam; =line; 人工智能课程项目报告 姓名:班级: * * 目录 一、实验背景 . 1 二、实验目的 . 1 三、实验原理 . 1 线性可10 / 21 分: . 1 线性不可分: . 4 坐标上升法: . 7 SMO 算法: . 8 四、实验内容 . 10 五、实验结果与分析 .11 / 21 . 12 实 验 环 境 与 工具 . 12 实 验 数 据 集 与 参 数 设置 . 12 评 估 标准 . 13 实 验 结 果 与 分析 . 13 一、实验背景 本学期学习了高级人工智能课程,对人工智能的各方面知识有了新的认识和了解。为了更好的深入学习人工智能的相关知识,决定以数据挖掘与机器学习的基础算法为研究对象,进行算法的研究与实现。 12 / 21 在数据挖掘的各种算法中,有一种分类算法的分类效果,在大多数情况下都非常的好,它就是支持向量机算法。这种算法的理论基础强,有着严格的推导论证,是研究和学习数据挖掘算法的很好的切入点。 二、实 验目的 对 SVM 算法进行研究与实现,掌握理论推导过程,培养严谨治学的科研态度。 三、实验原理 支持向量机基本上是最好的有监督学习算法。 SVM由Vapnik 首先提出。它的主要思想是建立一个超平面作为决策曲面 ,使得正例和反例之间的隔离边缘被最大化。 SVM的优点 : 1.通用性 2.鲁棒性 3.有效性 4.计算简单 5.理论上完善 线性可分: 首先讨论线性可分的情况,线性不可分可以通 过数学的手段变成近似线性可分。基本模型: 1 这里的裕量是几何间隔。 13 / 21 我们的目标是最大化几何间隔,但是看过一些关于SVM 的论文的人一定记得什么优化的目标是要最小化 |w|这样的说法,这是怎么回事呢? 原因来自于对间隔和几何间隔的定义: 间隔: =y=|g| 几何间隔: |w|叫做向量 w 的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的 2-范数,范数最一般的表示形式为 p-范数,可以写成 2 如下表达式: 另外,注意我们的目标:最大化几何间隔,而不是求出这个间隔。即,在什么情况下间隔最大,我们要得到的是这个“情况” 所以,我们可以把目标转换: = = 在这个问题中,自变量就是 w,而目标函数是 w 的二次函数,所有的约束条件都是 w的线性函数 这种规划问题有个很有名气的称呼 二次规划,而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个凸二次规划。拉格朗日乘子法可以求解这个问题。 问题 1: 实际上就是目标函数减去, ai 乘上约束条件的累加和。 将问题转化为拉格朗日乘子待定问题。 14 / 21 经过数学计算,可以发现:样本确定了 w,用数学的语言描述,就是 w 可以表示为样本的某种组合: w= 1y1x1+ 2y2x2+?+ nynxn 式子中的 i 是一个一个的数,而 xi 是样本点,因而是向量, n就是总样本点的个数。 w的表达式可以简写如下: 3 SVM分类器 -人脸识别专题报告 摘要:本次试验报告,介绍了人脸识别方法分类器的设计并进行人脸识别。主要是设计 SVM 分 类器,并用来进行人脸分类识别,并对分类器实验结果做出分析。实验主要步骤:首先对图像预处理,转换成向量,再通过 PCA 算法对ORL 人脸数据库图像进行降维特征提取,运用 SVM 工具箱对数据进行训练,再利用 SVM分类方法对特征向量进行分类识别,寻找和待识别图片最为接近的训练样本第一张图片。最后在 matlab 上进行实验仿真,分析实验结果。 关键字:最近邻法、 PCA算法、多类 SVM、人脸识别 1.引言 人脸识别是模式识别的一个发展方向和重要应用,人脸检测和识别在安全识别、身份鉴定、以及 公安部门的稽查活动中有重要作用。本文主要使用 PCA 算法、多类 SVM 训练和 SVM 分类器设计人脸识别算法。从 ORL人脸图像数据库15 / 21 中,构建自建人脸训练数据库和测试数据库,采用 K-L变换进行特征脸提取,并实现人脸识别。通过 K-L变换在人脸识别中的应用,加深对所学内容的理解和认识,进一步加深理解模式识别的算法。 2.人脸识别系统 完整的人脸识别系统至少包括两个主要环节。首先在输入图像中找到人脸的位置即人脸检测,将人脸从背景中检测出来;其次,将检测到的人脸图像进行预处理、特征提取和识别。如下图 1 所示: 图 1 人脸识别系统虽然有诱人的应用前景,但是在现实中却还没有开始大规模的使用。目前,国内外多所大学和研究机构已研制出一些较好的人脸识别原型系统,一些较成熟的商业人脸识别系统也已投入应用,但从技术的角度来看,大样本集、非可控条件下的稳健识别技术仍不成熟,用计算机自动进行人脸的定位和识别十分困难,目前的识别效果不如其他的生物识别技术,如指纹识别,视网膜识别等等。人们在日常生活中就进行了大量的人脸定位和识别工作,当然全部是由人的视觉系统和大脑“自动”进行的。目前还不清楚人的视觉系 统和大脑的工作原理,因此这项人可以轻而易举完成的任务,牵涉到模式识别、图 象处理及生理、心理学等方面的诸多知识,对于目前16 / 21 还只会死板地执行程序指令的计算机来说却是极端困难。 3.算法简述 PCA算法 主成分分析是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高纬数据投影到较低维空间。给定 n个变量的 m 个观察值,形成一个 n*m的数据矩阵, n 通常比较大。对于一个由多个变量描述的复杂事物,认 识难度会很大,于是我们可以抓住事物主要方面进行重点分析,如果事物的主要方面刚好体现在几个主要变量上,那么我们只需要将体现事物主要方面的较少的几个主要变量分离出来,对此进行详细分析。但是,在一般情况下,并不能直接找出这样的关键变量。这时我们可以用原有变量的线性组合来表示事物的主要方面, PCA 就是这样一种分析方法。 SVM算法 支持向量机是在统计学理论的基础上发展起来的新一代学习算法,它在文本分类、手写识别、图像分类、生物信息学等领域中获得较好的应用。相比于容易过度拟合训练样本的人工神 经网络,支持向量机对于未见过的测试样本具有更好的推广能力。 SVM是一个二分器,只能用于 2类样本的分类,现在17 / 21 我们将它推广到多类问题。本文是对 SVM 进行推广到能够处理多类问题。采用一对一的投票策略。将 A、 B、 C、 D 4 类样本两类两类的分成训练集,即、 ,得到 6 个 SVM二分器。在测试的时候,把测试样本 x 依次送入这 6个二分器,采取投票形式,最后得到一组结果。投票是以如下方式进行。 初始化: vote=vote=vote=vote=0. 投票过程:如果使用训练集 得到的分类器将 x 判定为 A 类,则 vote=vote+1,否则 vote=vote+1;如果使用训练的分类器将 x 判定为 A 类,则 vote=vote+1,否则vote=vote+1; .;如果使用训练的分类器将 x判定为 C类,则 vote=vote+1,否则 vote=vote+1。 最终判决: Max,vote,vote,vote)。如有两个以上的最大值,则一般可以简单地取第一个最大值所对应的类别。 4.实验步骤 该实验选取的是 ORL人脸数据库作为实验样本,总共40个人,实验样本分为 训练样本和测试样本。首先设置训练样本集,选择 40个人前 5 张图片作为训练样本,进行训练,并将训练后的数据存放到中保存。然后设置测试样本集,将40个人后 5张图片作为测试样本,进行选取识别。 实验流程图如下: 整个训练过程,包括读入图像, PCA 降维,以及多类18 / 21 SVM训练,实现的关键代码如下: display; imgRow,imgCol,FaceContainer,faceLabel=ReadFaces; . display; pcaFaces, W = fastPCA; % 主成分分析 PCA % pcaFaces是 200*20的矩阵 , 每一行代表一张主成分脸,每个脸 20个维特征 . %数据规格化 display; X,A0,B0 = scaling; 训练完毕后,将数据保存。 开始识别: 打开一张图片,然后对该图片进行 PCA 变换降维,特征提取、规格化,从保存的训练数据库中读取数据,通过SVM 分类器识别该测试样本的类别,并显示该图片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论