近紅外光譜快速檢測澱粉品質9(2 / 3)

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′);

%%子函數SVMcgForClassm

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