Py1 : Iris e o vizinho mais próximo

Rafael Munhoz
4 min readMay 19, 2021

--

Classificando dataset Iris com algoritmo KNN

Photo by Kevin CASTEL on Unsplash

O algoritmo dos Vizinhos mais próximos é um método não paramétrico usado para problemas de classificação e regressão. Aqui, usei de K-NN para classificação.

De maneira simples, o algoritmo considera os dados como vetores de n dimensões e utiliza a classe associada aos objetos mais próximos (vizinho) dos dados de treinamento para definir o exemplo não rotulado. O valor de k define o número de vizinhos associado.

O database que escolhi é o clássico Iris Flower Dataset (IFD). Consiste em 50 observações de cada uma das três espécies de Iris (Iris setosa, Iris virginica e Iris versicolor). Quatro características foram medidas em cada amostra: o comprimento e largura de sépalas e pétalas (cm). O objetivo foi treinar o algoritmo KNN para ser capaz de classificar as espécies dadas as medidas desses 4 recursos.

Vamos aos códigos…

O dataset foi carregado da biblioteca “seaborn” e verificado com a função .head() do pandas. Essa função retorna as primeiras n linhas do objeto com base na posição (por padrão as 5 primeiras linhas). Ele serve para testar rapidamente se o objeto contém o tipo de dados esperado.

Em seguida, utilizei a função .info() (pandas) que imprime informações sobre o DataFrame, incluindo o índice dtype, colunas, valores não nulos e uso de memória. Neste caso, o interesse é identificar se existe a presença de valores nulos.

Depois de verificar os dados, usei a função .value_counts() (pandas) que retorna uma série contendo contagens de valores únicos desejados. O retorno da função para coluna “species” confirmou a presença de 3 classes com 50 observações cada.

Visualizando os dados

Para visualizar a relação dos dados em pares a função .pairplot() (seaborn) realiza muito bem essa tarefa, dá uma olhada:

De forma simples e objetiva, o agrupamento em pares de atributos sugere uma alta correlação e um relacionamento previsível, principalmente quanto a espécie de Setosa. A aproximação de parte dos pontos nos agrupamentos de Versicolor e Virginica podem indicar um trabalho maior para o modelo em classificar esses pontos.

Seleção e indexação dos dados

Usando a função .iloc() (pandas) os dados foram particionados em subconjuntos de variáveis independentes (X) e variável dependente (y). As variáveis independentes referem-se aos atributos que devem ser usados para classificar a variável dependente, que representa a classe da espécie.

Normalização dos dados

Com a biblioteca Scikit-Learn (de aprendizado de máquina em Python) a transformação dos dados nas variáveis independente é realizada para evitar que um atributo predomine sobre o outro.

Divisão dos dados em treino e teste

A divisão dos dados em treino e teste foi realizada na proporção de 70% para treino e 30% para teste.

Treinando o modelo

O algoritmo K-NN foi treinado com base nos 3 vizinhos mais próximos (K=3).

Validação do modelo

Tendo como parâmetro para a eficiência do modelo a acurácia, o modelo obteve para k=3, acc. = 0.98.

Matriz de confusão

É uma tabela que permite a visualização do desempenho de um algoritmo de classificação.

De acordo com essa matriz de confusão, o modelo previu erroneamente um exemplo de Virginica como Versicolor (97.8%)

Testando acurácia para diferentes valores de K

Testando a acurácia do modelo para valores de K de 1 a 10 o melhor valor para acurácia acontece com k = 3 (97.8%).

Desconfie sempre que a acurácia for tão positiva (maior que 70%), isso pode ser resultante de diversos problemas durante o desenvolvimento. Aqui o resultado foi aceito pela simplicidade dos dados e popularidade dos resultados.

Isso é tudo, Folks!

Feliz em compartilhar meu primeiro modelo fora da academia. Confira o código completo no meu GitHub.

--

--

Rafael Munhoz

Biólogo compartilhando meus estudos na análise de dados