2017-06-14 265 views
1

我有幾個圖像的svm培訓。這是我第一個使用SVM的項目。我正在使用HOG特徵提取來提取特徵。培訓功能並標記其位置1如果位於地平線上,則爲0,如果位於背景上。我有74張訓練圖像和7張圖像供測試。不幸的是,我不能超過50%的準確度。我改變了圖像大小,我在特徵提取中玩過單元大小。它並沒有改變那麼多。我可以嘗試什麼?什麼是理想的數據集編號,有多少圖像用於培訓和測試?例如,在一幅圖像中,它預測下一幅圖像中的所有錯誤都是錯誤的。如何提高Matlab中SVM訓練和分類的準確性?

這就是我如何計算精度;

%%%%% Evaluation 
% Testing Data 
hfsTest = vertcat(dataset.HorizonFeatsTest{:}); 
bfsTest = vertcat(dataset.BgFeatsTest{:}); 
test_data = [hfsTest;bfsTest]; 
% Labels 
hlabelTest = ones(size(hfsTest,1),1); 
blabelTest = zeros(size(bfsTest,1),1); 
test_label = [hlabelTest;blabelTest]; 

Predict_label = vertcat(results.predicted_label{:}); 

acc = numel(find(Predict_label==test_label))/length(test_label); 
disp(['Accuracy ', num2str(acc)]); 
%done 

% Training Data 
hfs = vertcat(dataset.HorizonFeats{:}); 
bfs = vertcat(dataset.BgFeats{:}); 
train_data = [hfs;bfs]; 
% Labels 
hlabel = ones(size(hfs,1),1); 
blabel = zeros(size(bfs,1),1); 
train_label = [hlabel;blabel]; 

%%% 
% do training ... 
svmModel = svmtrain(train_data, train_label,'BoxConstraint',2e-1); 

和我已經使用Predict_label_image = svmclassify(svmModel,image_feats);供測試用。

+0

請顯示您如何訓練SVM。也許你應該嘗試對超參數進行網格搜索? – J63

+0

我編輯了我的問題,但我不知道我是否回答你的問題。我已經使用svmtrain和svmclassify。 – cinemaniac

+0

你有沒有看過輸入功能的規模? SVM可以從標準化中獲益顯着http://content.iospress.com/articles/intelligent-data-analysis/ida730 –

回答

0

你需要做很多調整。在這裏的documentation你有所有可以玩的超參數。我將從rbf內核開始,爲BoxConstraint嘗試[0.01,0.1,1,10]。

如果你不嘗試不同的超參數配置,恐怕你不能指望svm工作。

+0

謝謝您的回答。你是如何決定BoxConstraint的值的?因爲我得到這個錯誤' 錯誤使用svmtrain(第460行) 框約束必須是正數字標量,或正數的向量長度等於 TRAINING中的行數。 main2錯誤(第62行) svmModel = svmtrain(train_data,train_label,'BoxConstraint',[0.01,0.1,1,10]); – cinemaniac

+0

我的意思是你必須做不同的運行:svmtrain(train_data,train_label,'BoxConstraint',0.01,'kernel_function','rbf'); svmtrain(train_data,train_label,'BoxConstraint',0.1,'kernel_function','rbf'); svmtrain(train_data,train_label,'BoxConstraint',1,'kernel_function','rbf'); ... – J63

+0

@ J63您也可以使用'bayesopt'自動查找最佳超參數:https://ch.mathworks.com/help/stats/bayesian-optimization-case-study.html –