cmd=[′-c′,num2str(bestc),′-g′,num2str(bestg)];
model=svmtrain(train_wine_labels,train_wine,cmd);
%SVM網絡預測
[predict_label,accuracy]=svmpredict(test_wine_labels,test_wine,model);
%打印測試集分類準確率
total=length(test_wine_labels);
right=sum(predict_label=test_wine_labels);
disp(′打印測試集分類準確率′);
str=sprintf(′Accuracy=%g%%(%d/%d)′,accuracy(1),right,total);
disp(str);
%%結果分析
%測試集的實際分類和預測分類圖
figure;
hold on;
plot(test_wine_labels,′o′);
plot(predict_label,′r*′);
legend(′實際測試集分類′,′預測測試集分類′);
title(′測試集的實際分類和預測分類圖′,′FontSize′,10);
%%法2
[train_final,test_final]=scaleForSVM(train_wine,test_wine,0,1);
train_final=train_wine;
test_final=test_wine;
%歸一化後可視化
figure;
fori=1:length(train_final(:,1))
plot(train_final(i,1),train_final(i,2),′r*′);
hold on;
end
grid on;
title(′Visualization for 1st dimension & 2nd dimension of scale data′);
%參數c和g尋優選擇
%GridSearch Method
[bestCVaccuracy,bestc,bestg]=SVMcgForClass(train_wine_labels,train_final)
cmd=[′-c′,num2str(bestc),′-g′,num2str(bestg)];
%分類預測
model=svmtrain(train_wine_labels,train_final,cmd);
[ptrain_label,train_accuracy]=svmpredict(train_wine_labels,train_final,model);
%train_accuracy
[ptest_label,test_accuracy]=svmpredict(test_wine_labels,test_final,model);
%test_accuracy
%svmplot
figure;
grid on;
svmplot(ptrain_label,train_wine,model);
title(′Train Data Set′);
%%子函數SVMcgForClassm
function[bestacc,bestc,bestg]=SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
%子函數SVMcgForClass
%輸入:
%train_label:訓練集標簽要求與libsvm工具箱中要求一致
%train:訓練集要求與libsvm工具箱中要求一致
%cmin:懲罰參數c的變化範圍的最小值(取以2為底的對數後),即c_min=2^(cmin)默認為-5
%cmax:懲罰參數c的變化範圍的最大值(取以2為底的對數後),即c_max=2^(cmax)默認為5
%gmin:參數g的變化範圍的最小值(取以2為底的對數後),即g_min=2^(gmin)默認為-5
%gmax:參數g的變化範圍的最小值(取以2為底的對數後),即g_min=2^(gmax)默認為5