Matlab从矩阵中获取特定行

时间:2012-11-18 21:34:32

标签: algorithm matlab matrix cross-validation

我正在使用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)

此图解释了我想要的内容(格式科技大学幻灯片): enter image description here

我是matlab的新手,我怎样才能轻松实现它?

2 个答案:

答案 0 :(得分:0)

通常可以通过函数crossvalind完成交叉验证。

你可以通过

来完成
Indices = crossvalind('Kfold', matrix , M)

答案 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的倍数时,此方法才有效。