Redes Bayesianas (exemplo de aplicação)
No último artigo foi apresentada a base teórica que subsidia a extração de conhecimento em bases de dados por redes bayesianas, o que pode ser então praticado neste momento por meio do demo de um software específico para redes bayesianas, o NETICA, marca registrada da Norsys Software Corporation.
Antes de sua utilização, devemos contextualizar o objetivo aqui, que é extrair conhecimento de forma automática a partir de uma base de dados hipotética contendo um número seqüencial de candidatos e mais três variáveis: Aprovado, Cursinho e IBL (Internet Banda Larga), contendo dois atributos possíveis cada (Sim e Não). Ver Tabela 1:
Tabela 1: Dados de trabalho
Candidato (Nº Seqüencial) |
Aprovado |
Cursinho |
IBL |
1 |
Sim |
Nao |
Sim |
2 |
Nao |
Sim |
Nao |
3 |
Sim |
Sim |
Nao |
4 |
Nao |
Nao |
Nao |
5 |
Sim |
Sim |
Nao |
6 |
Sim |
Sim |
Sim |
7 |
Nao |
Sim |
Nao |
8 |
Nao |
Sim |
Nao |
9 |
Sim |
Nao |
Sim |
10 |
Nao |
Sim |
Nao |
11 |
Sim |
Sim |
Nao |
12 |
Nao |
Nao |
Nao |
13 |
Sim |
Sim |
Nao |
14 |
Sim |
Sim |
Sim |
15 |
Nao |
Sim |
Nao |
16 |
Nao |
Sim |
Nao |
17 |
Sim |
Nao |
Sim |
18 |
Nao |
Sim |
Nao |
19 |
Sim |
Sim |
Nao |
20 |
Nao |
Nao |
Nao |
21 |
Sim |
Sim |
Nao |
22 |
Sim |
Sim |
Sim |
23 |
Nao |
Sim |
Nao |
24 |
Nao |
Sim |
Nao |
Nosso interesse aqui é calcular as probabilidades associadas a dois eventos específicos, com base nos dados acima, quais sejam, a de um candidato ser aprovado, dado que fez cursinho; e a de um candidato ser aprovado, dado que não possui internet de banda larga (IBL) em casa.
Para responder a esses questionamentos, inicialmente assumimos aqui a já conhecida hipótese prévia de independência condicional - dizemos que Cursinho é condicionalmente independente de IBL, dado Aprovado, se a distribuição de probabilidades de Cursinho é independente do valor de IBL, dado o valor de Aprovado. Com isso, e de posse de nossos conhecimentos de probabilidades consolidados no artigo anterior, podemos facilmente calcular algumas probabilidades a priori e a posteriori, a partir da tabela 1, que serão úteis para a construção e validação das probabilidades a serem aprendidas automaticamente pelo NETICA:
Inicialmente, vale dizer que a parte gráfica da rede será predefinida pelo usuário e seguirá o seguinte esquema em forma de grafo:
Figura 1: Estrutura gráfica da rede
Para executar esse layout no NETICA, o leitor poderá direcionar-se ao endereço eletrônico http://www.norsys.com/netica.html, onde pode obter todas as informações técnicas e tutoriais sobre o NETICA, as condições de licenciamento e de uso das versões com ou sem password, e pode fazer o download para experimentar a versão free do NETICA para Windows 95 ou superior, Linux ou Macintosh, que é uma versão demo que proporciona capacidade de criar redes bayesianas plenamente funcionais, mas limitadas até 15 nós, o que é suficiente para o escopo ilustrativ
o deste artigo. O arquivo baixado ao ser executado extrai automaticamente seu conteúdo para um diretório a ser indicado pelo usuário. Após a extração, para iniciar o aplicativo deve-se executar o arquivo Netica.exe, que inicialmente notifica o usuário de que o programa estará atuando com funcionalidade limitada, a menos da utilização de uma password. Neste ponto deve-se clicar no botão “Limited Mode”, que inicia o aplicativo propriamente dito na modalidade limitada (free).
O primeiro passo para formar uma rede bayesiana é seguir, com o mouse, o fluxo File ? New Network, conforme a Figura 2:
Figura 2: Criando nova rede
Clicando em New Network, uma nova rede abre-se na janela principal do aplicativo e o leitor poderá nomear e salvar sua rede onde desejar. Em seguida deve-se adicionar três novos nós à rede, e isso se faz clicando em Modify ? Add Nature Node, como segue:
Figura 3: Adicionando nós
Após isso, deve-se clicar com o cursor do mouse internamente à janela da “minharede”, para posicionar o novo nó adicionado, e devemos mesmo fazer esse procedimento de adição três vezes, chegando à seguinte disposição gráfica:
Figura 4: Rede parcial
Falta agora renomear as variáveis, inserir seus atributos possíveis e adicionar os arcos de ligação, tudo conforme requisita nosso exemplo. Para renomeá-las, basta dar um duplo clique em um nó e se abre o seguinte painel, no caso do nó “A”:
Figura 5: Painel de especificações para o nó A
Para alterar o nome do nó, basta digitar “Aprovado” na caixa de texto “Name” demarcada pela elipse na Figura 5. Quanto aos atributos, observe-se que na mesma figura há uma caixa de seleção “States”. Esta caixa possui internamente como default os atributos “True” e “False” (este não visível na figura), que devem ser alterados para “Sim” e “Não”. Clicando no botão “Delete”, True será deletado e automaticamente surgirá o atributo “False”, mas caso o leitor queira deletar “False” pelo botão “Delete”, o programa não deixará, emitindo mensagem de que um nó deve possuir pelo menos um atributo. A solução é marcar ou selecionar o atributo False com o mouse e digitar diretamente “Sim” em seu lugar. Após isso, como “True” foi deletado, deve-se clicar em “New” para adicionar um novo atributo e digitar “Nao” no campo de texto da caixa de seleção. Com o botão “New” pode-se acrescentar quantos atributos forem necessário, mas aqui todas as três variáveis possuem somente os dois atributos já mencionados, e o importante é que o usuário se certifique que não há nem falta e nem excesso de atributos, sob pena do algoritmo de aprendizado não funcionar adequadamente. Após executar esse procedimento de renomear e inserir atributos para todas as variáveis, deve-se fechar o painel da Figura 5 clicando no botão “OK”. Para adicionar os arcos de ligação, deve-se clicar em Add Link, conforme segue:
Figura 6: Adicionando arcos de ligação
Com isso, o ponteiro do mouse se torna uma pequena seta indicadora de link que deve ser utilizado pelo método de clicar e arrastar para ligar dois nós entre si. Primeiramente deve-se clicar no nó “Aprovado”, de forma a que ali a seta de ligação tenha sua origem em relação aos demais nós. E assim o leitor deverá chegar ao layout mostrado anteriormente na Figura 1, e a rede estará apta a aprender probabilidades, nosso próximo passo.
Para se trabalhar com o programa deve-se inicialmente salvar o arquivo de dados da Tabela 1 em formato texto (extensão txt), dados separados por tabulações e nomes das variáveis na primeira linha. Além disso, um cabeçalho especial deve ser inserido antes da primeira linha de dados do arquivo para que este seja lido. O arquivo pronto para leitura pelo NETICA fica com o seguinte aspecto (não precisamos do número seqüencial do candidato):
Figura 7: Arquivo pronto para se lido pelo NETICA
Agora basta que o NETICA leia o arquivo de dados e aprenda as probabilidades ali consignadas. Para isso basta clicar em Relation ? Incorp Case File, como na Figura 8:
Figura 8: Leitura de um arquivo de texto para aprendizado numérico
Após, aparecerá uma caixa para seleção do arquivo a ser lido, e que, ao ser efetivamente selecionado, provoca o NETICA a emitir uma caixa de texto conforme segue:
Figura 9: Designação do fator de amortecimento do aprendizado
Neste ponto clique em “Okay”, para um aprendizado sem amortecimento, e após o processamento dos dados, deve-se clicar em Network ? Compile, como segue:
Figura 10: Compilando a rede
Por fim, chega-se à rede final, que demonstra as probabilidades a priori (não condicionais) associadas às variáveis:
Figura 11:
Para verificar se o aprendizado deu-se corretamente, podemos retornar à primeira e segunda questões objetivo do estudo:
1) Qual a probabilidade de um candidato ser aprovado dado que fez cursinho?
2) Qual a probabilidade de um candidato ser aprovado dado que não possui internet de banda larga em casa?
Para respondê-las basta instanciar a rede de acordo com as probabilidades condicionais associadas às questões de pesquisa. Por exemplo, quanto à questão “2”, clicando no atributo “Não” da variável IBL, vemos diretamente que esta probabilidade condicional equivale a 33,33%:
Figura 12:
Isso confirma que o aprendizado deu-se de acordo com a probabilidade teórica calculada pela equação 11 e valida nossa rede. Em relação à primeira questão, do cursinho, na verdade o leitor pode instanciar à vontade a variável Cursinho ou mesmo a variável Aprovado e verá que elas não influenciam-se mutuamente por serem independentes entre si, como pode ser verificado pelo fato de que:
Agora o usuário pode instanciar e “brincar” à vontade com sua nova rede bayesiana - um dos principais diferenciais do NETICA é sua excelente e interativa interface gráfica - ou construir outras a seu gosto e necessidades.
O leitor poderia ainda estar se perguntando qual seria a vantagem do aprendizado bayesiano, se as probabilidades que interessam ao exemplo foram calculadas analiticamente pelas equações 11 e 12. Ocorre que estas foram calculadas a partir da Tabela 1, que contém apenas três variáveis e 24 registros. No caso de uma tabela com centenas de variáveis e milhares de registros esse processo seria bem mais trabalhoso e certamente requisitaria algumas linhas de código.
Por fim, deve-se ressaltar que não realizamos aqui o aprendizado de estruturas, somente o de probabilidades numéricas, e isso só confirma que as redes bayesianas apresentam muitas outras características e potencialidades que podem ser exploradas pelo usuário profissionalmente, academicamente ou simplesmente por lazer. Nesse contexto, existem ainda outros excelentes softwares disponíveis, como o MSBN da Microsoft (livre para fins não comerciais) e o Hugin (versão demo livre), dentre outros, que podem constituir-se em bases de novos aprendizados e pesquisas. Como bibliografia adicional, segue o link para um excelente manual de construção e utilização de redes bayesianas por meio do NETICA. Um abraço e até a próxima.
Alexandre.
Bibliografia:
Nassar, Silvia M. Manual de Utilização da Shell NETICA. Acesso em http://inf.ufsc.br/~silvia.