Implement all nearest neighbor

Lets say I want to find all neighbors. A function that will take in an excel file with data of different cars (caryear carmileage carhorsepower carlife) amd I want to be able to input data of a car I want and if it already exist according to my input then return that but if it does not return all the colosest/similar version of that car according to some all nearest neighbor implemantation. Not sure if that makes sense but I would appreciate some help :)

4 Comments

hello again
is this a kind of extension of your previous post ?
hello yes.
OK, but did @bransa's Answer below work?
ML
ML on 22 May 2022
Edited: ML on 22 May 2022
No I dont think I explained it well. Basically given a list of variable names find nearest neighbor.... consider min/max ranges. How can I do all this using knnsearch?

Sign in to comment.

 Accepted Answer

bransa
bransa on 20 May 2022
Edited: bransa on 20 May 2022
I would use logical indexing to query your excel data. When your return is empty, then prioritize the dimensions you want to search by and either use a combination of min-abs(difference) (one item searched) or knnsearch for a list of queries. Here is something to show what I am getting at. Not sure it runs bc I don't have sample data
found_index = find(carYear == inputYear & ...
carMileage == inputMileage & ...
carHorsepower == inputHorsepower & ...
carLife == inputLife);
if ~isempty(found_index)
fprintf('%s meets your input specifications.\n',carName)
else
% first try to find the year & horsepower ignoring the mileage and life
% just because this makes sense to me
found_index = find(carYear == inputYear & carHorsepower == inputHorsepower);
if ~isempty(found_index)
if length(found_index) == 1
fprintf('%s is the same year & horsepower.\n',carName)
else
fprintf('the following cars are the same year & horsepower:\n')
% now you have more than one car that meets 2 conditions.
% find the min difference for mileage and life
[~,minLifeIndex] = min(abs(carLife(found_index)-inputLife(found_index)));
[~,minMileageIndex] = min(abs(carMileage(found_index)-inputMileage(found_index)));
% note: your min~Index refers to the index of the
% array found_index. The index that meets the criteria in
% carMileage is carMileage(found_index(min~Index))
fprintf('\tclosest in life: %s\n',carName(found_index(minLifeIndex)))
fprintf('\tclosest in mileage: %s\n',carName(found_index(minMileageIndex)))
end
else
% some other less rigorous set of conditions
end
end

1 Comment

How could I implement knnsearch here?

Sign in to comment.

More Answers (0)

Categories

Find more on Statistics and Machine Learning Toolbox in Help Center and File Exchange

Asked:

ML
on 20 May 2022

Edited:

ML
on 22 May 2022

Community Treasure Hunt

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

Start Hunting!