在Matlab中留出一个crossvalind

时间:2015-06-27 22:04:53

标签: matlab classification training-data

我已经为男性和女性图片提取了HOG功能,现在,我尝试使用 Leave-one-out-method 对我的数据进行分类。 由于在Matlab中编写它的标准方法是:

[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应检测哪些图像是男性,哪些是女性。

1 个答案:

答案 0 :(得分:3)

我将重点介绍如何将crossvalind用于 leave-one-out -method。

我假设你想在循环中选择随机集。 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

此输出:(这是随机生成的,因此您不会获得相同的结果)

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

根据this post,如果您的代码 ,则需要根据功能矩阵进行调整:

-dealloc