In: Computer Science
Rewrite the following Matlab code so it does the same thing but
with complete new variable names and structure.
function stump = stumpGenerator(dataX, dataY, Dt)
intervals = 100;
rangex1 = max(dataX(:,1)) - min(dataX(:,1));
rangex2 = max(dataX(:,2)) - min(dataX(:,2));
width = (rangex1/intervals);
height = (rangex2/intervals);
starterx1 = min(dataX(:,1)) - (width/2);
starterx2 = min(dataX(:,2)) - (height/2);
currepsilon = inf;
stump = [0,0,0,1,0,0];
for i = 1:(intervals + 1)
horzRightError = sum(Dt(find(((dataX(:,1) - starterx1) .* dataY)
< 0)));
horzLeftError = sum(Dt(find(((dataX(:,1) - starterx1) .* dataY)
> 0)));
vertUpError = sum(Dt(find(((dataX(:,2) - starterx2) .* dataY) <
0)));
vertDownError = sum(Dt(find(((dataX(:,2) - starterx2) .* dataY)
> 0)));
if (horzRightError <= horzLeftError)
horzError = horzRightError;
else
horzError = -horzLeftError;
end
if (vertUpError <= vertDownError)
vertError = vertUpError;
else
vertError = -vertDownError;
end
if (abs(horzError) <= abs(vertError))
if (currepsilon > abs(horzError))
currepsilon = abs(horzError);
stump(1) = 1;
stump(2) = 0;
stump(3) = starterx1;
stump(4) = horzError/(abs(horzError));
stump(5) = (log((1 - currepsilon)/currepsilon))/2;
stump(6) = currepsilon;
else
% do nothing, we already have the best stump
end
else
if (currepsilon > abs(vertError))
currepsilon = abs(vertError);
stump(1) = 0;
stump(2) = 1;
stump(3) = starterx2;
stump(4) = vertError/(abs(vertError));
stump(5) = (log((1/currepsilon) - 1))/2;
stump(6) = currepsilon;
else
% do nothing, we already have the best stump
end
end
starterx1 = starterx1 + width;
starterx2 = starterx2 + height;
end
end
function stp = stpGenerator(dtx, dty, ht)
hi = 100;
rx1 = max(dtx(:,1)) - min(dtx(:,1));
rx2 = max(dtx(:,2)) - min(dtx(:,2));
ww = (rx1/hi);
hh = (rx2/hi);
stx1 = min(dtx(:,1)) - (ww/2);
stx2 = min(dtx(:,2)) - (hh/2);
cpse = inf;
stp = [0,0,0,1,0,0];
for i = 1:(hi + 1)
hrErr = sum(ht(find(((dtx(:,1) - stx1) .* dty) < 0)));
hlErr = sum(ht(find(((dtx(:,1) - stx1) .* dty) > 0)));
vuErr = sum(ht(find(((dtx(:,2) - stx2) .* dty) < 0)));
vdErr = sum(ht(find(((dtx(:,2) - stx2) .* dty) > 0)));
if (hrErr <= hlErr)
hErr = hrErr;
else
hErr = -hlErr;
end
if (vuErr <= vdErr)
vErr = vuErr;
else
vErr = -vdErr;
end
if (abs(hErr) <= abs(vErr))
if (cpse > abs(hErr))
cpse = abs(hErr);
stp(1) = 1;
stp(2) = 0;
stp(3) = stx1;
stp(4) = hErr/(abs(hErr));
stp(5) = (log((1 - cpse)/cpse))/2;
stp(6) = cpse;
else
% do nothing, we already have the best stp
end
else
if (cpse > abs(vErr))
cpse = abs(vErr);
stp(1) = 0;
stp(2) = 1;
stp(3) = stx2;
stp(4) = vErr/(abs(vErr));
stp(5) = (log((1/cpse) - 1))/2;
stp(6) = cpse;
else
% do nothing, we already have the best stp
end
end
stx1 = stx1 + ww;
stx2 = stx2 + hh;
end
end