我已经为男性和女性图片提取了HOG功能,现在,我尝试使用 Leave-one-out-method 对我的数据进行分类。 由于在Matlab中编写它的标准方法是:
[Train, Test] = crossvalind('LeaveMOut', N, M);
我应该写什么而不是N
和M
?
另外,我应该在循环内部或外部写上面的代码语句吗?
这是我的代码,我有男性(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
:培训文件夹中的图片总数。答案 0 :(得分:3)
我将重点介绍如何将crossvalind
用于 leave-one-out -method。
我假设你想在循环中选择随机集。 N
是数据向量的长度。 M
是Test
中随机选择的观察数。 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