Agrupando Valores dos Atributos

Já foram apresentados dois tipos de testes para atributos, o teste em atributos continuos e o teste em cada valor para atributos discretos.Na maioria das vezes estes dois tipos de testes se apresentam suficientes, mas quando nos deparamos com um conjunto muito grande de valores para um atributo, a partição feita neste atributo irá gerar muitos subconjuntos pequenos, com isso o padrão existente torna-se indetectável para esses subconjuntos, e o uso do critério gain ratio irá excluir esse atributo se ele tiver um conjunto muito grande de valores, mesmo sendo um atributo decisivo na classificação dos casos.

A solução apresentada para resolver este tipo de problema é agrupar os valores dos atributos em subconjuntos, com isso a árvore de decisão teria um galho para cada um desses grupos de valores.Alguns programas como CLS [Hunt at el, 1966] e CART fazem o agrupamento em apenas dois conjunto de valores, chamado agrupamento binário, já no c4.5 o número de grupo de valores pode variar.

Em alguns dominios o agrupamento pode ser facilmente visualizado, assim pode-se fornecer a informação ao sistema com valores já agrupados.

Se tivermos um atributo com n valores, existem 2^(n-1) - 1 possibilidades de agrupamento para um agrupamento binário.Portanto, mesmo para agrupamentos em dois grupos de valores, torna-se muito caro verificar todas as possibilidades e a vezes até impraticável no caso de grandes valores para n.Já foi provado que, para agrupamentos binários, se existem apenas duas classes é possível ordenar os valores de modo que o melhor agrupamento será um corte nesta sequência, com apenas n-1 possibilidades.Para casos com mais de duas classes é possível criar duas superclasses que contenham as outras, com o objetivo de encontrar o agrupamento para valores de atributos.O problema em agrupamento binário esta que ele força a divisão, com isso pode perder o padrão existente na base de atos.

Algoritmo para o Agrupamento de Valores

O algoritmo que será apresentado irá gerar um agrupamento em números variáveis de grupos de valores, mas não será o melhor agrupamento.

Os grupos de valores inicialmente são compostos por apenas um valor cada e a cada ciclo, caracterizado pela geração de todas as combinações dois a dois, o c4.5 avalia se houve um aumento no critério de escolha, caso tenha ocorrido o processo é aplicado novamente para esses grupos de valores que geraram este aumento, caso contrário o algoritmo para, o mesmo ocorrendo se o número de grupos for igual a dois.

Dependendo do critério de escolha a ser utilizado o agrupamento poderá ser bem diferente.Se o critério for o gain ratio, o ganho de informação poderá aumentar a cada ciclo, convergindo para apenas dois grupos de valores, pois o "gain" permanecerá quase sempre igual, mas agrupando os valores o número de casos pertencentes a cada subconjunto da partição aumentará, já que diminui o número de subconjuntos, e com isso o split info diminui.Já o critério gain irá unir poucos valores, pois não existe nada para normalizar o aparente ganho fornecido quando um atributo possui um número grande de valores, ou seja ele irá comecar com um ganho quase máximo e com isso dificilmente um agrupamento irá fornecer um ganho menor.

Exemplo

Para ilustrar o algoritmo sera feito uso da base de dados Soybean, composto por 35 atributos, 19 classes, e 683 casos de treinamento.Os passos do algoritmo são mostrados na figura 7-1, para o atributo stem canker, que é composto pelos valores none, below soil, above soil e above 2ne node.Na primeira secção da tabela é apresentado os quatro grupos iniciais e o split info, gain, e gain ratio, se for utilizado este agrupamento.O próximo ciclo do algoritmo é gerar todas as combinações dois a dois para o grupo atual, que são mostradas na segunda seção da tabela.Como houve aumento no gain ratio, de 0.509 para 0.531, o agrupamento que gerou esse aumento é então selecionado, e , a partir deste novo grupo de valores, {none},{below soil},{above soil, above 2nd node}, são geradas todas as combinações dois a dois.Como neste terceiro ciclo não houve aumento no gain ratio em relação ao ciclo anterior ,o algoritmo para por aqui.Observando que se o critério gain fosse utilizado no agrupamento, o algoritmo pararia no segundo ciclo, portando não teriamos agrupamento para este atributo.


        Valores dos atributos agrupados           Split   Split   Gain
                                                   info   gain   ratio

{none},{below soil},{above soil},{above 2nd node} 1.677   0.853    0.509
 

{none, below soil},{above soil},{above 2nd node}  1.403   0.609    0.434
{none, above soil},{below soil},{above 2nd node}  1.419   0.638    0.450
{none, above 2nd node},{below soil},{above soil}  0.909   0.358    0.394
{none},{below soil, above soil},{above 2nd node}  1.567   0.813    0.519
{none, {below soil, above 2nd node},{above soil}  1.456   0.704    0.484  
{none},{below soil},{above soil, above 2nd node}  1.467   0.780    0.531


{none, below soil},{above soil, above 2nd node}   1.194   0.535    0.448
{none, above soil, above 2nd node},{below soil}   0.621   0.214    0.345
{none},{below soil, above soil, above 2nd node}   1.233   0.639    0.518

figura 7-1

 

Quando Agrupar?

Uma opção seria fazer uma analise antes do processo de construção da árvore de decisão começar, inserindo novos atributos com número reduzido de valores, já agrupados, em lugar dos atributos originais.Apesar desta opção ser computacionalmente econômica, não irá gerar uma boa árvore de decisão, já que o processo não ocorre durante a sua geração.

Outra alternativa seria determinar o agrupamento depois que o atributo teste foi escolhido.O problema seria que o gain ratio sofre alterações conforme são feitos os agrupamentos, desta forma um atributo que possue baixo gain ratio, apesar de que quando agrupado possua um alto gain ratio, não seria escolhido para teste.

A terceira opção, usada no c4.5, encontra todos os grupos de valores, para atributos com varios valores, cada vez que o programa avaliar a divisão dos casos de treinamento.O problema com esta opção é o grande tempo computacional exigido, por esta razão o agrupamento não é colocado como default pelo programa, sendo necessário utilizar o opção -s para chamá-lo.