Skip to content

Nearest Neighbors (KNN)

Victor Fernandes edited this page Aug 28, 2017 · 9 revisions

1. Introdução

O KNN (K-Nearest Neighbors) é um algoritmo de aprendizado supervisionado e não parametrizado, ou seja, ele não prevê uma função antes de treinar com os dados, diferentemente de outros algoritmos como a regressão linear e SVM (Support Vector Machine). Ele é totalmente baseado nos dados fornecidos.

A ideia do algoritmo é bem simples. Poderia ser resumida como “diga-me com quem tu andas e eu direi quem tu és”. Quando se quer saber a que grupo um determinado dado pertence, basta compará-lo com dados próximos a ele. Neste caso, os vizinhos mais próximos (Nearest Neighbors). Então, o novo dado é classificado de acordo com os vizinhos.

O padrão para se calcular a distância entre os dados é a distância euclidiana. Dada pela formula:

Onde p e q são os dois pontos que se deseja saber a distância e i é o número de dimensões a se considerar.

2. Estratégias de Implementação

Scikit-learn implementa esse algoritmo de duas maneiras. A primeira delas é determinar o número de vizinhos (k) que se quer consultar para classificar o novo dado. Por exemplo, suponha que ser quer consultar 10 dados vizinhos, utiliza-se k = 10. Outra forma de aplicar o algoritmo é traçando um raio a partir do dado, e o k é igual ao número de dados dentro do raio.

A primeira implementação é a mais usada das duas técnicas. A escolha ideal do valor (k) é altamente dependente dos dados. Em geral, um maior k suprime os efeitos do ruído, mas torna os limites de classificação menos distintos.

Nos casos em que os dados não são amostrados uniformemente, a classificação a partir dos vizinhos baseados no raio pode ser melhor. O usuário especifica um raio fixo (r), de modo que os pontos em áreas mais dispersas usam menos vizinhos para a classificação.

A classificação básica do KNN usa pesos uniformes, ou seja, o valor atribuído a um determinado ponto é calculado a partir do valor da maioria dos vizinhos mais próximos. Porém, em algumas circunstâncias, é melhor pesar os vizinhos, de modo que os vizinhos mais próximos contribuam mais para o ajuste. Isso pode ser feito através da palavra chave weights. O valor padrão,weights = uniform ,atribui pesos uniformes a cada vizinho. weights = distance atribui pesos proporcionais ao inverso da distância do ponto de consulta. Alternativamente, pode-se fornecer uma função definida pelo usuário da distância que é usada para calcular os pesos.

3. Referências

[1] http://scikit-learn.org/stable/modules/neighbors.html

Clone this wiki locally