You are on page 1of 12

Ricardo Nunes de Miranda

RA 074342

Exerccio de Fixao de Contedo 3


EA072 - Inteligncia Artificial em Aplicaes Industriais
Curvas Precision-Recall e ROC

Matriz de confuso uma forma de representar as decises feitas por um


classificador, que possui 4 categorias: Verdadeiro positivos (TP, exemplos corretamente
marcados como positivo), falso positivos (FP, exemplos incorretamente marcados como
positivo), verdadeiro negativos (TN, exemplos corretamente marcados como negativos) e
falso negativos (FN, exemplos incorretamente marcados como negativos).
Positivo atual

Negativo atual

Positivo previsto

TP

FP

Negativo previsto

FN

TN

Com esses dados, podemos definir a taxa de falso positivo (FPR) como a frao de
exemplos negativos que so classificados erroneamente como positivo, a taxa de
verdadeiro positivo (TPR) como a frao de exemplos positivos que so classificados
corretamente, Recall (que vai ser o mesmo que a taxa de verdadeiro positivo) e
Precision, que mede a frao de exemplos classificados como positivos que so
verdadeiramente positivos, ou seja:
FP
F P R = FP+TN
TP
T P R = TP+FN
TP
Recall = TP+FN
TP
P recision = TP+FP

Curvas ROC (Receiver Operator Characteristic) so curvas usadas para avaliar


problemas binrios de deciso, que mostram como o nmero de exemplos classificados
corretamente varia com o nmero de exemplos classificados incorretamente. Porm,
essas curvas podem apresentar vises otimistas de uma performance de um algoritmo,
se h dados tendenciosos na distribuio de classes. O grfico tem como eixo horizontal
a taxa de falso positivo (FPR) e o eixo vertical tem a taxa de verdadeiro positivo (TPR). O
ideal nesse grfico que a curva fique prxima do canto superior esquerdo o que indica
uma grande taxa de verdadeiro positivo para pequena taxa de falso positivo.

Curvas PR (Precision-Recall) so alternativas para as curvas ROC, para tarefas com


distribuio de classes tendenciosas. Uma grande diferena das duas sua
representao visual, j que as curvas PR permitem explicitar diferenas de algoritmos
que no aparecem nas curvas ROC. O grfico tem como eixo horizontal Recall e o eixo
vertical Precision. O ideal nesse grfico que a curva fique prxima do canto superior
direito o que indica uma grande preciso para grande Recall.
Um ndice de desempenho extrado da anlise da curva ROC a rea sob a curva
(ou AUC-ROC), que pode ser calculada usando as reas trapezoidais criadas entre pontos
da curva ROC, sendo que a rea maior, ter um melhor desempenho.
Portanto, em um problema de classificao binria, no pode ser suficiente
monitorar apenas a taxa de acerto, porque ela pode estar mascarada, o ideal verificar a
taxa de acerto em relao a taxa de erro.

rvores de Deciso
Para os dados passados, relativos a presena ou no de um espcime em certos locais
sob certas condies ambientais, possuimos 6 atributos, sendo 5 numricos
(temperatura mdia, umidade mdia, altura de chuva mensal, precipitao em 21 dias,
nmero de dias chuvosos no ms) e 1 categrico (local), que possuem as seguintes
configuraes:
Temperatura mdia:
Mnimo: 12,82
Mximo: 21,98
Mdia: 18,448
Desvio padro: 2,965
Umidade mdia:
Mnimo: 68,38
Mximo: 97,83
Mdia: 90,306
Desvio padro: 7,247
Altura de chuva mensal (mm):
Mnimo: 9
Mximo: 273,7
Mdia: 107,779
Desvio padro: 71,769
Precipitao em 21 dias (mm):
Mnimo: 0
Mximo: 216,9
Mdia: 85,179
Desvio padro: 62,745

Nmero de dias chuvosos no ms:


Mnimo: 3
Mximo: 15
Mdia: 8,857
Desvio padro: 3,823
Local: ID, IM, PM, CHI, GAL

rvore de deciso

Como podemos ver nos resultados, a porcentagem de classificao correta 91,4286%.


A matriz de confuso mostrada na imagem acima, indica que 8 exemplos foram
classificados corretamente como 0, 3 exemplos foram classificados incorretamente
como 0, 3 exemplos foram classificados incorretamente como 1, e 56 foram classificados
corretamente como 1, considerando 1 como a presena da espcime e 0 como a
ausncia da espcime.
Podemos definir a rvore de deciso na forma de regras do seguinte modo:

SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = ID) ENTO (classe = 1)


SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = IM) ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = PM) E (numero_dias_chuva <=
3) ENTO (classe = 0)
SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = PM) E (numero_dias_chuva > 3)
ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = CHI) E (numero_dias_chuva <=
3) ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = CHI) E (numero_dias_chuva > 3)
ENTO (classe = 0)
SE (temperatura_media <= 21,87) E (numero_dias_chuva <= 4) E (local = GAL) ENTO (classe = 0)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = ID) ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = IM) E (umidade_media <= 97,5)
ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = IM) E (umidade_media > 97,5)
ENTO (classe = 0)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = PM) ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = CHI) ENTO (classe = 1)
SE (temperatura_media <= 21,87) E (numero_dias_chuva > 4) E (local = GAL) ENTO (classe = 1)
SE (temperatura_media > 21,87) E (local = ID) ENTO (classe = 1)
SE (temperatura_media > 21,87) E (local = IM) ENTO (classe = 0)
SE (temperatura_media > 21,87) E (local = PM) ENTO (classe = 0)
SE (temperatura_media > 21,87) E (local = CHI) ENTO (classe = 0)
SE (temperatura_media > 21,87) E (local = GAL) ENTO (classe = 0)

Alterando os parmetros, verificamos que minNumObj significa o minimo de exemplos


que pode ter em cada folha, ou seja, quanto maior o nmero menor a acurcia da
classificao, o que podemos afirmar ao modificar esse parmetro, conforme ele cresce,
a porcentagem de classificao correta diminui.
J o parmetro unpruned, significa se a rvore podada ou no, verificamos que ao
liberar a poda, a porcentagem de classificao correta tambm diminui.
Utilizando dados de
Avaliao de carros
(1), dados que utilizam apenas atributos
categricos afim de avaliar a aceitao do carro, utiliza como atributos, informaes de
preo (de compra e manuteno), informaes tcnicas (segurana, nmero de portas,
capacidade de pessoas, tamanho do porta-malas), conseguimos chegar numa melhor
configurao com unpruned TRUE e minNumObj = 3, conseguindo uma porcentagem de
classificao correta de 94,15%
rvore de Deciso
=== Classifier model (full training set) ===
J48 unpruned tree
-----------------seguranca = low: unacc (576.0)
seguranca = med
| no_pessoas = 2: unacc (192.0)

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

no_pessoas = 4
| preco_compra = vhigh
| | preco_manutencao = vhigh: unacc (12.0)
| | preco_manutencao = high: unacc (12.0)
| | preco_manutencao = med
| | | tam_bagagem = small: unacc (4.0)
| | | tam_bagagem = med: unacc (4.0/2.0)
| | | tam_bagagem = big: acc (4.0)
| | preco_manutencao = low
| | | tam_bagagem = small: unacc (4.0)
| | | tam_bagagem = med: unacc (4.0/2.0)
| | | tam_bagagem = big: acc (4.0)
| preco_compra = high
| | tam_bagagem = small: unacc (16.0)
| | tam_bagagem = med
| | | no_portas = 2: unacc (4.0)
| | | no_portas = 3: unacc (4.0)
| | | no_portas = 4: acc (4.0/1.0)
| | | no_portas = 5more: acc (4.0/1.0)
| | tam_bagagem = big
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: acc (4.0)
| | | preco_manutencao = med: acc (4.0)
| | | preco_manutencao = low: acc (4.0)
| preco_compra = med
| | preco_manutencao = vhigh
| | | tam_bagagem = small: unacc (4.0)
| | | tam_bagagem = med: unacc (4.0/2.0)
| | | tam_bagagem = big: acc (4.0)
| | preco_manutencao = high
| | | tam_bagagem = small: unacc (4.0)
| | | tam_bagagem = med: unacc (4.0/2.0)
| | | tam_bagagem = big: acc (4.0)
| | preco_manutencao = med: acc (12.0)
| | preco_manutencao = low
| | | tam_bagagem = small: acc (4.0)
| | | tam_bagagem = med: acc (4.0/2.0)
| | | tam_bagagem = big: good (4.0)
| preco_compra = low
| | preco_manutencao = vhigh
| | | tam_bagagem = small: unacc (4.0)
| | | tam_bagagem = med: unacc (4.0/2.0)
| | | tam_bagagem = big: acc (4.0)
| | preco_manutencao = high: acc (12.0)
| | preco_manutencao = med
| | | tam_bagagem = small: acc (4.0)
| | | tam_bagagem = med: acc (4.0/2.0)
| | | tam_bagagem = big: good (4.0)
| | preco_manutencao = low
| | | tam_bagagem = small: acc (4.0)
| | | tam_bagagem = med: acc (4.0/2.0)

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

| | | tam_bagagem = big: good (4.0)


no_pessoas = more
| tam_bagagem = small
| | preco_compra = vhigh: unacc (16.0)
| | preco_compra = high: unacc (16.0)
| | preco_compra = med
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: unacc (4.0)
| | | preco_manutencao = med: acc (4.0/1.0)
| | | preco_manutencao = low: acc (4.0/1.0)
| | preco_compra = low
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: acc (4.0/1.0)
| | | preco_manutencao = med: acc (4.0/1.0)
| | | preco_manutencao = low: acc (4.0/1.0)
| tam_bagagem = med
| | preco_compra = vhigh
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: unacc (4.0)
| | | preco_manutencao = med: acc (4.0/1.0)
| | | preco_manutencao = low: acc (4.0/1.0)
| | preco_compra = high
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: acc (4.0/1.0)
| | | preco_manutencao = med: acc (4.0/1.0)
| | | preco_manutencao = low: acc (4.0/1.0)
| | preco_compra = med
| | | preco_manutencao = vhigh: acc (4.0/1.0)
| | | preco_manutencao = high: acc (4.0/1.0)
| | | preco_manutencao = med: acc (4.0)
| | | preco_manutencao = low: good (4.0/1.0)
| | preco_compra = low
| | | preco_manutencao = vhigh: acc (4.0/1.0)
| | | preco_manutencao = high: acc (4.0)
| | | preco_manutencao = med: good (4.0/1.0)
| | | preco_manutencao = low: good (4.0/1.0)
| tam_bagagem = big
| | preco_compra = vhigh
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: unacc (4.0)
| | | preco_manutencao = med: acc (4.0)
| | | preco_manutencao = low: acc (4.0)
| | preco_compra = high
| | | preco_manutencao = vhigh: unacc (4.0)
| | | preco_manutencao = high: acc (4.0)
| | | preco_manutencao = med: acc (4.0)
| | | preco_manutencao = low: acc (4.0)
| | preco_compra = med
| | | preco_manutencao = vhigh: acc (4.0)
| | | preco_manutencao = high: acc (4.0)
| | | preco_manutencao = med: acc (4.0)

| | | | preco_manutencao = low: good (4.0)


| | | preco_compra = low
| | | | preco_manutencao = vhigh: acc (4.0)
| | | | preco_manutencao = high: acc (4.0)
| | | | preco_manutencao = med: good (4.0)
| | | | preco_manutencao = low: good (4.0)
seguranca = high
| no_pessoas = 2: unacc (192.0)
| no_pessoas = 4
| | preco_compra = vhigh
| | | preco_manutencao = vhigh: unacc (12.0)
| | | preco_manutencao = high: unacc (12.0)
| | | preco_manutencao = med: acc (12.0)
| | | preco_manutencao = low: acc (12.0)
| | preco_compra = high
| | | preco_manutencao = vhigh: unacc (12.0)
| | | preco_manutencao = high: acc (12.0)
| | | preco_manutencao = med: acc (12.0)
| | | preco_manutencao = low: acc (12.0)
| | preco_compra = med
| | | preco_manutencao = vhigh: acc (12.0)
| | | preco_manutencao = high: acc (12.0)
| | | preco_manutencao = med
| | | | tam_bagagem = small: acc (4.0)
| | | | tam_bagagem = med: acc (4.0/2.0)
| | | | tam_bagagem = big: vgood (4.0)
| | | preco_manutencao = low
| | | | tam_bagagem = small: good (4.0)
| | | | tam_bagagem = med: good (4.0/2.0)
| | | | tam_bagagem = big: vgood (4.0)
| | preco_compra = low
| | | preco_manutencao = vhigh: acc (12.0)
| | | preco_manutencao = high
| | | | tam_bagagem = small: acc (4.0)
| | | | tam_bagagem = med: acc (4.0/2.0)
| | | | tam_bagagem = big: vgood (4.0)
| | | preco_manutencao = med
| | | | tam_bagagem = small: good (4.0)
| | | | tam_bagagem = med: good (4.0/2.0)
| | | | tam_bagagem = big: vgood (4.0)
| | | preco_manutencao = low
| | | | tam_bagagem = small: good (4.0)
| | | | tam_bagagem = med: good (4.0/2.0)
| | | | tam_bagagem = big: vgood (4.0)
| no_pessoas = more
| | preco_compra = vhigh
| | | preco_manutencao = vhigh: unacc (12.0)
| | | preco_manutencao = high: unacc (12.0)
| | | preco_manutencao = med: acc (12.0/1.0)
| | | preco_manutencao = low: acc (12.0/1.0)
| | preco_compra = high

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

| preco_manutencao = vhigh: unacc (12.0)


| preco_manutencao = high: acc (12.0/1.0)
| preco_manutencao = med: acc (12.0/1.0)
| preco_manutencao = low: acc (12.0/1.0)
preco_compra = med
| preco_manutencao = vhigh: acc (12.0/1.0)
| preco_manutencao = high: acc (12.0/1.0)
| preco_manutencao = med
| | tam_bagagem = small: acc (4.0/1.0)
| | tam_bagagem = med: vgood (4.0/1.0)
| | tam_bagagem = big: vgood (4.0)
| preco_manutencao = low
| | tam_bagagem = small: good (4.0/1.0)
| | tam_bagagem = med: vgood (4.0/1.0)
| | tam_bagagem = big: vgood (4.0)
preco_compra = low
| preco_manutencao = vhigh: acc (12.0/1.0)
| preco_manutencao = high
| | tam_bagagem = small: acc (4.0/1.0)
| | tam_bagagem = med: vgood (4.0/1.0)
| | tam_bagagem = big: vgood (4.0)
| preco_manutencao = med
| | tam_bagagem = small: good (4.0/1.0)
| | tam_bagagem = med: vgood (4.0/1.0)
| | tam_bagagem = big: vgood (4.0)
| preco_manutencao = low
| | tam_bagagem = small: good (4.0/1.0)
| | tam_bagagem = med: vgood (4.0/1.0)
| | tam_bagagem = big: vgood (4.0)

Redes Bayesianas
Foram fornecidas 1000 amostras e 8 variveis, sendo que a segunda varivel ter
valor de 1 a 7, e as outras sero binrias (tero valores 1 para falso e 2 para verdadeiro).
A rede bayesiana resultante ser a seguinte:

Tabelas de probabilidades:
Varivel (1):
(1) = 1

(1) = 2

0,5014

0,4986

Varivel (2):
(2) = 1

(2) = 2

(2) = 3

(2) = 4

(2) = 5

(2) = 6

(2) = 7

(5) = 1

0,2633

0,1904

0,1769

0,1641

0,1182

0,0655

0,0216

(5) = 2

0,1159

0,1414

0,1283

0,1261

0,1657

0,1548

0,1677

(3) = 1

(3) = 2

(4) = 1

0,3373

0,6627

(4) = 2

0,9802

0,0198

(4) = 1

(4) = 2

(5) = 1

0,5949

0,4051

(5) = 2

0,7509

0,2491

Varivel (3):

Varivel (4):

Varivel (5):
(5) = 1

(5) = 2

0,1481

0,8519

Varivel (6):
(6) = 1

(6) = 2

(5) = 1,
(8) = 1

0,8788

0,1212

(5) = 1,
(8) = 2

0,5888

0,4112

(5) = 2,
(8) = 1

0,0528

0,9472

(5) = 2,
(8) = 2

0,1587

0,8413

Varivel (7):
(7) = 1

(7) = 2

0,5028

0,4972

Varivel (8):
(8) = 1

(8) = 2

0,4820

0,5180

Os atributos 1 e 7 no possuem conexes a outros ns, porque eles so atributos


independentes, por exemplo, pode ter duas linhas iguais em todos atributos, mas com o
atributo 1 diferente (Exemplo: 1,3,2,1,2,2,1,2 e 2,3,2,1,2,2,1,2)
A probabilidade de 8 ser verdade 51,80%.
Sendo 5 falso e 8 verdade, a probabilidade de 6 ser verdade 41,12%
Sendo 3 verdade, sabemos que (4) pode ser verdade ou falso, caso (4) seja
verdade, a probabilidade de (3) ser verdade 1,98%, caso (4) seja falso, a probabilidade
de (3) ser verdade 66,27%. Sendo (4) falso, a probabilidade de (5) ser verdade 75,09%,
sendo (4) verdade, a probabilidade de (5) ser verdadeiro 24,91%. Portanto a
probabilidade de (5) ser verdadeiro 8,99%.

TensorFlow
O TensorFlow uma biblioteca open source para machine learning e deep
learning que funciona utilizando grafos de fluxo de dados.
O Google usa o TensorFlow em vrias aplicaes, desde reconhecimento de voz,
traduo de linguas, Smart Reply no Inbox (que sugere respostas rpidas a emails), at
para melhorar o resultado de buscas como por exemplo a busca na plataforma Google
Photos.
Os usurios podem utilizar essa plataforma atravs da criao de grafos de fluxo
de dados, aonde os ns representam operaes matemticas, enquanto as arestas
representam vetores de dados multidimensionais (chamados de tensors) entre as
operaes. Por ter uma arquitetura flexivel, permite implantar esse processamento em
um ou mais CPUs (ou GPUs), desde desktops, servidores ou mesmo em um celular
utilizando a mesma API.
O fluxo de informao feito atravs da criao de grafos de fluxo de dados..

Bibliografia
(1) Dados usados para experimento do WEKA
https://drive.google.com/file/d/0B4AWZfNeWl7DVHlaanBBRDJ3YXc/view?usp=sharing