MATLAB环境下用SVM对数据进行2-折分类

来源:互联网 发布:ods有什么软件 编辑:程序博客网 时间:2024/06/01 09:06

数据挖掘作业在MATLAB环境用SVM对数据进行2-折交叉验证(two-fold cross validation ),其实2-折交叉验证就是先把数据分为训练和测试两类,一般都是平均分成两组,先用训练数据训练一个model然后用测试数据去预测,例外用测试数据训练另一个model,然后用训练数据去预测,对得出来的两个预测结果求平均值,就是所要求的2-折交叉验证的正确率。
1. 数据预处理:
1>数据清洗,去点数据中属性值为空或者出错的列。
2>把原始数据按行进行随机打乱,这样可以提高训练出model的泛化能力。
3>对数据进行归一化处理。
2.将数据导入MATLAB,并分成两组:
将实验数据导入到MATLAB中并且保存为.m格式的文件,可以用函数

Data(1:size(TData,1),:)=TData(randperm(size(TData,1))',:)

对数据集按行打乱,然后用mapminmax()函数进行数据归一化。

TrainData=mapminmax(TrainData);TestData=mapminmax(TestData);

3.SVMcgForClass()参数的确定:

[bestCVaccuracy,bestc,bestg]=SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

Input:
train_label:训练集的标签,格式要求与svmtrain相同。
train:训练集,格式要求与svmtrain相同。
cmin,cmax:惩罚参数c的变化范围,即在[2^cmin,2^cmax]范围内寻找 最佳的参数c,默认值为cmin=-8,cmax=8,即默认惩罚参数c的范围是 [2^(-8),2^8]。
gmin,gmax:RBF核参数g的变化范围,即在[2^gmin,2^gmax]范围内寻找最佳的RBF核参数g,默认值为gmin=-8,gmax=8,即默认RBF核参数g的范围是[2^(-8),2^8]。
v:进行Cross Validation过程中的参数,即对训练集进行v-fold Cross Validation,默认为3,即默认进行3折CV过程。
cstep,gstep:进行参数寻优是c和g的步进大小,即c的取值为2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值为2^gmin,2^(gmin+gstep),…,2^gmax,默认取值为cstep=1,gstep=1。
accstep:最后参数选择结果图中准确率离散化显示的步进间隔大小([0,100]之间的一个数),默认为4.5。
Output:
bestCVaccuracy:最终CV意义下的最佳分类准确率。
bestc:最佳的参数c。
bestg:最佳的参数g。
确定参数的范围是先粗略搜索,通过观察得出的准确率图在进行精细搜索。PS:这里先用的c[-10 ,10],g[-10,10]
4.svmtrain()参数的设置:

cmd = [' -c ',num2str(bestc),' -g ',num2str(bestg)];model=svmtrain(Train_label,TrainData,cmd);

-s svm类型:SVM设置类型(默认0)
0 – C-SVC
1 –v-SVC
2 –一类SVM
3 – e -SVR
4 – v-SVR
-t 核函数类型:核函数设置类型(默认2)
0 –线性:u’v
1 –多项式:(r*u’v + coef0)^degree
2 – RBF函数:exp(-gamma|u-v|^2)
3 –sigmoid:tanh(r*u’v + coef0)
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
-p p:设置e -SVR 中损失函数p的值(默认0.1)
-m cachesize:设置cache内存大小,以MB为单位(默认40)
-e eps:设置允许的终止判据(默认0.001)
-h shrinking:是否使用启发式,0或1(默认1)
-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
  其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部
  我这里svm类型,核函数类型都是采用默认的。

[predict_label_1,accurancy_1,prob_estimates_1] = svmpredict(Test_label,TestData,model);

5.实验结果:
实验结果
参数选择结果图
参数选择结果视图(3D)
以上是内容仅供参考,本人数据挖掘菜鸟如有错误或遗漏欢迎随时指出,谢谢
6.参考:
http://www.ilovematlab.cn/thread-47819-1-1.html
源代码及实验数据和要求:
[http://download.csdn.net/detail/baidu_36416285/9821474?locationNum=2&fps=1]

2 0