📄 sampling.m
字号:
temptrain = [];
temptest = [];
tempvalid = [];
for ii = 1 : L
temptest = [temptest , ind{ii}(1+(j-1)*Ntestc(ii):j*Ntestc(ii))];
temp = [1+j*Ntestc(ii): select(ii) , 1:(j-1)*Ntestc(ii) ];
if(options.valid)
tempvalid = [tempvalid , ind{ii}(temp(1:Nvalidc(ii)))];
temptrain = [temptrain , ind{ii}(temp(Nvalidc(ii)+1:end))];
else
temptrain = [temptrain , ind{ii}(temp)];
end
end
Itest(j , :) = temptest;
Itrain(j , :) = temptrain;
if(options.valid)
Ivalid(j , :) = tempvalid;
end
end
end
if(options.method == 6) % Balanced Stratified Cross Validation
K = options.cv.K;
label = unique(y);
select = histc(y , label);
[d , N] = size(X);
L = size(label , 2);
ind = cell(1 , L);
list = cell(1 , L);
ind_list = cell(1 , L);
Ni = zeros(1 , L);
Ntestc = floor((1/K).*select);
if(options.valid)
Nvalidc = Ntestc;
Ntrainc = select - 2*Ntestc;
Ntrain = sum(Ntrainc);
Ntest = sum(Ntestc);
Nvalid = sum(Nvalidc);
Ivalid = zeros(K , Nvalid);
else
Ntrainc = select - Ntestc;
Ntrain = sum(Ntrainc);
Ntest = sum(Ntestc);
end
Itrain = zeros(K , Ntrain);
Itest = zeros(K , Ntest);
for i = 1 : L
ind{i} = find(y == label(i));
Ni(i) = length(ind{i});
list{i} = zeros(d , Ni(i) + 1);
ind_list{i} = zeros(1 , Ni(i));
end
temp = 0;
for i = 1 : L
temp = temp + 1;
a = X(: , ind{i});
list{i}(: , 1) = min(a , [] , 2);
for j=1:Ni(i)
b = list{i}(: , j);
tmp = b(: , ones(1 , size(a , 2))) - a;
dist = sqrt(sum(tmp.*tmp));
[minval , s] = min(dist);
list{i}(: , j + 1) = a(: , s);
ind_list{i}(j) = ind{i}(s);
a(: , s) = [];
ind{i}(s) = [];
end
end
T_ind = cell(1 , K);
Listremain = [];
for i=1:temp
b_ind = ind_list{i} ;
if ~isempty(b_ind)
while (size(b_ind,2) >= K)
for j=1:K
T_ind{j} = [T_ind{j} ; b_ind(1)];
b_ind(1) = [];
end
end
Listremain = [Listremain , b_ind];
b_ind = [];
end
end
% while ~isempty(Listremain)
% for i=1:K
% if ~isempty(Listremain)
%
% T_ind{i} = [T_ind{i} ; Listremain(1)];
%
% Listremain(1) = [];
% end
% end
% end
% Ntest = length(T_ind{1});
%
% Ntrain = (K - 1)*Ntest + length(Listremain);
Iindice = options.valid.*[[zeros(K-1,1) ; 1] , eye(K,K-1) ] + eye(K);
for i=1:K
tmp = Iindice(i , :)==1;
indtest = find(tmp);
indtrain = find(~tmp);
Itrain_temp = [];
for j=1:length(indtrain)
Itrain_temp = [Itrain_temp ; T_ind{indtrain(j)}];
end
[ignore,p] = sort(rand(1 , Ntrain));
temp = [Itrain_temp' , Listremain];
Itrain(i , :) = temp(p);
Itest(i , :) = T_ind{indtest(1)}';
if(options.valid)
Ivalid(i , :) = T_ind{indtest(2)}';
end
end
end
if(options.method == 7) % Stratified Hold out
rho = options.holding.rho;
K = options.holding.K;
if options.valid
if(prod(size(rho)) == 1)
rho = [rho , (1-rho)/2 , (1-rho)/2];
end
end
label = unique(y);
select = histc(y , label);
L = size(label , 2);
ind = cell(1 , L);
for i = 1 : L
ind{i} = find(y == label(i));
end
Ntrainc = round(rho(1)*select);
Ntrain = sum(Ntrainc);
if(options.valid)
Ntestc = round(rho(2)*select);
Ntest = sum(Ntestc);
Nvalidc = select - Ntrainc - Ntestc;
Nvalid = sum(Nvalidc);
Ivalid = zeros(K , Nvalid);
else
Ntestc = select - Ntrainc;
Ntest = sum(Ntestc);
end
Itrain = zeros(K , Ntrain);
Itest = zeros(K , Ntest);
for j = 1 : K
temptrain = [];
temptest = [];
tempvalid = [];
for i = 1 : L
[ignore , pi] = sort(rand(1 , select(i)));
temptrain = [temptrain , ind{i}(pi(1:Ntrainc(i)))];
if(options.valid)
temptest = [temptest , ind{i}(pi(Ntrainc(i)+1:Ntrainc(i) + Ntestc(i)))];
tempvalid = [tempvalid , ind{i}(pi(Ntrainc(i) + Ntestc(i)+1:select(i)))];
else
temptest = [temptest , ind{i}(pi(Ntrainc(i)+1:select(i)))];
end
end
Itrain(j , :) = temptrain;
Itest(j , :) = temptest;
if(options.valid)
Ivalid(j , :) = tempvalid;
end
end
end
if(options.method == 8) % Stratified Boot Strap
rho = options.bootstraping.rho;
K = options.bootstraping.K;
if options.valid
if(prod(size(rho)) == 1)
rho = [rho , (1-rho)/2 , (1-rho)/2];
end
end
label = unique(y);
select = histc(y , label);
L = size(label , 2);
ind = cell(1 , L);
for i = 1 : L
ind{i} = find(y == label(i));
end
Ntrainc = round(rho(1)*select);
Ntrain = sum(Ntrainc);
if(options.valid)
Ntestc = round(rho(2)*select);
Ntest = sum(Ntestc);
Nvalidc = select - Ntrainc - Ntestc;
Nvalid = sum(Nvalidc);
Ivalid = zeros(K , Nvalid);
else
Ntestc = select - Ntrainc;
Ntest = sum(Ntestc);
end
Itrain = zeros(K , Ntrain);
Itest = zeros(K , Ntest);
for j = 1 : K
temptrain = [];
temptest = [];
tempvalid = [];
for i = 1 : L
pi = ceil(select(i)*rand(1 , select(i)));
temptrain = [temptrain , ind{i}(pi(1:Ntrainc(i)))];
if(options.valid)
temptest = [temptest , ind{i}(pi(Ntrainc(i)+1:Ntrainc(i) + Ntestc(i)))];
tempvalid = [tempvalid , ind{i}(pi(Ntrainc(i) + Ntestc(i)+1:select(i)))];
else
temptest = [temptest , ind{i}(pi(Ntrainc(i)+1:select(i)))];
end
end
Itrain(j , :) = temptrain;
Itest(j , :) = temptest;
if(options.valid)
Ivalid(j , :) = tempvalid;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -