[英]how can fixed parameters cost and gamma using libsvm matlab to improve accuracy?
我使用libsvm對包含1000個標簽的數據庫進行分類。 我是libsvm的新手,我發現選擇參數c和g來提高性能的問題。 首先,這是我用來設置參數的程序:
bestcv = 0;
for log2c = -1:3,
for log2g = -4:1,
cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
cv = svmtrain(yapp, xapp, cmd);
if (cv >= bestcv),
bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
end
fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg, bestcv);
end
end
結果,該程序給出c = 8和g = 2,當我使用這些值c和g時,我發現准確率為55%。 為了進行分類,我對所有人使用svm one。
numLabels=max(yapp);
numTest=size(ytest,1);
%# train one-against-all models
model = cell(numLabels,1);
for k=1:numLabels
model{k} = svmtrain(double(yapp==k),xapp, ' -c 1000 -g 10 -b 1 ');
end
%# get probability estimates of test instances using each model
prob_black = zeros(numTest,numLabels);
for k=1:numLabels
[~,~,p] = svmpredict(double(ytest==k), xtest, model{k}, '-b 1');
prob_black(:,k) = p(:,model{k}.Label==1); %# probability of class==k
end
%# predict the class with the highest probability
[~,pred_black] = max(prob_black,[],2);
acc = sum(pred_black == ytest) ./ numel(ytest) %# accuracy
問題是我需要更改這些參數以提高性能。 例如,當我隨機放置c = 10000和g = 100時,我發現更好的准確率:70%。
請幫助我,如何設置這些參數(c和g)以找到最佳准確率? 先感謝您
在機器學習中,超參數調整是一個重要的問題。 最簡單的方法就是已經實現的方法:定義值的網格,然后在網格上計算模型,直到找到最佳的組合。 一個關鍵的假設是,網格本身是曲面的良好近似:它足夠精細,不會錯過任何重要的東西,但又不夠精細,以至於浪費時間來計算與相鄰值基本相同的值。 我不知道任何方法通常可以提前知道網格的精細程度。 舉例說明:假設全局最優值為$(5,5)$,而該函數在其他位置基本平坦。 如果您的網格是$(0,0),(0,10),(10,10),(0,10)$,則將完全錯過最優值。 同樣,如果網格為$(0,0),(-10,-10),(-10,0),(0,-10)$,則您永遠都不會接近最優值。 在這兩種情況下,您都不希望找到最佳的自身。
但是,對於具有RBF內核的SVM,存在一些經驗法則:$ \\ gamma \\ in \\ {2 ^ {-15},2 ^ {-14},...,2 ^ 5 \\} $和$ C的網格\\ in \\ {2 ^ {-5},2 ^ {-4},...,2 ^ {15} \\} $中的一個就是這樣的建議。
如果在測試的網格值范圍之外找到更好的解決方案,則建議您定義一個更大的網格。 但是,較大的網格需要花費更多時間進行評估,因此您要么必須等待一段時間才能獲得結果,要么要采用更有效的方法來探索超參數空間。
另一種選擇是隨機搜索:定義要嘗試的SVM數量的“預算”,並生成要測試的這么多隨機元組。 這種方法大多數情況下僅用於基准測試,因為它完全不智能。
網格搜索和隨機搜索都具有非常容易並行實現的優勢。
更好的選擇屬於全局優化領域。 Marc Claeson等人設計了Optunity軟件包,該軟件包使用粒子群優化。 我的研究集中在高效全局優化算法( EGO )的改進上,該算法建立了一個高斯過程作為超參數響應面的近似值,並使用該方法對當前的最佳估計最有可能改善哪些超參數元組進行有根據的預測。
想象一下,您已經在一些超參數元組$(\\ gamma,C)$上評估了SVM,並且它具有一些樣本外性能指標$ y $。 受EGO啟發的方法的一個優點是,它假定附近$(\\ gamma,C)$的值y ^ * $將“接近”到y $,因此我們不必花時間探索這些值。附近的元組,尤其是在$ y-y_ {min} $非常大的情況下(其中$ y_ {min} $是我們發現的最小$ y $值)。 EGO將在估計有改善的可能性的點上識別和評估SVM,因此它將智能地在超參數空間中移動:在理想情況下,它將跳過性能低下的區域,而專注於高性能區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.