▷ Machine Learning | K-Nearest Neighbors – KNN no Excel

Olá seja bem vindo ao meu novo artigo!

No reconhecimento de padrões, o algoritmo KNN ( k-vizinhos mais próximos) é um método não paramétrico usado para classificação e regressão.

Na classificação KNN , a saída é uma associação de classe. Um objeto é classificado pelo voto de pluralidade de seus vizinhos, sendo o objeto atribuído à classe mais comum entre os k vizinhos mais próximos ( k é um número inteiro positivo , geralmente pequeno), que será o objeto de estudo deste artigo.

Vamos aos cálculos

K = 1

Com a imagem acima, temos seis rotas com seus respetivos valores (Latitude, Longitude, Qualidade da estrada, Preço do combustível) e adicionamos um novo destino. Esta técnica irá resultar em qual será o destino mais próximo em relação a todas as rotas listadas, neste caso a menor distância entre a nova rota será a Rota de Número 1.

Mas antes de iniciarmos o cálculo devemos conhecer três distâncias que será aplicado a esta técnica, são elas:

Distância Euclidiana | Células G5 a G10

É a mais comum, considerada a distância geométrica (intuitiva) em um espaço p-dimensional

=RAIZ(SOMAXMY2($B$2:$E$2;$B5:$E5))

ou em inglês

=SQRT(SUMXMY2($B$2:$E$2;$B5:$E5))
Distância de Manhattan (City-Block) | Células H5 a H10

Esta distância é a média entre as dimensões, sendo o efeito de grandes diferenças são suavizados.

=SOMA(ÍNDICE(ABS($B5:$E5-B$2:E$2);0))

ou em inglês

=SUM(INDEX(ABS($B5:$E5-B$2:E$2);0))
Distância de Minkowski | Células I5 a I10

Esta distância é uma generalização da distância Euclidiana.

=SOMA(ÍNDICE(ABS($B5:$E5-$B$2:$E$2)^$K$1;0))^(1/$K$1)

ou em inglês

=SUM(INDEX(ABS($B5:$E5-$B$2:$E$2)^$K$1;0))^(1/$K$1)

Após as fórmulas das distâncias definidas em relação ao novo destino, é necessário achar a menor distância, consequentemente será o destino escolhido.

Segue a fórmula com o resultado da menor distância e o nome desta rota

=ÍNDICE($A$5:$A$10;CORRESP(1;ÍNDICE(ORDEM(G$5:G$10;G$5:G$10;1);0);0))

ou em inglês

=INDEX($A$5:$A$10;MATCH(1;INDEX(RANK(G$5:G$10;G$5:G$10;1);0);0))

O Fator K representa a quantidade de valores para realizar a escolha do menor destino, sendo o K=1, a primeira menor amostra é a resposta, o autor recomenda sempre escolher o K ímpar (1 ou 3 ou 5 ...), para caso der empate a classe que tiver o maior grupo é a qual o novo destino pertence

Segue um caso dinâmico com o Excel

Mas qual é o K ideal para o modelo? Segue a fórmula que faz a recomendação correta para o número correto K

=SE(MOD(LOG(CONT.VALORES(A6:A1250));2)=1;LOG(CONT.VALORES(A6:A1250));TRUNCAR(LOG(CONT.VALORES(A6:A1250));0)+1)

ou em inglês

=IF(MOD(LOG(COUNTA(A6:A125));2)=1;LOG(COUNTA(A6:A125));TRUNC(LOG(COUNTA(A6:A125));0)+1)

K=3 ou K=5

Quando se tem uma quantidade de amostra de dados significativos, é necessário utilizar o K>1, como neste exemplo acima, aplicado esta técnica a um conjunto de dados não linear IRIS.

Segue o link abaixo com os dados, para validação

https://archive.ics.uci.edu/ml/datasets/iris

Foi utilizado 80% dos dados de cada grupo para o treino e cálculo das distâncias e 20% para validação do KNN, onde teve a assertividade de 100%.

Para este caso adicionei mais colunas para suporte, mostrando o ranking da menor distância e qual classe o valor pertence, sendo a contagem dos 3 menores ou 5 menores distâncias em seus respectivos grupos.

A utilização de mais de uma amostra (acima de K>1) nos resulta uma escolha mais assertiva, pois o primeiro menor elemento pode estar mais próximo de um grupo, mas se verificar os outros 2 menores elementos (2° menor e 3° menor), este pode pertencer a outra classe, por isso a recomendação do K>1.

Vamos as fórmulas

Coluna de Rankeamento | Colunas H, K e N
=ORDEM(G6;G$6:G$125;1)+CONT.SE($H$5:H5;ORDEM(G6;G$6:G$125;1))

ou em inglês

=RANK(G6;G$6:G$125;1)+COUNTIF($H$5:H5;RANK(G6;G$6:G$125;1))
Coluna Classificada Crescente com o Nome do Grupo | Colunas I, L e O
=ÍNDICE($A$6:$A$125;CORRESP(MENOR(H$6:H$125;LINS($H$6:H6));H$6:H$125;0))

ou em inglês

=INDEX($A$6:$A$125;MATCH(SMALL(H$6:H$125;ROWS($H$6:H6));H$6:H$125;0))
Contagem dos Grupos | Células H2 a H4, K2 a K4 e N2 a N4
=CONT.SE(DESLOC(I$6;0;0;$T$1;1);I2)

ou em inglês

=COUNTIF(OFFSET(I$6;0;0;$T$1;1);I2)
Grupo com a classe que contem o maior grupo | G2, J2 e M2
=PROCV(MÁXIMO(H2:H4);$H$2:$I$4;2;0)

ou em inglês

=VLOOKUP(MAX(H2:H4);$H$2:$I$4;2;0)
Validação Final | Células G3, J3 e M3
=SE($A$2=G2;"OK";"NOK")

ou em inglês

=IF($A$2=G2;"OK";"NOK")

Espero que tenha gostado desse artigo!

Caso tenha alguma sugestão de outra técnica ou melhoria do conteúdo acima, poste aqui nos comentários.

Se gostou, curta e compartilhe este artigo para que todos saibam o que é possível fazer dentro do MS Excel.

E ja conhece o meu novo curso online de Excel?

Abraços a todos e até o próximo artigo!

Fabio BALDINI

Frase do Dia: "Substitua o medo do desconhecido por curiosidade" Autor: Dany Gokey

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *