diff options
Diffstat (limited to 'sourcecodes/bnt-master/SLP/misc/knn.m')
| -rw-r--r-- | sourcecodes/bnt-master/SLP/misc/knn.m | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/misc/knn.m b/sourcecodes/bnt-master/SLP/misc/knn.m new file mode 100644 index 00000000..43233de1 --- /dev/null +++ b/sourcecodes/bnt-master/SLP/misc/knn.m @@ -0,0 +1,57 @@ +function [ypred]=knn(xapp,yapp,valY,X,k) + +% +% knn implementation +% +% USE : [ypred]=knn(xapp,yapp,valY,X,k) +% +% Vincent Guigue 08/01/03 + +% check nargin + +if nargin<4 + error('too few argumemnts'); +elseif nargin<5 + k=3; +else + if mod(k,2)==0 + error('k must be odd'); + end +end + +if size(xapp,2)~=size(X,2) + error('dimension incompatibility'); +end + + +ndim = size(xapp,2); +nptxapp = size(xapp,1); +nptX = size(X,1); + +% distance de X a xapp : +mat1 = repmat(xapp, nptX,1); +%mat21 = reshape(X',1,nptX*ndim) +mat22 = repmat(X,1,nptxapp)'; +mat2 = reshape(mat22 ,ndim, nptxapp*nptX)'; +distance = mat1 - mat2 ; + +distance = sum(distance.^2,2); +distance = reshape(distance,nptxapp,nptX); +[val kppv] = sort(distance,1); + +% bilan sur les k premieres lignes +kppv = reshape(kppv(1:k,:),k*nptX,1); +Ykppv = yapp(kppv,1); +Ykppv = reshape(Ykppv,k,nptX); + +% trouver le plus de reponses identique par colonne + +vote = []; +for i=1:nptX + for j=1:length(valY) + vote(j,i)=size(find(Ykppv(:,i)==valY(j)),1); + end +end + +[val ind]=max(vote,[],1); +ypred = valY(ind); \ No newline at end of file |
