# مباحث متفرقه برنامه نویسی > برنامه نویسی Matlab >  الگوريتم k نزديکترين همسايه

## msabori

سلام
من باید الگوريتم k نزديکترين همسايه knn را در مطلب پیاده کنم 
کسی می تونه کمکم کنه ؟
من زمینه کد نویسی مطلب هم ندارم

ممنون

----------


## ASedJavad

سلام
اگه احیانا کسی از دوستان جواب نداد، تئوری الگوریتم رو بذارید اینجا تاببینم چه میشه کرد.
البته مسلما میدونید که طبق قوانین سایت ما نهایتا میتونیم کمکتون کنیم و پروژه نهایی رو باید خودتون انجام بدید!

----------


## rahnema1

زبان matlab مشکل نیست با کمی سعی می تونید یاد بگیرید فایل های مختصر آموزش فارسی هم تو اینترنت هست فکر کنم خودتون بتونید این کار رو انجام بدید 
روش  الگوریتم knn هم ساده هست هر جور که شده کد رو بنویسید حتی ناقص بذارید اینجا اگر باز نشد بگویید کجای کار اشکال پیدا کردید و به مانع خوردید تا ببینیم اشکالش چیه

----------


## coral

سلام
من هم روی همین الگوریتم مشکل دارم به نحوی که وقتی اون رو در مطلب میذارم error می دهد. فکر می کنم باید دوباره فراخوانی اش بکنم اما نمی دانم چطور. الگوریتم من :
function net = knn(nin, nout, k, tr_in, tr_targets)
%KNN	Creates a K-nearest-neighbour classifier.
%
%	Description
%	NET = KNN(NIN, NOUT, K, TR_IN, TR_TARGETS) creates a KNN model NET
%	with input dimension NIN, output dimension NOUT and K neighbours.
%	The training data is also stored in the data structure and the
%	targets are assumed to be using a 1-of-N coding.
%
%	The fields in NET are
%	  type = 'knn'
%	  nin = number of inputs
%	  nout = number of outputs
%	  tr_in = training input data
%	  tr_targets = training target data
%
%	See also
%	KMEANS, KNNFWD
%

%	Copyright (c) Ian T Nabney (1996-2001)


net.type = 'knn';
net.nin = nin;
net.nout = nout;
net.k = k;
errstring = consist(net, 'knn', tr_in, tr_targets);
if ~isempty(errstring)
  error(errstring);
end
net.tr_in = tr_in; 
net.tr_targets = tr_targets;

-------------------------


function [resultClass, classes] = knn(sampleData, testData, k)

% [resultClass, classes] = knn(sampleData, testData, k)
%
% Simple k-Nearest Neighbour algorithm
%
% Example   : sampledata = [1 3 1; 2 1 1; 3 2 2; 0 3 2];
%             testdata=[1 1];
%             k=3;
%             knn(sampledata,testdata,k)

N = size(sampleData,1);  % N is length of data
M = size(sampleData,2);  % M is index for class

% Calculate euclidean distance for each sample
distance = dist(sampleData(1:N, 1:(M-1)), reshape(testData,M-1,1));

% Sort distances ascending
[sorted, idx] = sort(distance);

% Order classes according to distance and
% choose k first (nearest neighbourhood)
classes = sampleData(idx(1:min(N, k)), M);

% Result is classified in class with most neighbours
resultClass = mode(classes);

% Plot bars for classes of nearest neighbours
figure(2);
hist(classes,[1:max(2,max(sampleData(:,M)))]);

----------

