我正在使用Matlab实现交叉验证,而不使用除原生函数之外的任何其他函数。
我有一个像这样的矩阵:
1
2
3
..
N
我的折叠尺寸 M
在第一次迭代中我想采取:
1
2
3
..
N-M
第二次迭代:
1
2
3
..
.. //Number o f M elements didn't included here
N-M+1
N-M+2
..
N
迭代直到我处理
M+1
M+2
..
N
当我不包含任何一组元素时,我想将它们分配到另一个变量中,或者我想知道索引,以便我可以处理它们(这个对性能更好)
有关交叉验证的更多信息:http://en.wikipedia.org/wiki/Cross-validation_(statistics)
此图解释了我想要的内容(格式科技大学幻灯片):
我是matlab的新手,我怎样才能轻松实现它?
答案 0 :(得分:0)
答案 1 :(得分:0)
以下位代码将对您的数据进行细分,如图所示。
K = 5; %Fold size
N = 25; % Number of data points
data = rand(1,N); % Some fake data
testIdxs = reshape(1:N,K, N/k)'; %now each row has the indices for one test set
% All indices that aren't in the test, should belong to the training set.
trainIdx = zeros(K, N-K);
for ix = 1:N/k
temp = 1:25;
temp(testIdxs(ix,:)) = [];
trainIdx(ix,:) = temp;
end
请注意,只有当N是K的倍数时,此方法才有效。