[fb0f3a]: / predictFunc_svm.m

Download this file

41 lines (39 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
%********** 基于5折交叉验证及SVM分类器的预测函数用于预测精度 **********%
%**********Date2017.04.12 Group:DataMing No.5**********%
function Acc = predictFunc_svm( Pdata, Ndata, data_atrr)
Pnum=size(Pdata,1);
Nnum=size(Ndata,1);
indicesP =crossvalind('Kfold',Pnum,5); %5折交叉验证的正指数
indicesN =crossvalind('Kfold',Nnum,5); %5折交叉验证的负指数
Acc=[];
%% 进行K折交叉验证(K=5)
for i=1:5
Ptest = (indicesP == i);
Ptrain = ~Ptest;
Ntest = (indicesN == i);
Ntrain = ~Ntest;
Ztrain=[Ptrain;Ntrain];
Ztest=[Ptest;Ntest];
%% 选出数据集训练属性和测试属性
train_attr =data_atrr(Ztrain==1,:); %训练属性
test_attr =data_atrr(Ztrain==0,:); %测试属性
%% 训练集和测试集中的正样本
Ptrain_data=Pdata(Ptrain==1);
Ptest_data=Pdata(Ptrain==0);
%% 训练集和测试集中的负样本
Ntrain_data =Ndata(Ntrain==1);
Ntest_data =Ndata(Ntrain==0);
%% 训练集的标签
train_label = vertcat( Ptrain_data, Ntrain_data);
%% 测试集的标签
test_label = vertcat( Ptest_data, Ntest_data);
%% 通过SVM构建的预测器训练集训练模型
model = svmtrain(train_label,sparse(train_attr),'-h 0');
%% 通过SVM构建的预测器测试集预测精度
[~,acc,~]=svmpredict(test_label,sparse(test_attr),model);
%predicted_label, accuracy/mse, decision_values]=svmpredict(test_label,test_matrix, model, ['libsvm_options']);
%accuracy/mse是一个3*1的列向量其中第1个数字用于分类问题表示分类准确率
%后两个数字用于回归问题第2个数字表示mse第三个数字表示平方相关系数
Acc=[Acc,acc(1,1)];%取出分类预测精度结果5折计算累积得到一个1*5的矩阵
end
end