Adaboost: Help on matlab code error

function [tree_node_left, tree_node_right, split_error] = ...
do_learn_nu(tree_node, dataset, labels, weights, papa)
tree_node_left = tree_node;
tree_node_right = tree_node;
if(nargin > 4)
tree_node_left.parent = papa;
tree_node_right.parent = papa;
end
Distr = weights;
trainpat = dataset;
traintarg = labels;
tr_size = size(trainpat, 2);
T_MIN = zeros(3,size(trainpat,1));
d_min = 1;
d_max = size(trainpat,1);
for d = d_min : d_max;
[DS, IX] = sort(trainpat(d,:));
TS = traintarg(IX);
DiS = Distr(IX);
lDS = length(DS);
vPos = 0 * TS;
vNeg = vPos;
i = 1;
j = 1;
while i <= lDS
k = 0;
while i + k <= lDS && DS(i) == DS(i+k)
if(TS(i+k) > 0)
vPos(j) = vPos(j) + DiS(i+k);
else
vNeg(j) = vNeg(j) + DiS(i+k);
end
k = k + 1;
end
i = i + k;
j = j + 1;
end
vNeg = vNeg(1:j-1);
vPos = vPos(1:j-1);
Error = zeros(1, j - 1);
InvError = Error;
IPos = vPos;
INeg = vNeg;
for i = 2 : length(IPos)
IPos(i) = IPos(i-1) + vPos(i);
INeg(i) = INeg(i-1) + vNeg(i);
end
Ntot = INeg(end);
Ptot = IPos(end);
for i = 1 : j - 1
Error(i) = IPos(i) + Ntot - INeg(i);
InvError(i) = INeg(i) + Ptot - IPos(i);
end
idx_of_err_min = find(Error == min(Error));
if(length(idx_of_err_min) < 1)
idx_of_err_min = 1;
end
if(length(idx_of_err_min) <1)
idx_of_err_min = idx_of_err_min;
end
idx_of_err_min = idx_of_err_min(1);
idx_of_inv_err_min = find(InvError == min(InvError));
if(length(idx_of_inv_err_min) < 1)
idx_of_inv_err_min = 1;
end
idx_of_inv_err_min = idx_of_inv_err_min(1);
if(Error(idx_of_err_min) < InvError(idx_of_inv_err_min))
T_MIN(1,d) = Error(idx_of_err_min);
T_MIN(2,d) = idx_of_err_min;
T_MIN(3,d) = -1;
else
T_MIN(1,d) = InvError(idx_of_inv_err_min);
T_MIN(2,d) = idx_of_inv_err_min;
T_MIN(3,d) = 1;
end
end
dim = [];
best_dim = find(T_MIN(1,:) == min(T_MIN(1,:)));
dim = best_dim(1);
tree_node_left.dim = dim;
tree_node_right.dim = dim;
TDS = sort(trainpat(dim,:));
lDS = length(TDS);
DS = TDS * 0;
i = 1;
j = 1;
while i <= lDS
k = 0;
while i + k <= lDS && TDS(i) == TDS(i+k)
DS(j) = TDS(i);
k = k + 1;
end
i = i + k;
j = j + 1;
end
DS = DS(1:j-1);
split = (DS(T_MIN(2,dim)) + DS(min(T_MIN(2,dim) + 1, length(DS)))) / 2;
%
split_error = T_MIN(1,dim);
%
tree_node_left.right_constrain = split;
tree_node_right.left_constrain = split;
I have dataset D x N and label 1 x N. And when I call this function by
load databaseAB
MaxIter = 100; % boosting iterations
% Step2: splitting data to training and control set
TrainData = ALoad(:,1:2:end);
TrainLabels = BLoad(1:2:end);
ControlData = ALoad(:,2:2:end);
ControlLabels = BLoad(2:2:end);
% Step3: constructing weak learner
weak_learner = tree_node_w(3); % pass the number of tree splits to the constructor
%
% Step4: training with Gentle AdaBoost
[RLearners RWeights] = RealAdaBoost(weak_learner, TrainData, TrainLabels, MaxIter);
%
% Step6: evaluating on control set
ResultR = sign(Classify(RLearners, RWeights, ControlData))
%
% Step7: calculating error
ErrorR = sum(ControlLabels ~= ResultR) / length(ControlLabels);
gave me this error
Undefined function 'sort' for input arguments of type 'struct'.
Error in tree_node_w/do_learn_nu (line 65)
[DS, IX] = sort(trainpat(d,:));
Any one can help me for this error? Thank you.

2 commentaires

per isakson
per isakson le 11 Oct 2016
There is no function, sort, for structures.
Guesses:
  • trainpat is not intended to be a struct
  • the intention is to sort regarding a field of the structure, trainpat.
  • other mistake
Tuffahatul Ummah
Tuffahatul Ummah le 13 Oct 2016
thank you for your answer.

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Guidance, Navigation, and Control (GNC) dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by