Buscar

Aprendizado_de_Maquina___Introdu__o_a_Intelig_ncia_Artificial

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

Mais conteúdos dessa disciplina