www.gusucode.com > stats 源码程序 matlab案例代码 > stats/SearchForkNearestNeighborsESExample.m

    %% Search for _k_-Nearest Neighbors
% Find _k_-nearest neighbors of query data given training data using
% |knnserach| on an |ExhaustiveSearcher| model.
%%
% Load Fisher's iris data.  Focus on the petal dimensions.

% Copyright 2015 The MathWorks, Inc.

load fisheriris
X = meas(:,3:4); % Predictors
Y = species;     % Response
%%
% Train a _k_-nearest neighbors searcher using the predictors.  Specify to
% use the cosine distance.
ESMdl = ExhaustiveSearcher(X,'Distance','cosine')
%%
% |ESMdl| is an |ExhaustiveSearcher| model.  You can access its properties
% using dot notation.
%%
% Find the 10 nearest neighbors from |X| to a query point (|newpoint|),
% first using the cosine, and then Mahalanobis distance metrics.  The query
% point must have the same column dimension as the data used to train the
% model.
newpoint = [5 1.45];
[IdxCs,DCs] = knnsearch(ESMdl,newpoint,'k',10);
[IdxMs,DMs] = knnsearch(ESMdl,newpoint,'k',10,...
   'Distance','mahalanobis');
%%
% |IdxCs| and |IdxMs| are 1-by-10 matrices containing the row indices of
% |X| corresponding to the nearest neighbors to |newpoint| using cosine
% and Mahalanobis distances, respectively.  Element (1,1) is the nearest,
% element (1,2) is the next nearest, and so on.
%%
% Plot the training data.
figure;
gscatter(X(:,1),X(:,2),Y);
title('Fisher''s Iris Data -- Nearest Neighbors');
xlabel('Petal length (cm)');
ylabel('Petal width (cm)');
hold on
%% 
% Plot a cross for the query point.
plot(newpoint(1),newpoint(2),'kx','MarkerSize',10,...
    'LineWidth',2);
%%
% Plot circles to identify the cosine nearest neighbors.
plot(X(IdxCs,1),X(IdxCs,2),'o','Color',[.5 .5 .5],'MarkerSize',10);
%%
% Plot pentagrams to identify the Mahalanobis nearest neighbors.
plot(X(IdxMs,1),X(IdxMs,2),'p','Color',[.5 .5 .5],'MarkerSize',10);
legend('setosa','versicolor','virginica','query point',...
   'cosine','mahalanobis','Location','Best');
hold off;