I'm trying to simulate 3 nearest neighbour classification without using the builtin matlab functions. I was able to 1 nearest neigbhor however i am unable to extend it to more

10 Ansichten (letzte 30 Tage)
%% code for 1 nearest neighbor classification
total_num_test_cases = num_test_cases * 5; %75
total_num_train_cases = num_train_cases * 5; %175
% Create a vector to store assigned labels
inferredLabels = zeros(1, total_num_test_cases);
% This loop cycles through each unlabelled item:
for unlabelledCaseIdx = 1:total_num_test_cases
unlabelledCase = testingSet(unlabelledCaseIdx, :);
% As any distance is shorter than infinity
shortestDistance = inf;
shortestDistanceLabel = 0; % Assign a temporary label
% This loop cycles through each labelled item:
for labelledCaseIdx = 1:total_num_train_cases
labelledCase = trainingSet(labelledCaseIdx, :);
% Calculate the Euclidean distance:
currentDist = euc(unlabelledCase, labelledCase);
% Check the distance
if currentDist < shortestDistance
shortestDistance = currentDist;
shortestDistanceLabel = trainingTarget(labelledCaseIdx);
end
end % inner loop
% Assign the found label to the vector of inferred labels:
inferredLabels(unlabelledCaseIdx) = shortestDistanceLabel
end % outer loop

Akzeptierte Antwort

Image Analyst
Image Analyst am 13 Apr. 2022
Attach your test and training sets of data. You can get the distances of a point to all other points in one line of code. Then sort it in ascending order.
distances = sqrt((x - allX) .^ 2 + (y - allY) .^ 2);
[sortedDistances, sortOrder] = sort(distances)
indexesOfClosest3 = sortOrder(1:3)
  5 Kommentare
Image Analyst
Image Analyst am 14 Apr. 2022
OK so I interpret that as you don't want to try my solution yourself and just want me to do it for you. Here it is:
numPoints = 30;
allX = 100 * rand(1, numPoints);
allY = 100 * rand(1, numPoints);
plot(allX, allY, 'b.', 'MarkerSize', 40);
grid on;
hold on;
drawnow;
indexesOfClosest3 = zeros(numPoints, 3);
for k = 1 : numPoints
x = allX(k);
y = allY(k);
distances = sqrt((x - allX) .^ 2 + (y - allY) .^ 2);
[sortedDistances, sortOrder] = sort(distances);
indexesOfClosest3(k, :) = sortOrder(2:4); % Don't include the first distance which is zero (the distance of the point to itself).
% Plot lines to them
for k3 = 1 : 3
x3 = allX(indexesOfClosest3(k, k3));
y3 = allY(indexesOfClosest3(k, k3));
line([x, x3], [y, y3], 'Color', 'r', 'LineWidth', 2)
end
end
Note every point is connected to the 3 other closest points. Is that what you want?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by