Py1 : Iris e o vizinho mais próximo
Classificando dataset Iris com algoritmo KNN
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.