clc;
close all;
clear;
workspace;
format long g;
format compact;
fontSize = 20;
markerSize = 10;
lineWidth = 2;
numTrainingPoints = 10;
trainingCoords1 = rand(numTrainingPoints, 2) + 1;
trainingCoords2 = rand(numTrainingPoints, 2) * 1.75 + 4;
subplot(2, 2, 1);
plot(trainingCoords1(:, 1), trainingCoords1(:, 2), 'rs', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
hold on;
plot(trainingCoords2(:, 1), trainingCoords2(:, 2), 'b^', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
grid on;
xlim([0, 6]);
ylim([0, 6]);
title('Training data. Points have known, defined class.', 'FontSize', fontSize, 'Interpreter', 'None');
legend('Class 1', 'Class 2', 'Location', 'northwest');
set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0, 1, 1]);
numUnknownPoints = 50;
unknownCoords = 3 * (rand(numUnknownPoints, 2) - 0.5) + 3;
subplot(2, 2, 2);
plot(unknownCoords(:, 1), unknownCoords(:, 2), 'k*', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
grid on;
xlim([0, 6]);
ylim([0, 6]);
legend('As-of-yet Unknown Class', 'Location', 'northwest');
title('Test Data Before Classification', 'FontSize', fontSize, 'Interpreter', 'None');
trainingCoords = [trainingCoords1; trainingCoords2];
[indexes, distancesOfTheIndexes] = knnsearch(trainingCoords, unknownCoords, ...
'NSMethod', 'exhaustive',...
'k', 5,...
'distance', 'euclidean');
class1Map = indexes <= numTrainingPoints;
class2Map = indexes > numTrainingPoints;
class1Count = sum(class1Map, 2);
class2Count = sum(class2Map, 2);
itIsClass1 = class1Count >= class2Count;
itIsClass2 = class1Count < class2Count;
class1 = unknownCoords(itIsClass1, :);
class2 = unknownCoords(itIsClass2, :);
subplot(2, 2, 4);
plot(class1(:, 1), class1(:, 2), 'rs', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
hold on;
plot(class2(:, 1), class2(:, 2), 'b^', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
grid on;
xlim([0, 6]);
ylim([0, 6]);
title('Test Data After Classification', 'FontSize', fontSize, 'Interpreter', 'None');
legend('Estimated to be in Class 1', 'Estimated to be in Class 2', 'Location', 'northwest');
Best Answer