我試圖做一個10倍交叉驗證,而不使用內置函數來訓練和識別0-9的數字我有500張圖片的樣本(每個數字需要50個訓練和測試) 我嘗試實現答案MATLAB: 10 fold cross Validation without using existing functions和其他網站,但它並沒有太大的幫助。主要是因爲我是MATLAB新手,所以我不太瞭解我應該怎麼做才能調整它。 這是我到目前爲止的代碼。如何在不使用MATLAB中的內置函數的情況下做10倍交叉驗證?
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位的畫面。
- 測試是一個測試集。
- 列車是一套訓練集。
爲了做到10倍交叉驗證我需要改變訓練集等
- 第一方面:1:5,用於測試,6:45,用於火車
- 第二折:6:10爲測試,1:5 11:50列車等
問題是我不知道如何將訓練集從一套移到另一套如6:45到1:5和11 :50。或者我能寫一個比這更好的循環嗎?
PSS。如果回答這個問題的人不介意500x28x28 double實際上意味着什麼。
'500x28x28 double'意味着它是一個[多維數組](http://de.mathworks.com/help/matlab/math/multidimensional-arrays.html)(實際是3-D數組)尺寸'500'代表例子的數量(在你的情況下是數字圖片),'28x28'分別代表每張圖片的長度和寬度(每張圖片用28x28的矩陣表示)。 – uyaseen
@uyaseen非常感謝。 – RHLS