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:

31-08pic01.JPG
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:

31-08pic02.JPG
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:

31-08pic03.JPG
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:

31-08pic04.JPG
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”:

31-08pic05.JPG
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:

31-08pic06.JPG
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):

31-08pic07.JPG
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:

31-08pic08.JPG
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:

31-08pic09.JPG
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:

31-08pic10.JPG
Figura 10: Compilando a rede

Por fim, chega-se à rede final, que demonstra as probabilidades a priori (não condicionais) associadas às variáveis:

31-08pic11.JPG
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%:

31-08pic12.JPG
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:

31-08pic13.JPG

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.