Você está na página 1de 2

APR1 - Algoritmos e Programação 1

Curso de Bacharelado em Engenharia de Software


Trabalho 05
Professor: Jorge Francisco Cutigi

Trabalho 05 - KNN

Descrição do Trabalho:
O trabalho consiste na implementação do algoritmo de classificação K-Nearest–Neighbors (KNN)

O algoritmo KNN:
O algoritmo KNN (K-Nearest Neighbors) é um método simples e ao mesmo tempo muito popular e poderoso
de Aprendizado de Máquina. O nome "K-Nearest Neighbors" refere-se ao fato de que o algoritmo toma como base os
K vizinhos mais próximos de um determinado ponto para realizar a classificação de um elemento novo e
desconhecido. A ideia central é que pontos semelhantes tendem a pertencer à mesma classe. Portanto, ao classificar
um novo ponto, o algoritmo identifica os K vizinhos mais próximos e atribui a ele a classe mais frequente entre esses
vizinhos.

Na Figura 1 é apresentado um exemplo. Os pontos marcados como estrela representam uma classe A e os
triângulos uma classe B, ou seja, para todos esses pontos tem-se a classe associada. Imagine, então, que se tenha um
novo elemento (marcado em amarelo com um símbolo de interrogação). O algoritmo do KNN recebe do usuário um
valor K (normalmente ímpar) e classifica o novo elemento de acordo com as classes dos K elementos mais próximos.
No exemplo da Figura, se K é igual a 3, o novo exemplo seria classificado como um triângulo, enquanto se K é igual a
7, ele seria classificado como uma estrela. Existem várias métricas de distância que podem ser utilizadas, sendo a
distância Euclidiana a mais comum.

Figura 1: Exemplo do KNN


Fonte: https://towardsdatascience.com/how-to-find-the-optimal-value-of-k-in-knn-35d936e554eb
Arquivo de dados:
O arquivo de dados iris.data contém uma série de registros. Cada registro é composto por quatro
atributos preditivos (sepal_length, sepal_width, petal_length e petal_width) e um atributo classe
(species). Os atributos preditivos referem-se às medidas de largura e comprimento de pétalas e sépalas de três
espécies de flores Iris. O atributo classe representa qual espécie é aquele registro. O arquivo pode ser baixado aqui:
https://drive.google.com/file/d/1VkYjDmBjK8alUNANDnPiEuF9ozQWvcq1/view?usp=sharing

Proposta:
Você deverá fazer um programa que recebe um nome de arquivo com os dados do conjunto iris.data. o
programa deve ler esse arquivo e armazenar na memória. Após isso, seu programa deve ler dois valores: um número
inteiro K; e o nome de outro arquivo que contém registros sem classificação, ou seja, sem a informação do atributo
species. Por fim, para cada registro sem classificação o programa deve imprimir em qual classe tal registro foi
classificado. Para medir a distância entre os pontos deve ser utilizada a distância euclidiana.

Observações importantes:
● Este trabalho tem peso 3
● O trabalho deve ser feito em grupos de no máximo duas pessoas.
○ Coloque como comentários nas primeiras linhas do código o nome completo dos membros do grupo
● A data de entrega estará informada no moodle
● Para entregar o trabalho, submeta o código fonte no moodle
○ A submissão deve ser feita por apenas um integrante do grupo
● Neste trabalho é permitido utilizar qualquer função padrão do python. Não é permitido o uso de bibliotecas
como numpy, pandas, scikit learn, etc. Se necessário, é permitido utilizar apenas as bibliotecas math e os.
○ A nota será atribuída pela análise do código (que deverão estar corretos, seguirem boas práticas de
programação, e possuírem lógica clara) e execução correta.
○ Plágios terão nota zero.

Você também pode gostar