Uma característica da classificação baseada em instâncias é que o algorítmo classifica de acordo com a proximidade dos dados em tempo real, durante o tempo de execução. O KNN não trabalha com modelos, mas usa os dados históricos na memória, e quando recebe uma instância nova para classificar ele busca no histórico o mais próximo de acordo com o parâmetro indicado.

Vamos utilizar os mesmos dados vistos no exemplo do LVQ

library(class)
library(e1071)
library(caret)
## Loading required package: lattice
## Loading required package: ggplot2
set.seed(88)
n = 10000
a = sample(1:20, n, replace = T)
b = sample(20:45, n, replace = T)
f = ifelse(a > 9 & b > 30, "cítrica", 
           ifelse(a < 4 | b < 11, "seca", "vermelha"))

df = data.frame(a = a, b = b, flag = as.factor(f))

amostra <- sample(2,n,replace = T,prob = c(0.7,0.3))
treino <- df[amostra==1,]
classificar <- df[amostra==2,]

Visualizando as primeira linhas do dataframe

head(df)
##    a  b     flag
## 1 13 43  cítrica
## 2  7 24 vermelha
## 3 19 26 vermelha
## 4  2 45     seca
## 5 17 36  cítrica
## 6 16 38  cítrica
dim(df)
## [1] 10000     3

Aqui não teremos dados de treino e teste, teremos apenas treino e dados a classificar.

“Treino” é onde ele vai buscar a proximidade. Vamos usar o comando dim para verificar as instâncias dos conjuntos treino e o conjunto classificar que é em torno de 70% e 30%

dim(treino)
## [1] 6975    3
dim(classificar)
## [1] 3025    3

Utilizando o K-Nearest Neighbor

Vamos passar os dados de treino, os dados a classificar e a lista de valores de classificação do treino, ou seja, encontrada a instancia mais próxima, onde encontrar a sua classe. O parametro k é número de vizinhos mais próximos a serem considerados quando ele faz a busca no vizinho mais próximo pela distância (normalmente a distância euclidiana)

previsao <- knn(treino[,1:2],classificar[,1:2],treino[,3],k=3)

Matriz de confusão

table(classificar[,3],previsao)
##           previsao
##            cítrica seca vermelha
##   cítrica     1008    0        0
##   seca           0  435        0
##   vermelha       0    0     1582

Análise da Matriz de confusão

Percebemos que nenhum erro aconteceu, todas as frutas foram classificadas corretamente.