K-Nearest Neighbors Algorithm
K-Nearest Neighbors Algorithm
In statistics, the k-nearest neighbors algorithm (k-NN) is a non-parametric supervised learning method
first developed by Evelyn Fix and Joseph Hodges in 1951,[1] and later expanded by Thomas Cover.[2] It is
used for classification and regression. In both cases, the input consists of the k closest training examples in a
data set. The output depends on whether k-NN is used for classification or regression:
k-NN is a type of classification where the function is only approximated locally and all computation is
deferred until function evaluation. Since this algorithm relies on distance for classification, if the features
represent different physical units or come in vastly different scales then normalizing the training data can
improve its accuracy dramatically.[3]
Both for classification and regression, a useful technique can be to assign weights to the contributions of the
neighbors, so that the nearer neighbors contribute more to the average than the more distant ones. For
example, a common weighting scheme consists in giving each neighbor a weight of 1/d, where d is the
distance to the neighbor.[4]
The neighbors are taken from a set of objects for which the class (for k-NN classification) or the object
property value (for k-NN regression) is known. This can be thought of as the training set for the algorithm,
though no explicit training step is required.
A peculiarity of the k-NN algorithm is that it is sensitive to the local structure of the data.
Statistical setting
Suppose we have pairs taking values in , where Y is the
class label of X, so that for (and probability distributions ). Given some norm
on and a point , let be a reordering of the training data
such that .
Algorithm
The training examples are vectors in a multidimensional feature space, each with a class label. The training
phase of the algorithm consists only of storing the feature vectors and class labels of the training samples.
In the classification phase, k is a user-defined constant, and an unlabeled vector (a query or test point) is
classified by assigning the label which is most frequent among the k training samples nearest to that query
point.
A commonly used distance metric for continuous variables is
Euclidean distance. For discrete variables, such as for text
classification, another metric can be used, such as the overlap
metric (or Hamming distance). In the context of gene expression
microarray data, for example, k-NN has been employed with
correlation coefficients, such as Pearson and Spearman, as a
metric.[5] Often, the classification accuracy of k-NN can be
improved significantly if the distance metric is learned with
specialized algorithms such as Large Margin Nearest Neighbor or
Neighbourhood components analysis.
A drawback of the basic "majority voting" classification occurs Example of k-NN classification. The
when the class distribution is skewed. That is, examples of a more test sample (green dot) should be
frequent class tend to dominate the prediction of the new example, classified either to blue squares or to
because they tend to be common among the k nearest neighbors red triangles. If k = 3 (solid line
due to their large number.[6] One way to overcome this problem is circle) it is assigned to the red
to weight the classification, taking into account the distance from triangles because there are 2
the test point to each of its k nearest neighbors. The class (or value, triangles and only 1 square inside the
in regression problems) of each of the k nearest points is multiplied inner circle. If k = 5 (dashed line
by a weight proportional to the inverse of the distance from that circle) it is assigned to the blue
point to the test point. Another way to overcome skew is by squares (3 squares vs. 2 triangles
abstraction in data representation. For example, in a self-organizing inside the outer circle).
map (SOM), each node is a representative (a center) of a cluster of
similar points, regardless of their density in the original training
data. K-NN can then be applied to the SOM.
Parameter selection
The best choice of k depends upon the data; generally, larger values of k reduces effect of the noise on the
classification,[7] but make boundaries between classes less distinct. A good k can be selected by various
heuristic techniques (see hyperparameter optimization). The special case where the class is predicted to be
the class of the closest training sample (i.e. when k = 1) is called the nearest neighbor algorithm.
The accuracy of the k-NN algorithm can be severely degraded by the presence of noisy or irrelevant
features, or if the feature scales are not consistent with their importance. Much research effort has been put
into selecting or scaling features to improve classification. A particularly popular approach is the use of
evolutionary algorithms to optimize feature scaling.[8] Another popular approach is to scale features by the
mutual information of the training data with the training classes.
In binary (two class) classification problems, it is helpful to choose k to be an odd number as this avoids
tied votes. One popular way of choosing the empirically optimal k in this setting is via bootstrap method.[9]
Let denote the weighted nearest classifier with weights . Subject to regularity conditions,
which in asymptotic theory are conditional variables which require assumptions to differentiate among
parameters with some criteria. On the class distributions the excess risk has the following asymptotic
expansion[11]
The optimal weighting scheme , that balances the two terms in the display above, is given as
follows: set ,
for and
for .
With optimal weights the dominant term in the asymptotic expansion of the excess risk is .
Similar results are true when using a bagged nearest neighbour classifier.
Properties
k-NN is a special case of a variable-bandwidth, kernel density "balloon" estimator with a uniform
kernel.[12][13]
The naive version of the algorithm is easy to implement by computing the distances from the test example
to all stored examples, but it is computationally intensive for large training sets. Using an approximate
nearest neighbor search algorithm makes k-NN computationally tractable even for large data sets. Many
nearest neighbor search algorithms have been proposed over the years; these generally seek to reduce the
number of distance evaluations actually performed.
k-NN has some strong consistency results. As the amount of data approaches infinity, the two-class k-NN
algorithm is guaranteed to yield an error rate no worse than twice the Bayes error rate (the minimum
achievable error rate given the distribution of the data).[2] Various improvements to the k-NN speed are
possible by using proximity graphs.[14]
For multi-class k-NN classification, Cover and Hart (1967) prove an upper bound error rate of
where is the Bayes error rate (which is the minimal error rate possible), is the k-NN error rate,
and M is the number of classes in the problem. For and as the Bayesian error rate approaches
zero, this limit reduces to "not more than twice the Bayesian error rate".
Error rates
There are many results on the error rate of the k nearest neighbour classifiers.[15] The k-nearest neighbour
classifier is strongly (that is for any joint distribution on ) consistent provided diverges and
converges to zero as .
Let denote the k nearest neighbour classifier based on a training set of size n . Under certain
regularity conditions, the excess risk yields the following asymptotic expansion[11]
The choice offers a trade off between the two terms in the above display, for which the
-nearest neighbour error converges to the Bayes error at the optimal (minimax) rate .
Metric learning
The K-nearest neighbor classification performance can often be significantly improved through
(supervised) metric learning. Popular algorithms are neighbourhood components analysis and large margin
nearest neighbor. Supervised metric learning algorithms use the label information to learn a new metric or
pseudo-metric.
Feature extraction
When the input data to an algorithm is too large to be processed and it is suspected to be redundant (e.g. the
same measurement in both feet and meters) then the input data will be transformed into a reduced
representation set of features (also named features vector). Transforming the input data into the set of
features is called feature extraction. If the features extracted are carefully chosen it is expected that the
features set will extract the relevant information from the input data in order to perform the desired task
using this reduced representation instead of the full size input. Feature extraction is performed on raw data
prior to applying k-NN algorithm on the transformed data in feature space.
An example of a typical computer vision computation pipeline for face recognition using k-NN including
feature extraction and dimension reduction pre-processing steps (usually implemented with OpenCV):
Dimension reduction
For high-dimensional data (e.g., with number of dimensions more than 10) dimension reduction is usually
performed prior to applying the k-NN algorithm in order to avoid the effects of the curse of
dimensionality.[16]
The curse of dimensionality in the k-NN context basically means that Euclidean distance is unhelpful in
high dimensions because all vectors are almost equidistant to the search query vector (imagine multiple
points lying more or less on a circle with the query point at the center; the distance from the query to all
data points in the search space is almost the same).
Feature extraction and dimension reduction can be combined in one step using principal component
analysis (PCA), linear discriminant analysis (LDA), or canonical correlation analysis (CCA) techniques as
a pre-processing step, followed by clustering by k-NN on feature vectors in reduced-dimension space. This
process is also called low-dimensional embedding.[17]
For very-high-dimensional datasets (e.g. when performing a similarity search on live video streams, DNA
data or high-dimensional time series) running a fast approximate k-NN search using locality sensitive
hashing, "random projections",[18] "sketches" [19] or other high-dimensional similarity search techniques
from the VLDB toolbox might be the only feasible option.
Decision boundary
Nearest neighbor rules in effect implicitly compute the decision boundary. It is also possible to compute the
decision boundary explicitly, and to do so efficiently, so that the computational complexity is a function of
the boundary complexity.[20]
Data reduction
Data reduction is one of the most important problems for work with huge data sets. Usually, only some of
the data points are needed for accurate classification. Those data are called the prototypes and can be found
as follows:
1. Select the class-outliers, that is, training data that are classified incorrectly by k-NN (for a
given k)
2. Separate the rest of the data into two sets: (i) the prototypes that are used for the
classification decisions and (ii) the absorbed points that can be correctly classified by k-NN
using prototypes. The absorbed points can then be removed from the training set.
Selection of class-outliers
A training example surrounded by examples of other classes is called a class outlier. Causes of class outliers
include:
random error
insufficient training examples of this class (an isolated example appears instead of a cluster)
missing important features (the classes are separated in other dimensions which we don't
know)
too many training examples of other classes (unbalanced classes) that create a "hostile"
background for the given small class
Class outliers with k-NN produce noise. They can be detected and separated for future analysis. Given two
natural numbers, k>r>0, a training example is called a (k,r)NN class-outlier if its k nearest neighbors
include more than r examples of other classes.
Condensed nearest neighbor (CNN, the Hart algorithm) is an algorithm designed to reduce the data set for
k-NN classification.[21] It selects the set of prototypes U from the training data, such that 1NN with U can
classify the examples almost as accurately as 1NN does with the whole data set.
a(x) = ‖x'-y‖
‖x-y‖ Three types of
points: prototypes,
where ‖ x-y‖ is the distance to the closest example y having a different color than class-outliers, and
x, and ‖ x'-y‖ is the distance from y to its closest example x' with the same label absorbed points.
as x.
The border ratio is in the interval [0,1] because ‖ x'-y‖ never exceeds ‖ x-y‖ . This ordering gives
preference to the borders of the classes for inclusion in the set of prototypes U. A point of a different label
than x is called external to x. The calculation of the border ratio is illustrated by the figure on the right. The
data points are labeled by colors: the initial point is x and its label is red. External points are blue and green.
The closest to x external point is y. The closest to y red point is x' . The border ratio
a(x) = ‖ x'-y‖ / ‖ x-y‖is the attribute of the initial point x.
Below is an illustration of CNN in a series of figures. There are three classes (red, green and blue). Fig. 1:
initially there are 60 points in each class. Fig. 2 shows the 1NN classification map: each pixel is classified
by 1NN using all the data. Fig. 3 shows the 5NN classification map. White areas correspond to the
unclassified regions, where 5NN voting is tied (for example, if there are two green, two red and one blue
points among 5 nearest neighbors). Fig. 4 shows the reduced data set. The crosses are the class-outliers
selected by the (3,2)NN rule (all the three nearest neighbors of these instances belong to other classes); the
squares are the prototypes, and the empty circles are the absorbed points. The left bottom corner shows the
numbers of the class-outliers, prototypes and absorbed points for all three classes. The number of
prototypes varies from 15% to 20% for different classes in this example. Fig. 5 shows that the 1NN
classification map with the prototypes is very similar to that with the initial data set. The figures were
produced using the Mirkes applet.[22]
k-NN regression
In k-NN regression, the k-NN algorithm is used for estimating continuous variables. One such algorithm
uses a weighted average of the k nearest neighbors, weighted by the inverse of their distance. This
algorithm works as follows:
1. Compute the Euclidean or Mahalanobis distance from the query example to the labeled
examples.
2. Order the labeled examples by increasing distance.
3. Find a heuristically optimal number k of nearest neighbors, based on RMSE. This is done
using cross validation.
4. Calculate an inverse distance weighted average with the k-nearest multivariate neighbors.
k-NN outlier
The distance to the kth nearest neighbor can also be seen as a local density estimate and thus is also a
popular outlier score in anomaly detection. The larger the distance to the k-NN, the lower the local density,
the more likely the query point is an outlier.[23] Although quite simple, this outlier model, along with
another classic data mining method, local outlier factor, works quite well also in comparison to more recent
and more complex approaches, according to a large scale experimental analysis.[24]
Validation of results
A confusion matrix or "matching matrix" is often used as a tool to validate the accuracy of k-NN
classification. More robust statistical methods such as likelihood-ratio test can also be applied.
See also
Mathematics
portal
External links
K-Nearest Neighbor(KNN) Algorithm in Machine Learning (https://medium.com/@rizwanaya
smeen06/k-nearest-neighbor-knn-algorithm-in-machine-learning-d38d9638d7e0)
Further reading
Dasarathy, Belur V., ed. (1991). Nearest Neighbor (NN) Norms: NN Pattern Classification
Techniques. ISBN 978-0818689307.
Shakhnarovich, Gregory; Darrell, Trevor; Indyk, Piotr, eds. (2005). Nearest-Neighbor
Methods in Learning and Vision. MIT Press. ISBN 978-0262195478.