Motivação [1]

Imagine que você esteja tentando predizer em qual candidato uma pessoa vá votar na próxima eleição presidencial. Se você tem os dados de quem os vizinhos da pessoa que vai ser usada na predição vão votar é possível ter a hipótese que a predição vá seguir seus vizinhos.

Agora imagine que você não tenha apenas os dados dos votos de algumas pessoas e possa predizer outras pessoas baseada na distância entre elas, porém, também tenha os dados da idade, o salário, quantas crianças aquela pessoa tem, etc. O comportamento daquela pessoa pode ser influenciado (ou caracterizado) por esses dados e olhando para os "vizinhos próximos" de uma pessoa para fazer predição e olhando as várias dimensões dos dados desses vizinhos podemos tentar dizer que o voto que essa pessoa vai ter está entre os "k vizinhos mais próximos".

O modelo [1]

O modelo KNN é um dos mais simples para fazer predições. Ele não faz nenhuma suposição matemática e também não requer um grande custo computacional. As únicas coisas que esse modelo requere é:

A maioria dos outros modelos olham para o dataset como "um todo" para poder aprender certos padrões que estão entre os dados. O modelo KNN, por outro lado, "negligencia" várias informações, já que a predição de um novo ponto depende apenas no número "k" de pontos pertos do mesmo.

Essas informações fazem o modelo não ajuda a entender o que têm por trás da predição (como no exemplo da motivação, o modelo apenas pode predizer em quem alguma pessoa vai votar, porém não consegue o que causa aquela pessoa a votar no valor da predição), diferentemente de outros modelos que podem podem predizer e também podem indicar as causas que motivaram aquela predição.

Como o modelo funciona [2]

Em Knn o número de "k vizinhos próximos" é o fator de decisão para que seja possível fazer a predição do modelo. O número "k" é um número escolhido de acordo com o dataset, sendo ele geralmente um número ímpar, caso o número de classes para problemas de classificação seja par.

Quando temos k = 1 o algoritmo é conhecido como nearest neighbor algorithm, esse caso é o simples, já que envolve apenas checar o ponto mais próximo no ponto que eu queria predizer. Siga o exemplo gráfico abaixo:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/049ad97d-41b7-4476-ad37-c6b9e6d6dcc8/Untitled.png

No exemplo acima queremos predizer qual é a classe do ponto ?, essa predição poder nos dar:

Olhando o exemplo é intuitivo que o nosso modelo vá dar que aquele ponto pertence à classe A, já que, possui um ponto da classe A entre todos os pontos do dataset mais próximo ao ponto que queremos predizer.

Um algoritmo simples para decidir qual é a predição para um ponto segue abaixo:

<aside> 🎠 Algoritmo:

  1. Calcula a distância do ponto que queremos predizer com todos os outros do dataset;
  2. Procura os k vizinhos mais próximos entre as distâncias calculadas;
  3. Decide qual será a classe desse novo ponto de acordo com a maior incidência de uma classe (basicamente uma votação entre os k vizinhos).

</aside>