關于SVM參數的優化選取手寫體數字識別matlab,國際上并沒有公認統一的最好的方法,現在目前常用的方法就是讓c和g在一定的范圍內取值,對于取定的c和g對于把訓練集作為原始數據集利用K-CV方法得到在此組c和g下訓練集驗證分類準確率,最終取使得訓練集驗證分類準確率最高的那組c和g做為最佳的參數,但有一個問題就是可能會有多組的c和g對應于最高的驗證分類準確率,這種情況怎么處理?這里采用的手段是選取能夠達到最高驗證分類準確率中參數c最小的那組c和g做為最佳的參數,如果對應最小的c有多組g,就選取搜索到的第一組c和g做為最佳的參數。這樣做的理由是:過高的c會導致過學習狀態發生,即訓練集分類準確率很高而測試集分類準確率很低(分類器的泛化能力降低),所以在能夠達到最高驗證分類準確率中的所有的成對的c和g中認為較小的懲罰參數c是更佳的選擇對象。
以上的尋參思想在-mat-2.89-3[.0]工具箱中已經實現.m (分類問題尋優)、.m (回歸問題參數尋優):[,bestc,bestg]=(,train,cmin,cmax,gmin,gmax,v,cstep,gstep,)
輸入:
:訓練集的標簽,格式要求與相同。
train:訓練集,格式要求與相同。
cmin,cmax:懲罰參數c的變化范圍,即在[2cmin,2cmax]范圍內尋找最佳的參數c,默認值為cmin=-8,cmax=8,即默認懲罰參數c的范圍是[2(-8),28]。
gmin,gmax:RBF核參數g的變化范圍,即在[2gmin,2gmax]范圍內尋找最佳的RBF核參數g,默認值為gmin=-8,gmax=8手寫體數字識別matlab,即默認RBF核參數g的范圍是[2(-8),28]。
v:進行Cross 過程中的參數,即對訓練集進行v-fold Cross ,默認為3,即默認進行3折CV過程。
cstep,gstep:進行參數尋優是c和g的步進大小,即c的取值為2cmin,2(cmin+cstep),…,2cmax,,g的取值為2gmin,2(gmin+gstep),…,2gmax,默認取值為cstep=1,gstep=1。
:最后參數選擇結果圖中準確率離散化顯示的步進間隔大小([0,100]之間的一個數),默認為4.5。
輸出:
:最終CV意義下的最佳分類準確率。
bestc:最佳的參數c。
bestg:最佳的參數g。網格參數尋優函數(回歸問題):[,bestc,bestg]= (,train,cmin,cmax,gmin,gmax,v,cstep,gstep,)
其輸入輸出與類似,這里不再贅述。
%% IV. SVM模型創建/訓練
%%
% %首先進行粗略選擇:
% [,bestc,bestg] = (,,-8,8,-8,8);
%
% % 打印粗略選擇結果
% disp(‘打印粗略選擇結果’);
% str = ( ‘Best Cross MSE = %g Best c = %g Best g = %g’,,bestc,bestg);
% disp(str);
%
% % 根據粗略選擇的結果圖再進行精細選擇:
% [,bestc,bestg] = (,,-4,4,-4,4,3,0.5,0.5,0.05);
%
% % 打印精細選擇結果
% disp(‘打印精細選擇結果’);
% str = ( ‘Best Cross MSE = %g Best c = %g Best g = %g’,,bestc,bestg);
% disp(str);
%%
% 2. 創建/訓練SVM
cmd= [’ -t 2’,’ -c 1.4142’,’ -g 0.0625’,’ -s 3 -p 0.01’];
%cmd = [’ -t 2’,’ -c ‘,(bestc),’ -g ‘,(bestg),’ -s 3 -p 0.01’];
model = (,,cmd);
%% V. SVM仿真預測
[,,] = (,,model);
[,,] = (,,model);
%%
% 1. 反歸一化
= (‘’,,);
= (‘’,,);