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 ビュー (過去 30 日間)
%% 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

採用された回答

Image Analyst
Image Analyst 2022 年 4 月 13 日
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 件のコメント
Image Analyst
Image Analyst 2022 年 4 月 14 日
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?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by