function [ITR, ITE, TTR, TTE] = KFCV(I,O,K) rand('state',sum(100*clock)); [N na] = size(I); if N < na I = I'; z = N; N = na; na = z; clear z end [q Q] = nc(O); % q = number of classes, Q = classes names if q < 6 Q(6) = -999; if q < 5 Q(5) = -999; if q < 4 Q(4) = -999; if q < 3 Q(3) = -999; end end end end C1 = []; C2 = []; C3 = []; C4 = []; C5 = []; C6 = []; N(1:6) = 0; for i = 1:q C = I(find(O==Q(i)),:); class{i} = C; N(i) = size(C,1); end n=floor(N/K); nn = sum(n); for k = 1:(K-1) ITe = zeros(nn,na); TTe = zeros(nn,1); w = size(class{1},1); for i = 1:n(1) a = ceil(w*rand(1,1)); ITe(i,:) = class{1}(a,:); class{1}(a,:) = []; w = w - 1; TTe(i,:) = Q(1); end w = size(class{2},1); for i = 1:n(2) a = ceil(w*rand(1,1)); ITe(n(1)+i,:) = class{2}(a,:); class{2}(a,:) = []; w = w - 1; TTe(n(1)+i,:) = Q(2); end if q > 2 w = size(class{3},1); for i = 1:n(3) a = ceil(w*rand(1,1)); ITe(n(1)+n(2)+i,:) = class{3}(a,:); class{3}(a,:) = []; w = w - 1; TTe(n(1)+n(2)+i,:) = Q(3); end if q > 3 w = size(class{4},1); for i = 1:n(4) a = ceil(w*rand(1,1)); ITe(n(1)+n(2)+n(3)+i,:) = class{4}(a,:); class{4}(a,:) = []; w = w - 1; TTe(n(1)+n(2)+n(3)+i,:) = Q(4); end if q > 4 w = size(class{5},1); for i = 1:n(5) a = ceil(w*rand(1,1)); ITe(n(1)+n(2)+n(3)+n(4)+i,:) = class{5}(a,:); class{5}(a,:) = []; w = w - 1; TTe(n(1)+n(2)+n(3)+n(4)+i,:) = Q(5); end if q > 5 w = size(class{6},1); for i = 1:n(6) a = ceil(w*rand(1,1)); ITe(n(1)+n(2)+n(3)+n(4)+n(5)+i,:) = class{6}(a,:); class{6}(a,:) = []; w = w - 1; TTe(n(1)+n(2)+n(3)+n(4)+n(5)+i,:) = Q(6); end end end end end ITr = [class{1};class{2}]; if q > 2 ITr = [ITr;class{3}]; if q > 3 ITr = [ITr;class{4}]; if q > 4 ITr = [ITr;class{5}]; if q > 5 ITr = [ITr;class{6}]; end end end end TTr = [repmat(Q(1),size(class{1},1),1);repmat(Q(2),size(class{2},1),1)]; if q > 2 TTr = [TTr;repmat(Q(3),size(class{3},1),1)]; if q > 3 TTr = [TTr;repmat(Q(4),size(class{4},1),1)]; if q > 4 TTr = [TTr;repmat(Q(5),size(class{5},1),1)]; if q > 5 TTr = [TTr;repmat(Q(6),size(class{6},1),1)]; end end end end ITR{k} = ITr; ITE{k} = ITe; TTR{k} = TTr; TTE{k} = TTe; end for i = 1:q N(i) = size(class{i},1); end ITR{K} = []; TTR{K} = []; for i = 1:K for j = 1:(i-1) ITR{i} = [ITR{i}; ITE{j}]; TTR{i} = [TTR{i}; TTE{j}]; end end ITE{K} = [class{1};class{2}]; if q > 2 ITE{K} = [ITE{K}; class{3}]; if q > 3 ITE{K} = [ITE{K}; class{4}]; if q > 4 ITE{K} = [ITE{K}; class{5}]; if q > 5 ITE{K} = [ITE{K}; class{6}]; end end end end TTE{K} = [repmat(Q(1),N(1),1); repmat(Q(2),N(2),1)]; if q > 2 TTE{K} = [TTE{K}; repmat(Q(3),N(3),1)]; if q > 3 TTE{K} = [TTE{K}; repmat(Q(4),N(4),1)]; if q > 4 TTE{K} = [TTE{K}; repmat(Q(5),N(5),1)]; if q > 5 TTE{K} = [TTE{K}; repmat(Q(6),N(6),1)]; end end end end