2015-06-27 29 views
1

我已經提取了男性和女性圖片的HOG特徵,現在,我嘗試使用「一個退出」方法對我的數據進行分類。 由於它寫在Matlab的標準方法是:在Matlab中留下一個crossvalind

[Train, Test] = crossvalind('LeaveMOut', N, M); 

我應該寫的,而不是NM什麼? 另外,我應該在循環內部還是外部編寫上面的代碼語句? 這是我的代碼,我有訓練文件夾爲男性(80圖像)和女性(80圖像),另一個用於測試(10隨機圖像)。

for i = 1:10 
[Train, Test] = crossvalind('LeaveMOut', N, 1); 
SVMStruct = svmtrain(Training_Set (Train), train_label (Train)); 
Gender = svmclassify(SVMStruct, Test_Set_MF (Test)); 
end 

注:

  • Training_Set:陣列包括訓練文件夾的圖像的HOG特徵。
  • Test_Set_MF:數組包含測試文件夾圖像的HOG特徵。
  • N:訓練文件夾中的圖像總數。
  • SVM應檢測哪些圖像是男性,哪些是女性。
+0

非常感謝你馬特先生 – TARIQ

回答

3

我將集中討論如何使用crossvalind留一出 - 方法。

我假設你想在循環中選擇隨機集。 N是你的數據向量的長度。 MTest中隨機選擇的觀察值的數量。 M分別是Train中遺漏的觀察值的數量。這意味着您必須將N設置爲訓練集的長度。通過M,您可以指定您希望在Test輸出中分別有多少個值,您希望在您的Train輸出中分別忽略。

以下是一個示例,從數據集中選擇M=2觀測值。

dataset = [1 2 3 4 5 6 7 8 9 10]; 
N = length(dataset); 
M = 2; 

for i = 1:5 
    [Train, Test] = crossvalind('LeaveMOut', N, M); 
    % do whatever you want with Train and Test 
    dataset(Test) % display the test-entries 
end 

此輸出:(這是隨機生成的,所以你不會有同樣的結果)

ans = 
    1  9 
ans = 
    6  8 
ans = 
    7 10 
ans = 
    4  5 
ans = 
    4  7 

當你根據this post在你的代碼有它,您需要針對特徵矩陣進行調整:

Training_Set = rand(10,3);  % 10 samples with 3 features each 

N = size(Training_Set,1); 
M = 2; 

for i = 1:5 
    [Train, Test] = crossvalind('LeaveMOut', N, 2); 
    Training_Set(Train,:) % displays the data to train 
end 
+0

謝謝馬特先生 – TARIQ

+0

我明白'N'=我在訓練文件夾中的樣本數。 'M'=每個迴路中待測樣品的數量,例如:(1)。循環應該從1到:我想測試的樣本數量。我寫信嗎? – TARIQ

+0

你能幫我嗎? @ ParagS.Chandakkar; @rayryeng – TARIQ

相關問題