簡體   English   中英

LibSVM-交叉驗證后該怎么辦?

[英]LibSVM - what to do after crossvalidation?

我使用網格搜索為徑向基礎SVM查找最佳參數C和伽瑪,其代碼如下(該代碼主要取自使用libsvm進行交叉驗證后的重新訓練 )。 效果很好,但我有兩個即將出現的問題:

1.鑒於我只有一個數據集可供使用-如何處理C和伽瑪的最佳值? 我是否拆分數據集並僅使用一部分用於通過gridsearch確定最佳參數C和伽瑪,然后使用第二部分然后使用這些參數預測准確性?

2.鑒於在為我的舊數據集找到最佳C和伽瑪后,我還有另一個數據集-為什么我應該對新數據集使用這些C和伽瑪,而不是也對新數據集應用gridsearch來查找新的最佳參數?

謝謝

%# read example data from libsvm
[labels,data] = libsvmread('./heart_scale');

%# grid of parameters
folds = 5;

[C,gamma] = meshgrid(-5:2:15, -15:2:3);

%# grid search, and cross-validation
cv_acc = zeros(numel(C),1);
for i=1:numel(C)
    cv_acc(i) = svmtrain(labels, data, ...
                    sprintf('-c %f -g %f -v %d', 1^C(i), 2^gamma(i), folds));
end

%# pair (C,gamma) with best accuracy
[~,idx] = max(cv_acc);


%# now you can train you model using best_C and best_gamma
best_C = 2^C(idx);
best_gamma = 2^gamma(idx);

您可以進行網格搜索以找到針對給定問題的SVM的最佳參數。 您在一個可用的數據集上進行此操作,該數據集包含注釋,即您知道哪些預測是正確的-錯誤的預測—您還將如何找出C和gamma的最佳值?

一旦獲得,就假定您先前使用的數據集已經很好地反映了問題,並且從這里開始,您可以將SVM與數據集上的C和gamma值一起用於沒有注釋的同一問題。

一旦有了最佳參數,就可以認為它們對於屬於該類的所有數據都是最佳的。 當然,這是一個很大的假設,擁有更大的數據集將減少這些參數變化的可變性。 但是,整個學習過程都得到了一段全新的數據,我能猜出它是什么,或者它意味着什么? 因此,再次對新數據進行培訓將使您無法看到從未見過的數據會發生什么。

現在,以我的經驗來看,這些參數只會優化特定球場的性能。 也就是說,它可以使您的測試儀精度從80%提高到81-82%。 在大多數情況下,更重要的事情是達到80%的目標,這取決於設計好系統,選擇正確的功能並預處理這些功能。 然后,一旦完成,請通過調整這些參數來提高性能。

無論如何,希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM