| SOM Toolbox | Online documentation | http://www.cis.hut.fi/projects/somtoolbox/ |
[Class,P]=knn_old(Data, Proto, proto_class, K)
KNN_OLD A K-nearest neighbor classifier using Euclidean distance
[Class,P]=knn_old(Data, Proto, proto_class, K)
[sM_class,P]=knn_old(sM, sData, [], 3);
[sD_class,P]=knn_old(sD, sM, class);
[class,P]=knn_old(data, proto, class);
[class,P]=knn_old(sData, sM, class,5);
Input and output arguments ([]'s are optional):
Data (matrix) size Nxd, vectors to be classified (=classifiees)
(struct) map or data struct: map codebook vectors or
data vectors are considered as classifiees.
Proto (matrix) size Mxd, prototype vector matrix (=prototypes)
(struct) map or data struct: map codebook vectors or
data vectors are considered as prototypes.
[proto_class] (vector) size Nx1, integers 1,2,...,k indicating the
classes of corresponding protoptypes, default: see the
explanation below.
[K] (scalar) the K in KNN classifier, default is 1
Class (matrix) size Nx1, vector of 1,2, ..., k indicating the class
desicion according to the KNN rule
P (matrix) size Nxk, the relative amount of prototypes of
each class among the K closest prototypes for
each classifiee.
If 'proto_class' is _not_ given, 'Proto' _must_ be a labeled SOM
Toolbox struct. The label of the data vector or the first label of
the map model vector is considered as class label for th prototype
vector. In this case the output 'Class' is a copy of 'Data' (map or
data struct) relabeled according to the classification. If input
argument 'proto_class' _is_ given, the output argument 'Class' is
_always_ a vector of integers 1,2,...,k indiacating the class.
If there is a tie between representatives of two or more classes
among the K closest neighbors to the classifiee, the class is
selected randomly among these candidates.
IMPORTANT
** Even if prototype vectors are given in a map struct the mask _is not
taken into account_ when calculating Euclidean distance
** The function calculates the total distance matrix between all
classifiees and prototype vectors. This results to an MxN matrix;
if N is high it is recommended to divide the matrix 'Data'
(the classifiees) into smaller sets in order to avoid memory
overflow or swapping. Also, if K>1 this function uses 'sort' which is
considerably slower than 'max' which is used for K==1.
See also KNN, SOM_LABEL, SOM_AUTOLABEL