2012-11-18 115 views
0

我正在Matlab上實現交叉驗證,而不使用除本機之外的任何其他功能。Matlab從矩陣中抽取特定行

我有一個這樣的矩陣:

1 
2 
3 
.. 
N 

我有一個摺疊尺寸中號

在第一次迭代我想利用的是:

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新手,如何輕鬆實現?

+3

的倍數你失去了我第二次迭代...你只是想你的載體劃分爲K個子集? – jerad

+0

在第二次迭代中,我有2個子集。其中一個是M尺寸,另一個尺寸是NM – kamaci

+0

@jerad我已經包含了一個圖形,說明我想要什麼 – kamaci

回答

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.

0

交叉驗證一般可以通過功能crossvalind完成。

您可以通過

Indices = crossvalind('Kfold', matrix , M) 
+0

...這是在生物信息學工具箱中,因此*不是*「原生」的Matlab,因爲OP請求。 –