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;