• Nenhum resultado encontrado

Como atrás observámos, a aplicação de algoritmos da área da computação evolucionária para descoberta de regras, usa, tipicamente, uma de duas abordagens para codificação das regras: a abordagem de Michigan ou a abordagem de Pittsburgh. Na aborda- gem de Michigan, cada indivíduo/partícula codifica uma única regra, enquanto que na abordagem de Pittsburgh, cada indivíduo/partícula representa um conjunto de regras. Em ambos os casos, as regras são tradicionalmente representadas à custa de vectores binários.

A escolha da abordagem depende, fortemente, do tipo de regras que pretendemos descobrir, o que por sua vez está relacionado com o tipo de tarefa de aprendizagem

que nos propomos resolver. No caso do problema de classificação estamos, geralmente, interessados em avaliar o conjunto de regras como um todo, em oposição à apreciação individual das regras. Ou seja, a interacção entre as regras é importante, e por esse motivo, para tarefas de classificação, a abordagem de Pittsburgh apresenta-se mais natural [Freitas, 2003].

Neste caso estamos interessados num conjunto de regras que se pretende que sejam usadas, não como um classificador, mas como uma heurística que permita resolver o problema da marcação das PdD. Apesar disso, a abordagem de Pittsburgh continua a parecer mais natural, dado que nos permite avaliar aspectos do conjunto de regras como a sua parsimónia. No entanto, ela levanta uma dificuldade acrescida relacionada com o tamanho dos indivíduos. Se assumimos que um indivíduo codifica um conjunto de regras precisamos de decidir como lidar com a cardinalidade desse conjunto. São válidas duas opções: ou se estabelece um número fixo de regras, ou se adopta uma re- presentação de tamanho variável. No primeiro caso, todos os indivíduos são compostos pelo mesmo número de regras, viabilizando a adopção de uma representação tradicio- nal de tamanho fixo. Na segunda opção, a admissão de indivíduos de tamanho diverso, permite explorar conjuntos de regras com diferentes graus de parsimónia. Neste caso, o algoritmo de procura tem não só a responsabilidade de descobrir as regras, como pode ser levado a descobrir o conjunto de regras mais compacto.

Na representação de tamanho fixo, o problema está em escolher o número de regras que queremos que cada indivíduo codifique, já que geralmente não sabemos quantas regras são necessárias para resolver um particular problema de classificação. Por outro lado, com uma representação de tamanho variável, enfrentamos um problema de difícil resolução relacionado com o controlo do tamanho dos indivíduos. É um facto esta- belecido, que nas representações de tamanho variável os indivíduos têm tendência a crescer desmesuradamente ao longo do processo de evolução. Trata-se de um problema bem conhecido, denominado em inglês por bloat problem [Poli, 2003]. Esta explosão no crescimento dos indivíduos leva a óbvios custos computacionais.

Após ponderadas as vantagens e desvantagens de cada uma das abordagens optámos pela abordagem de Michigan. Esta decisão foi sustentada pelo facto dos conjuntos de treino serem de dimensão considerável, sendo por isso expectável um tempo de execução significativo para o algoritmo de classificação, o qual seria agravado se não conseguíssemos resolver, de forma eficaz, o problema da explosão do tamanho dos indivíduos no algoritmo de procura. Os resultados conseguidos no trabalho anterior, usando a abordagem de Michigan, condicionaram também esta decisão.

Na estratégia adoptada, cada indivíduo representa uma regra da forma Se Antecedente Então Consequente, onde Antecedente representa uma conjunção dos atributos de predição e Consequente um dos valores possíveis do conjunto Y = {Sim, N˜ao}.

5.5.1 Representação do antecedente

Uma forma natural de codificar o antecedente de uma regra (uma conjunção de condi- ções) num indivíduo é utilizando uma representação binária. Vamos assumir que um determinado atributo pode tomar um de k valores discretos . Estes valores podem ser codificados usando k bits. O valor do atributo na posição i, ai, com i = 1, ..., k, faz parte da condição da regra, se e só se o bit correspondente é igual a 1.

A título ilustrativo, consideremos o seguinte pequeno exemplo. Pretendemos repre- sentar o antecedente de uma regra que tem apenas em consideração um atributo de predição, por exemplo Tempo, cujos valores possíveis são Sol, Chuva, Nevoeiro e Vento. Neste caso, a codificação deste antecedente numa representação binária, implicaria defi- nir um determinado alinhamento para os valores do atributo Tempo. Este alinhamento pode ser estabelecido à custa do seguinte tuplo, hSol, Chuva, Nevoeiro, V entoi. A dimensão do tuplo define a dimensão do vector binário necessário para codificar o an- tecedente da regra. Por sua vez, o ordenamento do tuplo determina de que forma cada valor binário deve ser interpretado. No caso particular deste exemplo, teríamos necessidade de adoptar um vector binário constituído por 4 bits, sabendo que o pri- meiro bit se refere ao valor Sol, o segundo ao valor Chuva, e assim sucessivamente. Concluindo, uma sequência do tipo h1001i permitiria codificar o seguinte antecedente, "Se Tempo=Sol OU Tempo=Vento Então...".

Como podemos ver, este tipo de representação permite definir conjunções de disjun- ções lógicas. A inclusão de outro atributo implicaria apenas concatenar a sequência de bits necessária para codificar os respectivos valores. Daqui decorre que este tipo de codificação pode ser estendida de forma a incluir um número qualquer de atributos, as- sumindo que todos estão ligados pela conjunção lógica. Uma situação particularmente importante deste tipo de representação surge quando todos os bits de um determinado atributo são iguais a 1. A leitura directa desta situação indica que qualquer valor é possível para esse atributo, o que em termos da interpretação lógica da conjunção definida no antecedente da regra, significa que esse atributo em particular pode ser ignorado.

Como vimos na secção anterior, os valores possíveis para os atributos de predição, rela- cionados com a informação de contexto, pertencem ao conjunto de etiquetas adoptado para o corpus usado para descobrir as regras. A cardinalidade deste conjunto varia de corpus para corpus, no entanto, os valores mínimos usados situam-se entre as 20 etiquetas e os máximos ultrapassam as 80. Uma representação como a que acabámos de descrever conduziria a indivíduos demasiado longos. Por este motivo optámos por uma representação ligeiramente diferente, inspirada na representação usada por Wilson em [Wilson and Heywood, 2005].

primeiro bit indica se o atributo deve ou não ser contemplado no antecedente da regra, enquanto os restantes n bits codificam o valor para o atributo em questão. O número, m, de etiquetas usadas na marcação do corpus de treino determina o valor de n. Assim, ndeve tomar o valor do menor inteiro que permite definir o maior binário, b, através da sequência de n bits, de forma a que b m. O valor codificado pelos n bits é usado para indexar uma tabela de m entradas, que guardam as etiquetas do conjunto de etiquetas considerado. Se o valor decimal, i, correspondente ao binário b ultrapassar o valor de m, então o resto da divisão inteira de i por m é usado. O bit extra adoptado para cada atributo permite ignorar esse atributo no antecedente da regra, tal como acontece na representação ilustrada em cima, quando todos os bits são iguais a 1 (ver Figura 5.1).

1 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 … …

Exemplo da sequência inicial de genes de um cromossoma, assumindo 5 bits para codificar o índice para a tabela de etiquetas.

Considerar a etiqueta da 3ª palavra à esquerda.

Codificação da etiqueta da 3ª palavra à esquerda – índice para a tabela que guarda as etiquetas do conjunto de etiquetas adoptado. Ignorar a etiqueta da 2ª palavra à esquerda. Ignorar a etiqueta da 2ª palavra à esquerda.

Figura 5.1: Representação binária dos atributos relacionados com o contexto.

Os restantes nove atributos foram codificados à custa de 18 bits. Cada par de dois bits indica se o atributo deve ou não ser considerado, e se a propriedade correspondente está, ou não, presente (ver Figura 5.2). Assim, cada indivíduo é constituído por 6 ⇥ (n + 1) + 2⇥ 9 bits.

Tal como na representação típica, os atributos estão ligados por conjunções lógicas. No entanto, a representação escolhida não permite contemplar disjunções entre diferentes valores possíveis, para um determinado atributo. Não obstante, este conhecimento pode ser expresso por diferentes regras para a mesma classe (ver exemplo da Figura 5.3).

0 1 1 0 0 0 0 1 0

O atributo “a palavra é a primeira palavra da frase” é falso.

O atributo “a palavra começa por maíuscula” é verdadeiro.

……….. Ignorar o atributo “a

palavra começa por maiúscula”.

Considerar o atributo “a palavra é a primeira palavra da frase”.

Figura 5.2: Representação binária dos atributos relacionados com as características da pala- vra.

5.5.2 Representação do consequente

Em geral, existem três formas distintas de representar o valor da classe do objecto alvo de classificação num algoritmo evolucionário [Freitas, 2003]. Uma possibilidade passa por codificar a classe no genoma do indivíduo, submetendo-a ao processo de evolução ([de Jong et al., 1993], [Greene and Smith, 1993]). A segunda, estabelece que todos os indivíduos da população pertencem à mesma classe, a qual se mantém inalterada ao longo da execução do algoritmo. Esta opção determina que, se pretendemos en- contrar um conjunto de regras de classificação para predizer a classe de um objecto com k valores distintos, precisamos de correr o algoritmo pelo menos k vezes. Em cada uma das i-nésimas execuções, o algoritmo apenas descobre regras que predizem o i-nésimo valor ([Janikow, 1993]. A terceira alternativa consiste em escolher o valor para a classe de forma mais ou menos determinística. O valor escolhido poderá ser aquele que possui mais exemplos representativos, no conjunto de exemplos que satis- fazem o antecedente da regra ([Giordana and Neri, 1995]), ou o valor que maximiza o desempenho do indivíduo ([Noda et al., 1999]).

Como começámos por referir no início desta secção, na estratégia adoptada no tra- balho realizado no âmbito desta tese, o problema de classificação foi dividido em n problemas distintos. Cada um deles responsável pela descoberta de regras para cada um dos n objectos de classificação. Determinando, assim, que os valores possíveis das classes pertencem ao conjunto discreto de apenas dois elementos, Y = {Sim, N˜ao}. Por conseguinte, optámos por seguir a segunda alternativa, já que apenas nos inte- ressa descobrir regras positivas. Desta decisão decorre que não tivemos necessidade de codificar o valor da classe no genoma dos indivíduos.

Se (Tempo="Sol” OU Tempo="Vento”) E Humidade=“Baixa” ENTÃO Fazer_desporto=“Sim” R1

Se Tempo="Sol” E Humidade=“Baixa” ENTÃO Fazer_desporto=“Sim” R1.1

Se Tempo="Vento” E Humidade=“Baixa” ENTÃO Fazer_desporto=“Sim” R1.2

Figura 5.3: Exemplo de desdobramento de uma regra, que contempla conjunções de disjun- ções de valores de atributos de predição, num conjunto de regras equivalente.