1、人工智能实验报告实验四:支持向量机班级 姓名 学号 指导老师 一 实验目的1.了解基有关支持向量机的基本原理2.能够使用支持向量机的代码解决分类与回归问题3.了解图像分类的基本原理二、实验的硬件、软件平台硬件:计算机软件:操作系统win10应用软件:Java三、 实验原理1.LIBSVM使用方法简介LibSVM是以源代码和可执行文件两种方式给出的。如果是Windows系列操作系统,可以直接使用软件包提供的程序,也可以进行修改编译;如果是Unix类系统,必须自己编译。LIBSVM在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根
2、据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩放操作的svmscale.exe。它们都可以直接在DOS环境中使用。如果下载的包中只有C+的源代码,则也可以自己在VC等软件上编译生成可执行文件。2.LIBSVM使用的一般步骤是:1)按照LIBSVM软件包所要求的格式准备数据集;2)对数据进行简单的缩放操作;3)考虑选用RBF核函数;4)采用交叉验证选择最佳参数C与g;5)采用最佳参数C与g对整个训练集进行训练获取支持向量机模型;6)利用获取的模型进行测试与预测。3.LIBSVM使用的数据格式1)训练数据和检验数据文件格式如下::.其中是
3、训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。是以1开始的整数,可以是不连续的;为实数,也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差,如果它是未知的,只需用一个数填写这一栏,也可以空着不填。在程序包中,还包括有一个训练数据实例:heart_scale,方便参考数据文件格式以及练习使用软件。可以编写小程序,将自己常用的数据格式转换成这种格式2)Svmtrain和Svmpredict的用法LIBSVM软件提供的各种功能都是DOS命令执行方式。我们主要用到两个程序,svmtrain(训练建模)和svmpredict(使用已有的模型进
4、行预测),下面分别对这两个程序的使用方法、各参数的意义以及设置方法做一个简单介绍:(1)Svmtrain的用法:svmtrainoptionstraining_set_filemodel_fileOptions:可用的选项即表示的涵义如下-ssvm类型:SVM设置类型(默认0)0-C-SVC1-v-SVC2一类SVM3-e-SVR4-v-SVR-t核函数类型:核函数设置类型(默认2)0线性:uv1多项式:(r*uv+coef0)degree2RBF函数:exp(-r|u-v|2)3sigmoid:tanh(r*uv+coef0)-ddegree:核函数中的degree设置(默认3)-g函数设置
5、(默认1/k)?r(gama):核函数中的-rcoef0:核函数中的coef0设置(默认0)?-ccost:设置C-SVC,-SVR的参数(默认1)?-SVR和-SVR的参数(默认0.5)?-SVC,一类SVM和?-nnu:设置-SVR?-pe:设置的值(默认0.1)?中损失函数-mcachesize:设置cache内存大小,以MB为单位(默认40)-e:设置允许的终止判据(默认0.001)?-hshrinking:是否使用启发式,0或1(默认1)-wiC(C-SVC中的C)(默认1)?weight:设置第几类的参数C为weight-vn:n-fold交互检验模式其中-g选项中的k是指输入数据
6、中的属性数。option-v随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,文件中包括支持向量样本数、支持向量样本以及lagrange系数等必须的参数;该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。(2)Svmpredict的用法:svmpredicttest_filemode
7、l_fileoutput_filemodel_file是由svmtrain产生的模型文件;test_file是要进行预测的数据文件;Output_file是svmpredict的输出文件。svm-predict没有其它的选项。四、实验内容及步骤支持向量机算法训练分类器:1.训练数据集:见文档“分类数据集.doc”,前150个数据作为训练数据,其他数据作为测试数据,数据中“+1”“-1”分别表示正负样本。2.使用代码中的C-SVC算法和默认参数来训练“分类数据集.doc”中所有的数据(包括训练数据和测试数据),统计分类查准率。3.在2的基础上使用k-折交叉验证思想来训练分类器并统计分类查准率。.
8、 .4.使用2中的设置在训练数据的基础上学习分类器,将得到的分类器在测试数据上进行分类预测,统计查准率。5.在4上尝试不同的C值(“-c”参数)来调节分类器的性能并绘制查准率曲线。6.尝试不同的kernel函数(“-t”参数)来调节分类器的性能并绘制查准率曲线,对每种kernel函数尝试调节其参数值并评估查准率。支持向量机算法训练回归方程:(1).回归数据集:见文档“回归数据集.doc”,总共506个数据,数据中前13个属性作为输入,最后一个属性作为输出。(2).使用代码中的epsilon-SVR算法和默认参数来训练“回归数据集.doc”中所有的数据,统计回归方程在每个数据点输出的误差并进行误
9、差分析。(3).在2上尝试不同的epsilon值(“-p”参数)来调节epsilon-SVR算法的性能。五、思考题:1.阐述k-折交叉验证的思想,比较1.2和1.3的性能。答:k-折交叉验证(k-fold crossValidation)就是在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。1.3比1.2的性能好。2. 在1.5中的C值代表的含义是什么?答:C是惩罚系数,就是说你对误差的宽容度,这个值
10、越高,说明你越不能容忍出现误差。3.阐述kernel函数的作用和原理,在1.6中通过引入不同的kernel函数对于算法性能的提升有影响吗?答:核函数目的:把原坐标系里线性不可分的数据用Kernel投影到另一个空间,尽量使得数据在新的空间里线性可分。1)核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。2)无需知道非线性变换函数的形式和参数.3)核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。4)核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。会产生影响。4.阐述回归问题和分类问题的不同之处。答:分类和回归的区别在于输出变量的类型。回归问题和分类问题的本质一样,不同仅在于他们的输出的取值范围不同。分类问题中,输出只允许取两个值;而在回归问题中,输出可取任意实数。六、实验心得此次实验虽然按部就班做完了。不过最后还是掌握到有关支持向量机的基本原理,实践了支持向量机的代码解决分类与回归问题。初步了解了图像分类的基本原理,颇有收获。