29.01.2014 Views

Técnicas de Classificação

Técnicas de Classificação

Técnicas de Classificação

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

10<br />

10<br />

<strong>Classificação</strong>: Definição<br />

Mineração <strong>de</strong> dados<br />

<strong>Classificação</strong>: conceitos básicos e árvores<br />

<strong>de</strong> <strong>de</strong>cisão<br />

Apresentação adaptada do material <strong>de</strong> apoio do livro:<br />

Introduction to Data Mining<br />

Tan, Steinbach, Kumar<br />

Dada uma coleção <strong>de</strong> registros (conjunto <strong>de</strong><br />

treinamento,training set )<br />

– cada registro contém um conjunto <strong>de</strong> atributos, e<br />

um dos atributos é a classe.<br />

Encontre um mo<strong>de</strong>lo para o atributo classe<br />

como uma função dos valores <strong>de</strong> outros<br />

atributos.<br />

Objetivo: a classe <strong>de</strong>ve ser atribuída tão<br />

acuradamente quanto possível para novos<br />

registros.<br />

– Um conjunto <strong>de</strong> teste (test set) é usado para<br />

<strong>de</strong>terminar a acurácia do mo<strong>de</strong>lo. Geralmente o<br />

conjunto <strong>de</strong> dados é dividido em conjunto <strong>de</strong><br />

treinamento e conjunto <strong>de</strong> teste.<br />

Ilustrando a Tarefa <strong>de</strong> <strong>Classificação</strong><br />

Exemplos <strong>de</strong> Tarefas <strong>de</strong> <strong>Classificação</strong><br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

1 Yes Large 125K No<br />

2 No Medium 100K No<br />

3 No Small 70K No<br />

4 Yes Medium 120K No<br />

5 No Large 95K Yes<br />

6 No Medium 60K No<br />

7 Yes Large 220K No<br />

8 No Small 85K Yes<br />

9 No Medium 75K No<br />

10 No Small 90K Yes<br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

11 No Small 55K ?<br />

12 Yes Medium 80K ?<br />

13 Yes Large 110K ?<br />

14 No Small 95K ?<br />

15 No Large 67K ?<br />

Learn<br />

Mo<strong>de</strong>l<br />

Apply<br />

Mo<strong>de</strong>l<br />

Predizer se um tumor é benigno ou maligno<br />

Classificar transações <strong>de</strong> cartões<br />

<strong>de</strong> crédito como legítimas ou<br />

fraudulentas<br />

Classificar estruturas secundárias <strong>de</strong><br />

proteínas como alpha-helix,<br />

beta-sheet, or random coil<br />

Categorizar textos como da área <strong>de</strong> finanças,<br />

previsão <strong>de</strong> tempo, esportes, cultura, etc.


10<br />

10<br />

10<br />

10<br />

<strong>Técnicas</strong> <strong>de</strong> <strong>Classificação</strong><br />

Exemplo <strong>de</strong> uma árvore <strong>de</strong> <strong>de</strong>cisão<br />

Métodos baseados em árvores <strong>de</strong> <strong>de</strong>cisão<br />

Métodos baseados em regras<br />

Raciocínio baseado em memória<br />

Re<strong>de</strong>s neurais<br />

Naïve Bayes e Re<strong>de</strong>s Bayesianas<br />

Máquinas <strong>de</strong> Vetores <strong>de</strong> Suporte (Support Vector<br />

Machines)<br />

Tid Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

1 Yes Single 125K No<br />

2 No Married 100K No<br />

3 No Single 70K No<br />

4 Yes Married 120K No<br />

Cheat<br />

5 No Divorced 95K Yes<br />

6 No Married 60K No<br />

7 Yes Divorced 220K No<br />

8 No Single 85K Yes<br />

9 No Married 75K No<br />

10 No Single 90K Yes<br />

Atributo teste<br />

Refund<br />

Yes<br />

No<br />

NO<br />

MarSt<br />

Single, Divorced Married<br />

TaxInc<br />

NO<br />

< 80K > 80K<br />

NO<br />

YES<br />

Dados <strong>de</strong><br />

treinamento<br />

Mo<strong>de</strong>lo: árvore <strong>de</strong> <strong>de</strong>cisão<br />

Outro exemplo <strong>de</strong> árvore <strong>de</strong> <strong>de</strong>cisão<br />

<strong>Classificação</strong> usando árvores <strong>de</strong> <strong>de</strong>cisão<br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

Tid Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

1 Yes Single 125K No<br />

2 No Married 100K No<br />

Cheat<br />

3 No Single 70K No<br />

4 Yes Married 120K No<br />

Married<br />

NO<br />

MarSt<br />

Yes<br />

NO<br />

Single,<br />

Divorced<br />

Refund<br />

No<br />

TaxInc<br />

< 80K > 80K<br />

1 Yes Large 125K No<br />

2 No Medium 100K No<br />

3 No Small 70K No<br />

4 Yes Medium 120K No<br />

5 No Large 95K Yes<br />

6 No Medium 60K No<br />

7 Yes Large 220K No<br />

8 No Small 85K Yes<br />

9 No Medium 75K No<br />

10 No Small 90K Yes<br />

Learn<br />

Mo<strong>de</strong>l<br />

5 No Divorced 95K Yes<br />

6 No Married 60K No<br />

7 Yes Divorced 220K No<br />

8 No Single 85K Yes<br />

9 No Married 75K No<br />

10 No Single 90K Yes<br />

NO<br />

YES<br />

Po<strong>de</strong> haver mais <strong>de</strong> um árvore para o<br />

mesmo conjunto <strong>de</strong> dados<br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

11 No Small 55K ?<br />

12 Yes Medium 80K ?<br />

13 Yes Large 110K ?<br />

14 No Small 95K ?<br />

15 No Large 67K ?<br />

Apply<br />

Mo<strong>de</strong>l<br />

Decision<br />

Tree


10<br />

10<br />

10<br />

10<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Comece pela raíz da árvore.<br />

Dado para teste<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Dado para teste<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Yes<br />

Refund<br />

No<br />

No Married 80K ?<br />

Yes<br />

Refund<br />

No<br />

No Married 80K ?<br />

NO<br />

MarSt<br />

NO<br />

MarSt<br />

Single, Divorced<br />

Married<br />

Single, Divorced<br />

Married<br />

TaxInc<br />

NO<br />

TaxInc<br />

NO<br />

< 80K > 80K<br />

< 80K > 80K<br />

NO<br />

YES<br />

NO<br />

YES<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Dado para teste<br />

Dado para teste<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Yes<br />

Refund<br />

No<br />

No Married 80K ?<br />

Yes<br />

Refund<br />

No<br />

No Married 80K ?<br />

NO<br />

MarSt<br />

NO<br />

MarSt<br />

Single, Divorced<br />

Married<br />

Single, Divorced<br />

Married<br />

TaxInc<br />

NO<br />

TaxInc<br />

NO<br />

< 80K > 80K<br />

< 80K > 80K<br />

NO<br />

YES<br />

NO<br />

YES


10<br />

10<br />

10<br />

10<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Aplicando o mo<strong>de</strong>lo nos dados <strong>de</strong> teste<br />

Dado para teste<br />

Dado para teste<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

Cheat<br />

Refund<br />

No Married 80K ?<br />

Refund<br />

No Married 80K ?<br />

Yes<br />

No<br />

Yes<br />

No<br />

NO<br />

Single, Divorced<br />

MarSt<br />

Married<br />

NO<br />

Single, Divorced<br />

MarSt<br />

Married<br />

Assign Cheat to “No”<br />

TaxInc<br />

NO<br />

TaxInc<br />

NO<br />

< 80K > 80K<br />

< 80K > 80K<br />

NO<br />

YES<br />

NO<br />

YES<br />

<strong>Classificação</strong> com árvore <strong>de</strong> <strong>de</strong>cisão<br />

Indução <strong>de</strong> árvores <strong>de</strong> <strong>de</strong>cisão<br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

1 Yes Large 125K No<br />

2 No Medium 100K No<br />

3 No Small 70K No<br />

4 Yes Medium 120K No<br />

5 No Large 95K Yes<br />

6 No Medium 60K No<br />

7 Yes Large 220K No<br />

8 No Small 85K Yes<br />

9 No Medium 75K No<br />

10 No Small 90K Yes<br />

Learn<br />

Mo<strong>de</strong>l<br />

Vários algoritmos:<br />

– Hunt’s Algorithm (um dos primeiros)<br />

– CART<br />

– ID3, C4.5<br />

– SLIQ,SPRINT<br />

Tid Attrib1 Attrib2 Attrib3 Class<br />

11 No Small 55K ?<br />

12 Yes Medium 80K ?<br />

13 Yes Large 110K ?<br />

14 No Small 95K ?<br />

15 No Large 67K ?<br />

Apply<br />

Mo<strong>de</strong>l<br />

Decision<br />

Tree


10<br />

10<br />

Estrutura geral do algorítmo <strong>de</strong> Hunt<br />

<br />

<br />

Seja D t o conjunto <strong>de</strong> registros <strong>de</strong><br />

teste que alcança o nodo t<br />

Procedimento geral:<br />

– Se D t só contém registros que<br />

pertencem a mesma classe y t ,<br />

então t é um nodo folha<br />

rotulado como y t<br />

– Se D t é um conjunto vazio,<br />

então t é um nodo folha<br />

rotulado com a classe <strong>de</strong>fault,<br />

y d<br />

– Se D t contém registros que<br />

pertencem a mais <strong>de</strong> uma<br />

classe, use um atributo teste<br />

para dividir os dados em<br />

subconjuntos menores.<br />

Recursivamente aplique o<br />

procedimento para cada<br />

subconjunto.<br />

Tid Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

1 Yes Single 125K No<br />

2 No Married 100K No<br />

3 No Single 70K No<br />

4 Yes Married 120K No<br />

Cheat<br />

5 No Divorced 95K Yes<br />

6 No Married 60K No<br />

7 Yes Divorced 220K No<br />

8 No Single 85K Yes<br />

9 No Married 75K No<br />

10 No Single 90K Yes<br />

?<br />

D t<br />

Hunt’s Algorithm<br />

Don’t<br />

Cheat<br />

Yes<br />

Don’t<br />

Cheat<br />

Refund<br />

Single,<br />

Divorced<br />

Cheat<br />

Yes<br />

Don’t<br />

Cheat<br />

No<br />

Marital<br />

Status<br />

Refund<br />

Married<br />

Don’t<br />

Cheat<br />

No<br />

Don’t<br />

Cheat<br />

Yes<br />

Don’t<br />

Cheat<br />

Don’t<br />

Cheat<br />

Refund<br />

Single,<br />

Divorced<br />

Taxable<br />

Income<br />

No<br />

Marital<br />

Status<br />

< 80K >= 80K<br />

Cheat<br />

Married<br />

Don’t<br />

Cheat<br />

Tid Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

1 Yes Single 125K No<br />

2 No Married 100K No<br />

3 No Single 70K No<br />

4 Yes Married 120K No<br />

Cheat<br />

5 No Divorced 95K Yes<br />

6 No Married 60K No<br />

7 Yes Divorced 220K No<br />

8 No Single 85K Yes<br />

9 No Married 75K No<br />

10 No Single 90K Yes<br />

Indução da árvore<br />

Estratégia gulosa.<br />

– Divida os registros baseado no atributo teste<br />

que otimiza um certo critério.<br />

Questões<br />

– Determine como dividir os registros<br />

Como especificar qual o atributo teste?<br />

Como <strong>de</strong>terminar a melhor divisão?<br />

– Determine quando parar <strong>de</strong> dividir<br />

Como especificar qual o atributo teste?<br />

Depen<strong>de</strong> do tipo dos atributos<br />

– Nominal (categórico,...)<br />

– Ordinal<br />

– Contínuo<br />

Depen<strong>de</strong> do tipo <strong>de</strong> divisão<br />

– divisão binária<br />

– divisão em múltiplos caminhos


Divisão baseada em atributos nominais<br />

Divisão baseada em atributos ordinais<br />

Divisão múltipla: Use tantas partições quantos forem<br />

os valores distintos do atributo.<br />

<br />

Divisão múltipla : Use tantas partições quantos forem os valores<br />

distintos do atributo<br />

Family<br />

CarType<br />

Sports<br />

Luxury<br />

Divisão binária: Divi<strong>de</strong> em dois subconjuntos.<br />

Necessida<strong>de</strong> <strong>de</strong> encontrar o particionamento ótimo.<br />

{Sports,<br />

Luxury}<br />

CarType<br />

{Family}<br />

OU<br />

{Family,<br />

Luxury}<br />

CarType<br />

{Sports}<br />

<br />

<br />

Small<br />

Size<br />

Medium<br />

Large<br />

Divisão binária: Divi<strong>de</strong> em dois subconjuntos.<br />

{Small,<br />

Medium}<br />

E esta divisão?<br />

Necessida<strong>de</strong> <strong>de</strong> encontrar o particionamento ótimo.<br />

Size<br />

{Large}<br />

OU<br />

{Small,<br />

Large}<br />

{Medium,<br />

Large}<br />

Size<br />

Size<br />

{Medium}<br />

{Small}<br />

Divisão baseada em atributos contínuos<br />

Divisão baseada em atributos contínuos<br />

Diferentes formas <strong>de</strong> tratar<br />

– Discretização para formar um atributo ordinal<br />

categórico<br />

Estático – discretizar uma vez no início<br />

Dinâmico – intervalos po<strong>de</strong>m ser <strong>de</strong>terminados por<br />

mesmo tamanho, mesma freqüência, clustering.<br />

– Decisão binária: (A < v) or (A ≥ v)<br />

consi<strong>de</strong>ra todas as divisões possíveis e usa a<br />

melhor


Indução <strong>de</strong> árvores<br />

Como <strong>de</strong>terminar a melhor divisão<br />

Estratégia gulosa.<br />

– Divida os registros baseado no atributo teste<br />

que otimiza um certo critério.<br />

Antes da divisão: 10 registros da classe 0,<br />

10 registros da classe 1<br />

Questões<br />

– Determine como dividir os registros<br />

Como especificar qual o atributo teste?<br />

Como <strong>de</strong>terminar a melhor divisão?<br />

– Determine quando parar <strong>de</strong> dividir<br />

Qual divisão é a melhor?<br />

Como <strong>de</strong>terminar a melhor divisão<br />

Medidas <strong>de</strong> impureza <strong>de</strong> um nó<br />

Estratégia gulosa :<br />

– Nós com distribuição <strong>de</strong> classe homogenea<br />

são preferidos<br />

Necessita da medida da “impureza” do nó:<br />

Índice <strong>de</strong> Gini<br />

Entropia<br />

Erro <strong>de</strong> classificação<br />

Não-homogênea,<br />

Alto grau <strong>de</strong> impureza<br />

Homogêneo,<br />

baixo grau <strong>de</strong> impureza


Como encontrar a melhor divisão?<br />

Sim<br />

Nodo N1<br />

C0<br />

C1<br />

N10<br />

N11<br />

Antes da divisão: C0 N00<br />

C1 N01<br />

A?<br />

Não<br />

Nodo N2<br />

C0<br />

C1<br />

N20<br />

N21<br />

Sim<br />

Nodo N3<br />

C0<br />

C1<br />

M0<br />

N30<br />

N31<br />

B?<br />

Não<br />

Nodo N4<br />

M1 M2 M3 M4<br />

C0<br />

C1<br />

N40<br />

N41<br />

Medida da impureza: GINI<br />

Índice Gini para um nó t :<br />

GII ( t)<br />

= 1<br />

−∑<br />

(Nota: p( j | t) é a freqüência relativa da classe j no nó t).<br />

j<br />

[ p(<br />

j | t)]<br />

– Máximo (1 - 1/n c ) quando os registros estão<br />

igualmente distribuídos entre todas as classes (pior)<br />

– Mínimo (0.0) quando todos os registros pertencem a<br />

uma classe (melhor)<br />

2<br />

M12<br />

Ganho = M0 – M12 vs M0 – M34<br />

M34<br />

C1 0<br />

C2 6<br />

Gini=0.000<br />

C1 1<br />

C2 5<br />

Gini=0.278<br />

C1 2<br />

C2 4<br />

Gini=0.444<br />

C1 3<br />

C2 3<br />

Gini=0.500<br />

Exemplos do cálculo do índice GINI<br />

Divisão baseda no índice GINI<br />

C1 0<br />

C2 6<br />

GII(<br />

t)<br />

= 1<br />

−∑<br />

j<br />

[ p(<br />

j | t)]<br />

P(C1) = 0/6 = 0 P(C2) = 6/6 = 1<br />

Gini = 1 – P(C1) 2 – P(C2) 2 = 1 – 0 – 1 = 0<br />

2<br />

<br />

<br />

Usado nos métodos CART, SLIQ, SPRINT.<br />

Quando um nó p é dividido em k partições (filhos), a<br />

qualida<strong>de</strong> da divisão é calculada como,<br />

GII<br />

split<br />

=<br />

k<br />

∑<br />

i<br />

=<br />

1<br />

ni<br />

GII ( i)<br />

n<br />

C1 1<br />

C2 5<br />

C1 2<br />

C2 4<br />

P(C1) = 1/6 P(C2) = 5/6<br />

Gini = 1 – (1/6) 2 – (5/6) 2 = 0.278<br />

P(C1) = 2/6 P(C2) = 4/6<br />

Gini = 1 – (2/6) 2 – (4/6) 2 = 0.444<br />

on<strong>de</strong>, n i = número <strong>de</strong> registros no filho i,<br />

n = número <strong>de</strong> registros no nó p.


10<br />

Índice Gini para atributos categóricos<br />

Atributos contínuos: cálculo do índice Gini<br />

Multi-way split<br />

CarType<br />

Family Sports Luxury<br />

C1 1 2 1<br />

C2 4 1 1<br />

Gini 0.393<br />

Binary split<br />

(find best partition of values)<br />

CarType<br />

{Sports,<br />

Luxury} {Family}<br />

C1 3 1<br />

C2 2 4<br />

Gini 0.400<br />

CarType<br />

{Sports} {Family,<br />

Luxury}<br />

C1 2 2<br />

C2 1 5<br />

Gini 0.419<br />

<br />

<br />

<br />

<br />

Usar <strong>de</strong>cisão binária baseada em um<br />

valor<br />

Várias possibilida<strong>de</strong>s para a escolha do<br />

valor <strong>de</strong> corte<br />

– Número <strong>de</strong> possíveis cortes =<br />

número <strong>de</strong> valores distintos<br />

Cada valor <strong>de</strong> corte tem uma matriz<br />

associada<br />

– Contadores <strong>de</strong> classe para cada<br />

partição possível, A < v and A ≥ v<br />

Método simples para escolher o melhor<br />

valor <strong>de</strong> corte<br />

– Para cada v, varra os dados para<br />

realizar a contagem e calcular o<br />

índice Gini<br />

– Computacionalmente ineficiente!<br />

Reptição do trabalho.<br />

Tid Refund Marital<br />

Status<br />

Taxable<br />

Income<br />

1 Yes Single 125K No<br />

2 No Married 100K No<br />

3 No Single 70K No<br />

4 Yes Married 120K No<br />

Cheat<br />

5 No Divorced 95K Yes<br />

6 No Married 60K No<br />

7 Yes Divorced 220K No<br />

8 No Single 85K Yes<br />

9 No Married 75K No<br />

10 No Single 90K Yes<br />

Atributos contínuos: cálculo do índice Gini<br />

Divisão baseada em entropia<br />

<br />

Para uma computação eficiente: para cada atributo contínuo,<br />

– Classifique os valores do atributo em or<strong>de</strong>m crescente<br />

– percorra os dados, atualizando a matriz <strong>de</strong> contadores e<br />

calculando o índice Gini<br />

– Escolha a posição <strong>de</strong> corte que tem o menor índice Gini<br />

Sorted Values<br />

Split Positions<br />

Cheat No No No Yes Yes Yes No No No No<br />

Taxable Income<br />

60 70 75 85 90 95 100 120 125 220<br />

55 65 72 80 87 92 97 110 122 172 230<br />

<br />

Yes 0 3 0 3 0 3 0 3 1 2 2 1 3 0 3 0 3 0 3 0 3 0<br />

No 0 7 1 6 2 5 3 4 3 4 3 4 3 4 4 3 5 2 6 1 7 0<br />

Gini 0.420 0.400 0.375 0.343 0.417 0.400 0.300 0.343 0.375 0.400 0.420<br />

= t<br />

Entropia em um nó t:<br />

Entropy ( t)<br />

−∑ p(<br />

j | t)log<br />

p(<br />

j | )<br />

j<br />

(Nota: p( j | t) é a freqüência relativa da classe j no nó t).<br />

– Me<strong>de</strong> a homogeneida<strong>de</strong> <strong>de</strong> um nó.<br />

Máximo (log n c ) quando os registros estão igualmente<br />

distribuídos entre todas as classes<br />

Mínimo (0.0) quando todos os registros pertencem a uma<br />

classe<br />

– O cálculo baseado em entropia é similar ao<br />

baseado no índice Gini


Exemplos <strong>de</strong> cálculo da entropia<br />

Divisão baseada em entropia ...<br />

C1 0<br />

C2 6<br />

C1 1<br />

C2 5<br />

C1 2<br />

C2 4<br />

Entropy t)<br />

= −∑ p(<br />

j | t)log<br />

p(<br />

j | t)<br />

j<br />

(<br />

2<br />

P(C1) = 0/6 = 0 P(C2) = 6/6 = 1<br />

Entropia = – 0 log 0 – 1 log 1 = – 0 – 0 = 0<br />

P(C1) = 1/6 P(C2) = 5/6<br />

Entropia = – (1/6) log 2 (1/6) – (5/6) log 2 (1/6) = 0.65<br />

P(C1) = 2/6 P(C2) = 4/6<br />

Entropia = – (2/6) log 2 (2/6) – (4/6) log 2 (4/6) = 0.92<br />

<br />

Ganho <strong>de</strong> Informação (Information Gain):<br />

⎛<br />

k ni<br />

⎞<br />

GAI = Entropy(<br />

p)<br />

− ⎜ ∑ Entropy(<br />

i)<br />

split<br />

⎟<br />

⎝<br />

i=<br />

1<br />

n ⎠<br />

O nó pai p é dividido em k partições;<br />

n i é o número <strong>de</strong> registros na partição i<br />

– Me<strong>de</strong> a redução da entropia em função da divisão.<br />

Escolhe a divisão que obtém maior redução (maximiza<br />

o ganho)<br />

– Usado nos métodos ID3 e C4.5<br />

– Desvantagem: Ten<strong>de</strong> a preferir divisões que resultam<br />

em gran<strong>de</strong> número <strong>de</strong> partições, cada uma <strong>de</strong>las<br />

sendo pequena mas pura.<br />

Splitting Based on INFO...<br />

Exemplo:<br />

<br />

Razão <strong>de</strong> ganho (Gain Ratio):<br />

GainRATIO<br />

GAI<br />

Split<br />

k<br />

=<br />

split<br />

∑<br />

i=<br />

SplitIFO<br />

O nó pai p é dividido em k partições;<br />

n i é o número <strong>de</strong> registros na partição i<br />

ni<br />

SplitIFO = − log<br />

1<br />

n<br />

– Ajusta o Ganho <strong>de</strong> Informação pela entropia do<br />

particionamento (SplitINFO). Particionamento <strong>de</strong> alta<br />

entropia (gran<strong>de</strong> número <strong>de</strong> pequenas partições) é<br />

penalizado.<br />

– Usado no C4.5<br />

– Projetado para evitar as <strong>de</strong>svantagens do Ganho <strong>de</strong><br />

Informação<br />

ni<br />

n<br />

caso montante ida<strong>de</strong> salário conta empréstimo<br />

1 médio sênior baixo sim não<br />

2 médio sênior baixo não não<br />

3 baixo sênior baixo sim sim<br />

4 alto média baixo sim sim<br />

5 alto jovem alto sim sim<br />

6 alto jovem alto não não<br />

7 baixo jovem alto não sim<br />

8 médio média baixo sim não<br />

9 médio jovem alto sim sim<br />

10 alto média alto sim sim<br />

11 médio média alto não sim<br />

12 baixo jovem baixo não sim<br />

13 baixo sênior alto sim sim<br />

14 alto média baixo não não


Entropia e Ganho <strong>de</strong> Informação<br />

Consi<strong>de</strong>rando apenas 2 valores possíveis, a entropia é<br />

dada pela fórmula:<br />

Entropia (S) = - (p + log 2 p + + p - log 2 p - )<br />

Nodo raiz<br />

Selecionando o melhor atributo:<br />

Entropia(S) = - 9/14 log 2 (9/14) - 5/14 log 2 (5/14) = 0,940<br />

On<strong>de</strong>:<br />

S é a totalida<strong>de</strong> <strong>de</strong> amostras do conjunto (todos os registros)<br />

p +<br />

p -<br />

é a proporção <strong>de</strong> amostras positivas<br />

é a proporção <strong>de</strong> amostras negativas<br />

Exemplo:<br />

Se S é uma coleção <strong>de</strong> 14 exemplos com 9 instâncias<br />

positivas e 5 negativas, então:<br />

Entropia (S) = - (9/14) Log 2 (9/14) – (5/14) Log 2 (5/14) = 0.940<br />

caso montante ida<strong>de</strong> salário conta empréstimo<br />

1 médio sênior baixo sim não<br />

2 médio sênior baixo não não<br />

3 baixo sênior baixo sim sim<br />

4 alto média baixo sim sim<br />

5 alto jovem alto sim sim<br />

6 alto jovem alto não não<br />

7 baixo jovem alto não sim<br />

8 médio média baixo sim não<br />

9 médio jovem alto sim sim<br />

10 alto média alto sim sim<br />

11 médio média alto não sim<br />

12 baixo jovem baixo não sim<br />

13 baixo sênior alto sim sim<br />

14 alto média baixo não não<br />

Entropia(montante=médio) = - 2/5 log 2 (2/5) - 3/5 log 2 (3/5) = 0,971<br />

Entropia(montante=baixo) = - 4/4 log 2 (4/4) - 0/4 log 2 (0/4) = 0<br />

Entropia(montante=alto) = - 3/5 log 2 (3/5) - 2/5 log 2 (2/5) = 0,971<br />

Gain (S,montante) = 0,940 - (5/14) 0,971 - (4/14) 0 - (5/14) 0,971 = 0,246<br />

Gain (S,ida<strong>de</strong>) = 0,940 - (4/14) 1 - (5/14) 0,971 - (5/14) 0,722 = 0,049<br />

Gain (S,salário) = 0,940 - (7/14) 0,592 - (7/14) 0,985 = 0,151<br />

Gain (S,conta) = 0,940 - (8/14) 0,811 - (6/14) 1 = 0,047<br />

Escolha do próximo atributo<br />

Escolha o próximo atributo<br />

Qual é o melhor atributo?<br />

{C1,C2,...C14}<br />

[9+, 5-]<br />

montante<br />

médio baixo alto<br />

S médio = {C1,C2,C8,C9,C11}<br />

Gain (S médio, ida<strong>de</strong>) = 0,971 - (2/5)0 - (2/5)1 - (1/5)0 = 0,571<br />

Gain (S médio, salário) = 0,971 - (3/5)0 - (2/5)0 = 0,971<br />

Gain (S médio, conta) = 0,971 - (3/5)0,918 - (2/5)1= 0,020<br />

{C1,C2,C8,C9,C11}<br />

[2+, 3-]<br />

{C3,C7,C12,C13}<br />

[4+, 0-]<br />

? sim<br />

{C4,C5,C6,C10,C14}<br />

[3+, 2-]<br />

?<br />

Qual atributo po<strong>de</strong> ser testado aqui?


Resultado<br />

{C1,C2,...C14}<br />

[9+, 5-]<br />

montante<br />

médio baixo alto<br />

montante<br />

médio baixo alto<br />

{C1,C2,C8,C9,C11}<br />

[2+, 3-]<br />

salário<br />

{C3,C7,C12,C13}<br />

[4+, 0-]<br />

sim<br />

{C4,C5,C6,C10,C14}<br />

[3+, 2-]<br />

?<br />

salário<br />

E=sim<br />

conta<br />

baixo<br />

{C1,C2,C8}<br />

[0+, 3-]<br />

alto<br />

{C9,C11}<br />

[2+, 0-]<br />

baixo alto não sim<br />

E=não E=sim E=não E=sim<br />

Divisão baseada em erro <strong>de</strong> classificação<br />

Erro <strong>de</strong> classificação no nó t :<br />

<br />

Error( t)<br />

= 1−<br />

max P(<br />

i | t)<br />

Me<strong>de</strong> o erro <strong>de</strong> classificação em um nó.<br />

Máximo (1 - 1/n c ) quando os registros são igualmente<br />

distribuídos entre todas as classes (pior)<br />

Mínimo (0.0) quando todos os registros pertencem à mesma<br />

classe (melhor)<br />

i<br />

Exemplos <strong>de</strong> cálculo <strong>de</strong> erro <strong>de</strong> classificação<br />

C1 0<br />

C2 6<br />

C1 1<br />

C2 5<br />

C1 2<br />

C2 4<br />

Error( t)<br />

= 1−<br />

max P(<br />

i | t)<br />

P(C1) = 0/6 = 0 P(C2) = 6/6 = 1<br />

Error = 1 – max (0, 1) = 1 – 1 = 0<br />

P(C1) = 1/6 P(C2) = 5/6<br />

i<br />

Error = 1 – max (1/6, 5/6) = 1 – 5/6 = 1/6<br />

P(C1) = 2/6 P(C2) = 4/6<br />

Error = 1 – max (2/6, 4/6) = 1 – 4/6 = 1/3


Comparação entre os critérios <strong>de</strong> divisão<br />

Indução <strong>de</strong> árvores<br />

Para problemas com duas classes:<br />

Estratégia gulosa.<br />

– Divida os registros baseado no atributo teste<br />

que otimiza um certo critério.<br />

Questões<br />

– Determinar como dividir os registros<br />

Como especificar qual o atributo teste?<br />

Como <strong>de</strong>terminar a melhor divisão?<br />

– Determinar quando parar <strong>de</strong> dividir<br />

Critérios <strong>de</strong> parada para a indução <strong>de</strong> árvores<br />

<strong>Classificação</strong> baseada em árvores <strong>de</strong> <strong>de</strong>cisão<br />

Pare <strong>de</strong> expandir um nó quando todos os<br />

registros pertencem à mesma classe<br />

Pare <strong>de</strong> expandir um nó quando todos os<br />

registros tiverem os mesmos valores <strong>de</strong> atributo<br />

Vantagens:<br />

– Construção barata<br />

– Extremamente rápido para classificar novos<br />

registros<br />

– Fácil interpretação <strong>de</strong> árvores pequenas<br />

– A acurácia é comparável a outros métodos <strong>de</strong><br />

classificação para muitos conjuntos <strong>de</strong> dados


Exemplo: C4.5<br />

Questões práticas <strong>de</strong> classificação<br />

Algoritmo simples, em profundida<strong>de</strong>.<br />

Usa o Ganho <strong>de</strong> Informação (Information Gain)<br />

Classifica atributos contínuos em cada nó.<br />

Exige que todos os dados caibam em memória.<br />

Não indicado para gran<strong>de</strong>s conjuntos <strong>de</strong> dados.<br />

– Necessita classificação em disco.<br />

Sub e super-especialização (Un<strong>de</strong>rfitting and<br />

Overfitting)<br />

Valores faltantes<br />

Custo da classificação<br />

O Software po<strong>de</strong> ser baixado do site:<br />

http://www.cse.unsw.edu.au/~quinlan/c4.5r8.tar.gz<br />

Sub e super-especialização (Exemplo)<br />

Sub e super-especialização<br />

Overfitting<br />

500 pontos circulares e<br />

500 pontos<br />

triangulares data.<br />

Pontos circulares:<br />

0.5 ≤ sqrt(x 12 +x 22 ) ≤ 1<br />

Pontos triangulares:<br />

sqrt(x 12 +x 22 ) > 0.5 or<br />

sqrt(x 12 +x 22 ) < 1<br />

Sub-especialização: quando o mo<strong>de</strong>lo é simples <strong>de</strong>mais, os erros com os dados<br />

<strong>de</strong> treinamento e <strong>de</strong> teste são gran<strong>de</strong>s


Super-especialização em função do ruído<br />

A fronteira <strong>de</strong> <strong>de</strong>cisão é distorcida pelo ruído

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!