【发布时间】:2017-01-28 04:56:30
【问题描述】:
我尝试在不使用内置函数来训练和识别 0-9 的数字的情况下进行 10 折交叉验证我有 500 张图片的样本(每个数字 50 张要训练和测试。) 我尝试实现答案MATLAB: 10 fold cross Validation without using existing functions 和其他网站,但并没有太大帮助。主要是因为我是 MATLAB 新手,所以我不太了解应该如何调整它。 这是我目前的代码。
c=zeros(10,size(x,2),size(x,3));
K=10;
k=10;
test= 1:50/K;
for fold =1:K
if(test(1)~=1)
train = x(1:test(1)-1,:,:);
if (test(5) ~=50)
train=[train ; x(test(end):50,:,:)];
end
else
train = x(test(1):50,:,:);
end
test = test+ones(1,50/K)*50/K;
end
for i =0:9
test=test+50/K*ones(1,5);
c(i+1,:,:)=cal_likelihood(x(1+i*50:50+i*50,:,:),50/k*(k-1));
end
变量解释
- x 是 500x28x28 双倍,它保留所有 500 位图片。
- test 是一个测试集。
- train 是一个训练集。
为了进行 10 折交叉验证,我需要更改训练集,例如
- 第 1 折:测试 1:5,火车 6:45
- 第二折:6:10 考试,1:5 11:50 火车等
问题是我不知道如何将训练集从一组转移到另一组,例如从 6:45 到 1:5 和 11:50。或者我可以写一个比这更好的循环吗?
PSS。如果回答这个问题的人不介意 500x28x28 double 究竟是什么意思。
【问题讨论】:
-
500x28x28 double表示它是一个 multi-dimensional array (实际上是 3-D 数组),其中第一维500表示示例数(在您的情况下为数字图片),28x28表示长度和分别为每张图片的宽度(每张图片用一个28x28的矩阵表示)。 -
@uyaseen 非常感谢。
标签: matlab validation machine-learning