TazzSoni / CassificadorTipoVinho

0 stars 0 forks source link

Logo da UDESC Alto Vale


Classificador de tipo de cultivo de vinho

Atividade desenvolvida para a disciplina de Inteligência Computacional do Centro de Educação Superior do Alto Vale do Itajaí (CEAVI/UDESC)

Sumário

Equipe

Problema

O problema será classificar corretamente o tipo de cultivo de determinado vinho, baseando-se em um conjunto de componentes químicos que compõem este vinho.

Dataset

Este dataset é o resultado de análises quimicas em vinhos fabricados na mesma região da Itália, porém derivados de três tipos distintos de cultivos. A análise determinou a quantidade de 13 substâncias encontradas em cada um dos três tipos de cultivos.

Como features temos: "Tipo" - número que diz uma classe de vinho específica (essa será a classe alvo);

  1. Teor Alcoólico;
  2. Ácido málico;
  3. Cinzas;
  4. Alcalinidade de cinzas;
  5. Magnésio;
  6. Fenóis totais;
  7. Flavonóides;
  8. Fenóis não flavonóide;
  9. Proantocianidinas;
  10. Intensidade da cor;
  11. Matiz;
  12. OD280 / OD315 de vinhos diluídos;
  13. Prolina;

Número de instâncias de cada tipo de cultivo de vinho:

Em inglês o dataset fica com os seguintes nomes de features:

  1. Type;
  2. Alcohol;
  3. Malic acid;
  4. Ash;
  5. Alcalinity of ash;
  6. Magnesium;
  7. Total phenols;
  8. Flavanoids;
  9. Nonflavanoid phenols;
  10. Proanthocyanins;
  11. Color intensity;
  12. Hue;
  13. OD280/OD315 of diluted wines;
  14. Proline;

Técnica

Para esta técnica como indicado em aula como uma ótmia opção para classificadores, foi utilizado a rede Multilayer Perceptron.

Conforme mostrado em aula, foi utilizado o software WEKA, que se mostrou uma ferramenta muito útil, tanto para aprendizado, como para propriamente a aplicação a área de inteligência computacional. Com a facilidade do software, se foi testando modelos de aplicação de redes Multilayer Perceptron. Tendo em vista a classe alvo para o nosso classificador, o software permite, após carregar corretamente o dataset, que se selecione vários tipos de técnicas diferentes para execução.

Resultados

Inicialmente foi rodado o teste com a rede Multilayer Perceptron, com seus parâmetros em default, usando o dataset inteiro como traing set. Como visto durante execuções, usando o traing set se tem uma taxa de erro mais baixa, e desta forma foi executado uma bateria de testes para encontar a melhor configuração para uma rede Multilayer Perceptron, e após isso será aplicados testes com divisão de conjunto de treio e testes, como também com validação cruzada.

Seguindo foram obtidos os seguintes resultados:

image

image

Mesmo sendo os parâmetros default setados no software, a rede Multilayer Perceptron, conforme mostrado em aula, mostrou-se sendo realmente uma ótima escolha para um classificador. Mas seguimos a bateria de testes, afim de mitigar nossa taxa de erros.

Segunda bateria de testes, aumentamos as camadas ocultas para 10 e adicionamos mais 5 camadas de saída.

image

E obtivemos os seguintes resultados:

image

Obteve-se uma leve melhora, porém não muito significativa. Realizando mais algumas rodadas de testes com diferentes construções de camadas ocultas e de saída, a configuração que mostrou um resultado melhor foi:

image

E obtivemos os seguintes resultados:

image

Um último passo que foi dado, foi aumentando o número de épocas com a finalidade de ver o comportamento da rede:

E obtivemos os seguintes resultados:

image

Notou-se uma melhora significativa aumentando o número de épocas, e após mais algumas rodadas de testes, verificou-se que a medida que se aumenta o número de épocas nosso modelo diminui sua taxa de erro, porém em contra partida, aumenta o tempo de processamento. Por exemplo, com 1000 épocas tivemos um tempo de procesamento de 2.6 segundos, enquanto com 3000 épocas o tempo foi 5.17 segundos, ou seja, quase se dobrou o tempo de construção do modelo. Visando uma idéia que este modelo de classificação possa ser aplicado em outras realidades, optei manter ele em 3000 épocas pois sua taxa de erro foi muito abaixo.

Em uma próxima etapa de testes, tendo em vista um modelo quase definido, foi executado testes com validação cruzada (k-fold) e divisão de bloco de treino e teste. Para testes executados com validação cruzada (k-fold) com k=10 obteve-se os seguintes resultados:

image

Abaixo podemos observar com os X's maiores onde houve erro no modelo.

image

Então foi testado com um pencentual de divisão do dataset de 90% para treino e 10% para teste e os resultados foram os seguintes:

image

Devido a diferença significativa nesses ultimo teste, notou-se que com um conjunto de treino maior o modelo se mostrou com uma precisão maior. Com uma ferramenta de uso muito eficiente, o Weka permite que nosso modelo seja salvo e carregado diretamente em uma aplicação java. Para a etapa de testes e finalização da aplicação em java, usando java Swing, foi separado aleatoriamente 10% do dataset para testes reais, e foram obtidos os seguintes resultados:

image

Estes resultados foram avaliados como satisfatórios para o modelo em si.

Instruções de Uso do Software

Software de uso simples, seguindo no diretório da aplicação, deve-se usar um compilador Java (preferencialmente NetBeans), e importar o projeto. Após, execute o projeto e atribua valores das features e clicando em "Aplicar teste", a aplicação irá classificar seu vinho com qual o tipo de cultivo mais apropriado.

Vídeo

https://youtu.be/7i00HM8vaYI