在 Matlab 中留一 crossvalind

Leave one out crossvalind in Matlab

我已经提取了男性和女性图片的 HOG 特征,现在,我正在尝试使用 留一法 对我的数据进行分类。 由于在 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 

备注:

我将重点介绍如何使用 crossvalind 作为 留一法 方法。

我假设您想 select 在一个循环中随机设置。 N 是数据向量的长度。 MTest 中随机 select 观察的数量。分别 MTrain 中遗漏的观察数。这意味着您必须将 N 设置为训练集的长度。使用 M,您可以指定在 Test- 输出中需要多少个值,以及在 Train- 输出中分别要遗漏多少个值。

这是一个例子,select从数据集中 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