MATLAB: Using bootstrp with the own defined function

functionimage analysisimage processingimage segmentationMATLABmatlab functionstatistics

Hello
I am currently tasked with fitting 2 sets of data. I extracted 5 datapoints as a training set and I created a function that works the percentage differnce between the two sets which is as follows;
% img is a 1D normlised matrix and adam is a count of a certain feature in the images. Each image is stored in a cell array
function erfun = per_dif(img, adam, thresh, siz)
tota = 0;
totb = 0;
for i = 1:5
err = abs((round(sum(sum(img{i}.*img{i}>thresh == 1)))/siz)-adam(i));
tota = tota + err;
totb = totb + adam(i);
end
erfun = tota/totb;
end
In reality, the 'thresh' & 'siz' variables are unknown, I set a function as follows;
fun = @(x)per_dif(adam_im,adam_count,x(1),x(2))
and I used the fminsearch function on it as follows
x0 = [0.5,1];
x = fminsearch(f,x0)
I used the values of x on the test set and I got a result that makes sense.
Now, I want to increase the accuracy of my model using the bootstrp method. Instead of setting aside 5 training and 5 test data points, I want to use my whole set, and iterate through a random 5 of them to get multiple values of x (and then use mean and standard deviation).
It isjust that I cant seem to get the code working. This is what i have right now;
f = @(x)fminsearch(per_dif(adam_im, adam_count,x(1),x(2)),x0);
bootstat = bootstrp(200,@f,[adam_im,adam_count])

Best Answer

I have recreated a function that minimises my data
function x = per_dif_fit(img, adam)
x0 = [0.5,1];
tota = @(x)0;
totb = 0;
for i = 1:5
err = @(x)abs((round(sum(sum(img{i}.*img{i}>x(1) == 1)))/x(2))-adam(i));
tota = @(x)tota(x) + err(x);
totb = totb + adam(i);
end
a = @(x)tota(x)/totb;
x = fminsearch(a,x0)
end
and used that as an input to the bootstrp. It worked