1、TICEVAL201X.txt: 这个数据集是需要预测( 4000个客户记录)的数据集。它和TICDATA201X.txt它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。共有4003(自己加了三条数据),根据要求,用来做预测。TICTGTS201X.txt:最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预测的结果进行校验。我们的预测结果将放在result.txt文件中。数据集理解:本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列,可以分为0、1两类。我们首先需要对TICDATA201X.txt进行训练,生成
2、model,再根据model进行预测。2、 数据清理代码中需要对数据集进行缩放的目的在于:A、避免一些特征值范围过大而另一些特征值范围过小;B、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到 -1,1 或者是 0,1 之间。二、 数据挖掘的算法说明1、 svm算法说明LIBSVM软件包是台湾大学林智仁(Chih-Jen Lin)博士等用C+实现的SVM库,并且拥有matlab,perl等工具箱或者代码,移植和使用都比较方便.它可以解决分类问题(包括C-SVC、n-SVC)、回归问题(包括e-SVR、n-SVR)以及分布估计(one-class-SVM )等
3、问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。2、 实现过程在源程序里面,主要由以下2个函数来实现:(1) struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下: struct svm_problem /存储本次参加运算的所有样本(数据集),及其所属类别。 int n; /记录
4、样本总数double *y; /指向样本所属类别的数组struct svm_node *x; /指向一个存储内容为指针的数组;其中svm_node的结构体定义如下:struct svm_node /用来存储输入空间中的单个特征int index; /输入空间序号,假设输入空间数为mdouble value; /该输入空间的值所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下:图1.1LIBSVM训练时,样本数据在内存中的存放结构只需在内存中申请n*(m+1)*sizeof(struct svm_node)大小的空间,并在里面填入每个样本的每个输入空间的
5、值,即可在程序中完成prob参数的设置。 参数param,是svm_parameter数据结构,具体结构定义如下:struct svm_parameter / 训练参数int svm_type; /SVM类型,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 制定训练所需要的内存
6、*/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 shrinki
7、ng; /* use the shrinking heuristics 指明训练过程是否使用压缩*/int probability; /* do probability estimates 指明是否要做概率估计*/ 其中,SVM类型和核函数类型如下:enum C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR ; /* svm_type */ enum LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED ; /* kernel_type */ 只需申请一个svm_parameter结构体,并按实际需要设定SVM类型、核函数和各
8、种参数的值即可完成参数param的设置。设定完这两个参数,就可以直接在程序中调用训练函数进行训练了,该其函数返回一个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模型的指针,可以使用函数s
9、truct svm_model *svm_load_model(const char *model_file_name),导入训练时保存好的SVM模型,此函数返回一个SVM模型的指针,可以直接赋值给变量model。参数x,是const struct svm_node结构体的指针,本意是一个输入空间的指针,但实际上,该函数执行的时候,是从参数x处计算输入空间,直到遇到单个样本数据结束标记-1才结束,也就是说,该函数运算了单个样本中的所有输入空间数据。因此,在调用此函数时,必须先把预测样本的数据按图3.4中的固定格式写入内存中。另外,该函数只能预测一个样本的值,本文需要对图像中的所有像数点预测,就
10、要使用for循环反复调用。该函数返回一个double类型,指明被预测数据属于哪个类。面对两分类问题的时候,通常使用+1代表正样本,即类1;-1代表负样本,即类2。最后根据返回的double值就可以知道预测数据的类别了。三、 算法源代码及注释说明1、 需要在工程中添加头文件 svm.h 和源文件svm.cpp2、 自己编写的源代码(C+实现)(共230行):#include svm.h#include listiteratorvectorstringctimeusing namespace std;#ifdef WIN32#pragma warning (disable: 4514 4786)#
11、endifsvm_parameter param;svm_problem prob;svm_model *svmModel;list xList;double yList ;const int MAX=10;const int nTstTimes=10;vector predictvalue; 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
12、= 0.5;param.cache_size = 40;param.C = 500;param.eps = 1e-3;param.p = 0.1;param.shrinking = 1;/ param.probability = 0;param._weight = 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* fea
13、tures = new svm_node85+1;for(k=0;k85;k+)fscanf(fp,%d,&temp);featuresk.index = k + 1;featuresk.value = temp/(MAX*1.0) ;features85.index = -1;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.引言人脸识别是模式识别的一