# knn.ani()

## Demonstration of the k-Nearest Neighbour (kNN) classification

### Yihui Xie & Lijia Yu 2017-04-04

Demonstrate the process of k-Nearest Neighbour classification on the 2D plane.

For each row of the test set, the `\(k\)` nearest (in Euclidean distance) training set vectors are found, and the classification is decided by majority vote, with ties broken at random. For a single test sample point, the basic steps are:

• locate the test point
• compute the distances between the test point and all points in the training set
• find `\(k\)` shortest distances and the corresponding training set points
• vote for the result (find the maximum in the table for the true classifications)

As there are four steps in an iteration, the total number of animation frames should be `4 * min(nrow(test), ani.options('nmax'))` at last.

``````library(animation)
## a binary classification problem
ani.options(interval = 1, nmax = 10)
x = matrix(c(rnorm(80, mean = -1), rnorm(80, mean = 1)), ncol = 2, byrow = TRUE)
y = matrix(rnorm(20, mean = 0, sd = 1.2), ncol = 2)
knn.ani(train = x, test = y, cl = rep(c("first class", "second class"), each = 40),
k = 30)
``````

plot of chunk demo-a

``````x = matrix(c(rnorm(30, mean = -2), rnorm(30, mean = 2), rnorm(30, mean = 0)), ncol = 2,
byrow = TRUE)
y = matrix(rnorm(20, sd = 2), ncol = 2)
knn.ani(train = x, test = y, cl = rep(c("first", "second", "third"), each = 15),
k = 25, cl.pch = c(2, 3, 19), dist.lty = 3)
``````

plot of chunk demo-b

``````## an interactive demo: choose the test set by mouse-clicking
if (interactive()) {
ani.options(nmax = 5)
knn.ani(interact = TRUE)
}
``````