Git Product home page Git Product logo

teg's Introduction

Teoria dos Grafos (TEG)

Trabalho de TEG


Alunos: André Felipe Fuck e Kauan Henrique Werlich


Tarefa 1.B

Estrutura do Software:

O software foi dividido em 5 arquivos, dos quais todas estão dentro da pasta src. Estes são:

  • Flores: faz a leitura do arquivo csv do Íris dataset. Passando os dados para uma struct flores.

  • Grafo: faz a leitura e escrita em um arquivo csv, ou txt, da struct Grafo. Essa struct tem como objetivo fazer uma representação intermediária entre a struct Flores e a Matriz de Adjacência.

  • Matriz: faz o processo de transformar os dados obtidos por Flores em um Grafo. Isso ocorre por meio do processo de normalização da distâncias euclidiana.

  • Matriz de Adjacências: é a representação computacional de um grafo e de suas adjacências. Permitindo fazer uma busca por profundidade no grafo.

  • Matriz de Confusão: contém duas estruturas principais, Clusters e Matriz de Confusão. Contendo as funções que fazem o processo de separação do grafo em clusters que representam cada espécie de Íris. Junto a isso a matriz de confusão permite calcular a acurácia.

Comando para rodar o programa:

O programa possui um arquivo Makefile que facilita na de compilação dos arquivos. Para compilar o arquivo basta dar o comando:

make

Para rodar o programa:

make run

Caso queira rodar o programa sem usar Makefile:

gcc main.c src/grafo.c src/flores.c src/matriz.c src/matriz_adjacencias.c src/matriz_confusao.c -o main -lm

Treinamento:

A primeira parte do treinamento foi encontrar uma medida que permitesse criar um grafo com conjuntos dijuntos entre estes. Para isso era necessário encontrar uma metrica que fosse menor que 0.3 e, que tivesse no minimo tres grupos com um numero siginificativo de elementos. Criamos uma função chamada log_clusters, presente no arquivo matriz de confusão, que guardava em arquivo texto vários clusters usando metricas diferentes.A partir disso encontramos a metrica 0.057, que gerava 3 clusters com um número elevado de elementos.

Cada cluster contém o número de elementos, um array com os índices dos vértices, uma struct Flor para calcular o centro geométrico do cluster e a espécie que representa a maioria dos vértices.

Contudo não foi possível achar uma métrica que gerasse apenas três clusters. Então foi necessário englobar os clusters menores nos maiores, foram englobados os clusters que tivessem a menor distância euclidiana de um cluster grande.

Avalição

A partir desse treinamento foi possível separar o grafo em três clusters, o histograma abaixo representa a relação entre o número de elementos de cada cluster e a sua especie.

grafico numero de elementos de cada especie

Para avaliar os resultados do Clustering, utilizamos uma matriz de confusão para calcular a acurácia de nosso modelo. A tabela abaixo mostra a matriz de confusão.

Setosa Versicolor Virginica
Setosa 50 4 6
Versicolor 0 40 3
Virginica 0 6 41

A partir disso foi possível calcular a acurácia de cada espécie.

Especie Acuracia
Setosa 0.933
Versicolor 0.913
Virginica 0.9

Representação gráfica:

Na implementação gráfica usamos o script em python feito pelo monitor da disciplina. Usamos o programa que estava no diretório do Github do monitor.

Infelizmente não conseguimos rodar o grafo em 3D. Então geramos uma versão 2D. Segue a baixo a imagem do grafo:

grafo

teg's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.