segunda-feira, 26 de setembro de 2011

C45IDL - classificador por árvores de decisão

Como trabalho da disciplina de Reconhecimento de Padrões e Aprendizado Computacional, implementei um classificador supervisionado que utiliza árvores de decisão binárias.

Disponibilizei o código-fonte e os executáveis no site do projeto C45IDL.

A linguagem escolhida foi IDL, que é uma linguagem proprietária. Todos os usuários do ENVI tem todos os requisitos para utilizar o programa. Para os usuários linux existe ainda a possibilidade de utilizá-lo com o GnuDataLanguage (implementação aberta do IDL).

O objetivo do programa é encontrar as melhores decisões para separar as classes que foram apresentadas para ele através de dados de treinamento. No site do projeto tem uma descrição breve de como utilizar o ENVI para produzir o arquivo de ROI no formato que o aplicativo lê. Basicamente deve-se exportar as ROI para ASCII, guardando no arquivo apenas o identificador das amostras e o valor das bandas.

A figura a seguir apresenta a interface do programa. Este algoritmo divide o conjunto de amostras em treinamento em validação. Portanto o "0.7" significa que 70% das amostras será utilizada como treinamento e 30% como validação.

Os parâmetros "Minimum samples per node" e "Maximum percentual error in a node" são critérios para para decidir quando a árvore deve parar de crescer. O "mínimo de amostras por nó" significa que quando o programa chegar a 25 amostras ele não tentará mais diferenciar as classes de treinamento. É um parâmetro necessário mas pouco eficiente.

Já a "proporção máxima de erro" pode ser utilizada para aceitar ruído nos dados de treinamento. Isso significa que ele considera o nó pronto quando chegar a menos de 1% de ruído. Em imagens menos ruidosas o usuário pode querer diminuir isso para 0% ou aumentar no caso de imagens mais ruidosas.

A figura a seguir apresenta o resultado de uma árvore construída com uma imagem Landsat com os parâmetros inalterados.
Caso o usuário forneça os dados de treinamento mas não os de validação, o programa irá apenas tentar gerar a árvore de decisão no formato que o ENVI lê. Caso seja passada também uma imagem a classificar, ele irá gerar uma imagem classificada como saída.

Como de costume, agradeço a todos que puderem testar e contribuir para o aperfeiçoamento do programa.