Prévia do material em texto
Universidade Federal de Minas Gerais Departamento de Ciencias da Computação Curso de Matemática Computacional Prof. Luiz Chaimowicz Disciplina: DCC642 Introdução à Inteligência Artificial Apendizado de Máquina Trabalho Prático II Ivan Gomes da Cruz Matricula: 2016045668 Belo Horizonte, 18 de maio de 2022 Conteúdo 1 Apresentação dos Algoritmos 3 1.1 Knn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Kmeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Classes Utilizadas 3 2.1 Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 ObjetoTeste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.3 Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.4 Knn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.5 Kmeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Resultados 4 3.1 Knn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.1 K = 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.2 K = 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.3 K = 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 K = 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3 Kmeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3.1 K = 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3.2 K = 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4 Análise de Resultados 7 4.1 Knn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Kmeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 Referências utilizadas para o desenvolvimento 8 2 1 Apresentação dos Algoritmos 1.1 Knn Nesse algoritimo, usamos um banco de informações já classificadas como comparativo para no- vos elementos, e assim definiremos a classificação deles. Para isso usamos a distancia euclidiana entre o novo dado e todos já presentes no banco de informações, usamos como coordenadas os atributos dos dados e escolheremos a classificação através da classe mais frequente entre os K pontos mais próximos. Como no caso desse trabalho utilizamos as caracteristicas das petalas e sepalas das Iris. 1.2 Kmeans Nesse algoritimo, iremos separar os dados de entrada em K clusters, através da distância entre eles e K pontos, cada um sendo um centro de seu determinado cluster, assim separaremos os objetos conforme o cluster mais próximo deles. Iremos então reposicionar os centros conforme a media dos pontos de cada cluster, repetimos esse processo até que nenhum objeto mude de cluster. Nesse algoritimo não classificamos em grupos nomeados ou sabemos qual a divisão, apenas separamos em grupos baseados na proximidade das caracteristicas. 2 Classes Utilizadas 2.1 Objeto Essa classe armazena os dados de treino do Knn 2.2 ObjetoTeste Essa classe armazena os dados de teste do Knn e todos os dados do Kmeans, nessa classe estão presentes os atributos de classificação para o Knn e o identificador do cluster no Kmeans. Também possui um método que calcula a distancia desse objetoTeste a um Objeto, esse método pode ser usado tanto no Knn quanto no Kmeans, pois mesmo que no Kmeans não existam elementos da classe Objeto o principio de Liskov me garante que ela pode ser usadas para elementos da classe ObjetoTeste pos ela é derivada de Objeto. 2.3 Cluster Essa classe armazena as informações de cada Cluster no Kmeans (Sua id, seus elementos, o valor de seu centroide) possui como metodos as funções que adicionam e removem elemento de seu vetor de elementos, uma função que retorna seu ID, a função que redefine o ponto central e uma função que imprime os dados desse Cluster (sua id, centroide e o numero de elementos de cada classe do banco de dados que ficou alocada neste centroide no fim da execução). 2.4 Knn Essa classe é responsável por gerenciar a execução do algoritmo do Knn (explicado na seção anterior),armazenar os dados de teste e de treino, preencher a matriz de confusão, calcular as 3 métricas (Acurácia, Precisão,Revocação,F1) e um metodo que imprime os resultados no fim da execução. 2.5 Kmeans Essa classe é responsável por gerenciar a execução do algoritmo de Kmeans (explicado na seção anterior), gerar e armazenar os clusters, guardar os dados que serão classificados, mostrar os resultados. Na impressão dos dados, imprimi também o numero de elementos de cada tipo que estavam presentes em cada Cluster. 3 Resultados 3.1 Knn 3.1.1 K = 2 4 3.1.2 K = 8 3.1.3 K = 32 5 3.2 K = 41 3.3 Kmeans 3.3.1 K = 2 6 3.3.2 K = 3 4 Análise de Resultados 4.1 Knn Na execução do Knn pude notar que quão maior o K pior fica a classificação, dentre os K’s testados neste trabalho o que teve melhor resultado nas métricas foi o K = 2. Para K= 8 as Iris-setosa e Iris-virginica, são classificadas corretamente, mas algumas Iris-versicolor são clas- sificadas de forma errada, aqui podemos ver a importancia de utilizar diferentes métricas já que mesmo errando a Precisão para a Iris-versicolor se mantem 1, já que todas que ele classificou como Iris-versicolor são realmente deste tipo. Já para 32 todas as Iris-versicolor são classifica- das de forma errada. Quando o K aumenta além de 32 ele começa a classificar as demais Iris de forma errada também. O K escolhido por mim foi o 41 pois queria ver se a matriz estabilizava após o 32, já que até ele apenas as Iris-versicolor mudavam de classificação. A partir do 41 as Iris-setosa começa a ser classificadas de forma errada. 4.2 Kmeans O algoritimo de Kmeans não dividiu os elementos em suas classificações originais, para ambos os valores de K o ponto central inicial de cada cluster altera o resultado final, sendo assim para cada execução a função rand() utilizada no código torna o resultado diferente, mas em nenhuma das execuções que tentei com k = 3, a separação foi igual a classificação real das Iris, mas nos clusters dá pra ver uma dominancia de algum tipo de Iris. 7 5 Referências utilizadas para o desenvolvimento https://github.com/marcoscastro/kmeans https://en.wikipedia.org/wiki/K-means_ clustering#Algorithms https://github.com/marcoscastro/knn/blob/master/knn.cpp https://medium.com/@avulurivenkatasaireddy/k-nearest-neighbors-and-implementation-on-iris-data-set-f5817dd33711 http://mnemstudio.org/clustering-k-means-example-1.htm https://en.cppreference. com/w/cpp/container/map https://cplusplus.com/reference/cstdlib/srand/ 8 https://github.com/marcoscastro/kmeans https://en.wikipedia.org/wiki/K-means_clustering#Algorithms https://en.wikipedia.org/wiki/K-means_clustering#Algorithms https://github.com/marcoscastro/knn/blob/master/knn.cpp https://medium.com/@avulurivenkatasaireddy/k-nearest-neighbors-and-implementation-on-iris-data-set-f5817dd33711 http://mnemstudio.org/clustering-k-means-example-1.htm https://en.cppreference.com/w/cpp/container/map https://en.cppreference.com/w/cpp/container/map https://cplusplus.com/reference/cstdlib/srand/ Apresentação dos Algoritmos Knn Kmeans Classes Utilizadas Objeto ObjetoTeste Cluster Knn Kmeans Resultados Knn K = 2 K = 8 K = 32 K = 41 Kmeans K = 2 K = 3 Análise de Resultados Knn Kmeans Referências utilizadas para o desenvolvimento