在 Matlab 中留一 crossvalind
Leave one out crossvalind in Matlab
我已经提取了男性和女性图片的 HOG 特征,现在,我正在尝试使用 留一法 对我的数据进行分类。
由于在 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
:训练文件夹中的图片总数。
- SVM 应该检测哪些图像是男性,哪些是女性。
我将重点介绍如何使用 crossvalind
作为 留一法 方法。
我假设您想 select 在一个循环中随机设置。 N
是数据向量的长度。 M
是 Test
中随机 select 观察的数量。分别 M
是 Train
中遗漏的观察数。这意味着您必须将 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
我已经提取了男性和女性图片的 HOG 特征,现在,我正在尝试使用 留一法 对我的数据进行分类。 由于在 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
:训练文件夹中的图片总数。- SVM 应该检测哪些图像是男性,哪些是女性。
我将重点介绍如何使用 crossvalind
作为 留一法 方法。
我假设您想 select 在一个循环中随机设置。 N
是数据向量的长度。 M
是 Test
中随机 select 观察的数量。分别 M
是 Train
中遗漏的观察数。这意味着您必须将 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