Escolar Documentos
Profissional Documentos
Cultura Documentos
Avaliação de Modelos
Mineração de Dados
Sumário
2 Métodos Auxiliares
Mineração de Dados
Avaliação e Seleção de Modelos
Mineração de Dados
Avaliação e Seleção de Modelos
Introdução
◮ Etapas do desenvolvimento do modelo
◮ Treinamento ou geração de modelos
◮ Seleção de modelos
◮ Avaliação e análise de modelos
◮ Comparação
◮ Entre modelos iguais: quais parâmetros são melhores?
◮ Entre os diferentes modelos: qual o melhor modelo?
◮ Métricas de avaliação
◮ Comparando classificadores
◮ Acurácia/Erro
◮ Intervalos de confiança/análise estatı́stica
◮ Curva ROC
Mineração de Dados
Avaliação e Seleção de Modelos
Introdução
◮ É apropriado utilizar um conjunto de validação/teste para avaliar os
modelos candidatos
◮ Não deve-se utilizar os dados de treinamento
Mineração de Dados
Avaliação e Seleção de Modelos
Acurácia/Erro
◮ Avaliar a capacidade do modelo em predizer o valor da supervisão
sobre um novo conjunto de dados
Mineração de Dados
Avaliação e Seleção de Modelos
Acurácia/Erro
◮ Define-se as instâncias marcadas como sendo da classe de interesse
como positivas
Mineração de Dados
Avaliação e Seleção de Modelos
Matriz de Confusão
◮ Verdadeiros-positivos (TP): Instâncias positivas e que são
classificadas (corretamente) pelo modelo como positivas
Mineração de Dados
Avaliação e Seleção de Modelos
Matriz de Confusão
◮ Matriz de confusão
◮ Exemplo:
Mineração de Dados
Avaliação e Seleção de Modelos
Matriz de Confusão
◮ A acurácia (classificação correta) pode ser contabilizada usando a
diagonal principal
Mineração de Dados
Avaliação e Seleção de Modelos
Acurácia/Erro
Mineração de Dados
Avaliação e Seleção de Modelos
Precisão e Abrangência
relevant elements
selected elements
Mineração de Dados
Avaliação e Seleção de Modelos
◮ Fβ
(1 − β 2 ) × Precisão × Abrangência
◮ F =
β 2 Precisão + Abrangência
◮ F2 é uma medida comum e que enfatiza abrangência sobre precisão
◮ F0.5 é uma medida comum e que enfatiza precisão sobre a abrangência
Mineração de Dados
Avaliação e Seleção de Modelos
Avaliação
Mineração de Dados
Avaliação e Seleção de Modelos
Exemplo
Mineração de Dados
Avaliação e Seleção de Modelos
Avaliação de Modelos
◮ Essas formas de avaliação são suficientes?
◮ As instâncias podem não ser classificadas unicamente
◮ Neste caso, é mais apropriado que se tenha uma distribuição de
probabilidade
◮ Velocidade
◮ Escalabilidade
◮ Interpretabilidade
Mineração de Dados
Avaliação e Seleção de Modelos
Avaliação de Modelos
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.utils import shuffle
import pandas as pd
import numpy as np
iris = datasets.load_iris()
dados = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
dados = shuffle(dados)
dadosTreinamento = dados[:int((2*len(dados))/3)]
dadosTeste = dados[int((2*len(dados))/3):]
modelo = DecisionTreeClassifier()
modelo.fit(dadosTreinamento.iloc[:,0:4],
dadosTreinamento.iloc[:,4:5].values.ravel())
Mineração de Dados
Avaliação e Seleção de Modelos
Avaliação de Modelos
# continuando...
import sklearn.metrics as mt
import matplotlib.pyplot as plt
import itertools as its
Mineração de Dados
Avaliação e Seleção de Modelos
Avaliação de Modelos
# continuando...
matriz = matriz / matriz.sum(axis=1)[:, np.newaxis] # normaliza a matriz
# gera grafico
cmap=plt.cm.Blues
plt.imshow(matriz, interpolation='nearest', cmap=cmap)
plt.colorbar()
iclasses = np.arange(len(iris.target_names))
plt.xticks(iclasses, iris.target_names, rotation=45)
plt.yticks(iclasses, iris.target_names)
limiarCor = matriz.max() / 2.
for i, j in its.product(range(matriz.shape[0]), range(matriz.shape[1])):
plt.text(j, i, format(matriz[i, j], '.2f'),
horizontalalignment="center",
color="white" if matriz[i, j] > limiarCor else "black")
plt.tight_layout()
plt.ylabel('Valores Esperados')
plt.xlabel('Valores Preditos')
plt.show()
Mineração de Dados
Avaliação e Seleção de Modelos
Matriz de Confusão
1.0
0.6
0.4
0.0
sa
ca
olo
to
ni
sic
gi
se
vir
r
ve
Valores Preditos
Mineração de Dados
Métodos Auxiliares
Métodos Auxiliares
Mineração de Dados
Métodos Auxiliares
Holdout
◮ Holdout
◮ Os dados são divididos em 2 conjuntos independentes
◮ Dados de treinamento: construção do modelo (por exemplo, 2/3)
◮ Dados de teste: estimação da acurácia (por exemplo, 1/3)
◮ Pode-se repetir o holdout k vezes e a acurácia pode ser calculada pela
média das acurácias obtidas
Mineração de Dados
Métodos Auxiliares
Validação Cruzada
◮ Validação Cruzada
◮ Particiona os dados em k mutuamente exclusivos conjuntos
◮ Os k conjuntos tem aproximadamente o mesmo número de elementos
◮ Na i-ésima iteração, utilize Di como conjunto de teste e os demais
conjuntos como dados de treinamento
◮ k-fold com k = 10 é o mais popular
◮ O menor conjunto de dados resulta no leave-one-out
◮ A versão que busca manter as proporções dos dados é chamada de
Validação Cruzada Estratificada
◮ Sugere-se a utilização do stratified 10-fold cross-validation
Mineração de Dados
Métodos Auxiliares
Validação Cruzada
Mineração de Dados
Métodos Auxiliares
Bootstrap
◮ Funciona bem com poucos dados
Avaliação de Modelos
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import accuracy_score
import numpy as np
modeloNB = GaussianNB()
modeloLR = LogisticRegression()
Mineração de Dados
Métodos Auxiliares
Avaliação de Modelos
acuraciasNB = []
acuraciasLR = []
for iTreino, iTeste in skf.split(dados.data, dados.target):
# calcula a acuracia para o modelo NB
modeloNB.fit( dados.data[ iTreino ], dados.target[ iTreino ] )
predito = modeloNB.predict( dados.data[ iTeste ] )
acuracia = accuracy_score( dados.target[ iTeste ], predito )
acuraciasNB.append( acuracia )
# calcula a acuracia para o modelo LR
modeloLR.fit( dados.data[ iTreino ], dados.target[ iTreino ] )
predito = modeloLR.predict( dados.data[ iTeste ] )
acuracia = accuracy_score( dados.target[ iTeste ], predito )
acuraciasLR.append( acuracia )
Significância Estatı́stica
◮ Os k testes realizados via Validação Cruzada (por exemplo) possuem
variância
Mineração de Dados
Métodos Auxiliares
Avaliação de Modelos
# continuando...
from scipy.stats import ttest_rel
from scipy.stats import wilcoxon
Mineração de Dados
Métodos Auxiliares
Curva ROC
◮ Curva ROC: Receiver Operating Characteristics
Mineração de Dados
Métodos Auxiliares
Mineração de Dados
Métodos Auxiliares
Curva ROC
◮ Construção da Curva ROC
◮ Ordene as tuplas em ordem decrescente da certeza dada pelo modelo
da instância pertencer à classe positiva
◮ Tuplas com maior chance de serem classificadas como positivas
aparecem no inı́cio da lista
◮ Deslocar em relação ao eixo vertical se a classe for realmente positiva
◮ Deslocar em relação ao eixo horizontal se a tupla for um falso positivo
Mineração de Dados
Métodos Auxiliares
TP: sensibilidade
FP: 1− especificidade
Mineração de Dados
Métodos Auxiliares
Mineração de Dados
Métodos Auxiliares
Mineração de Dados
Métodos Auxiliares
modeloLR = LogisticRegression()
modeloLR.fit(xTreinamento, yTreinamento)
scoreLR = modeloLR.decision_function(xTeste)
modeloNB = GaussianNB()
modeloNB.fit(xTreinamento, yTreinamento)
# pegando as probabilidades associadas a uma das classes
scoreNB = modeloNB.predict_proba(xTeste)[:,1]
# curva ROC
fprLR, tprLR, _ = roc_curve(yTeste, scoreLR)
fprNB, tprNB, _ = roc_curve(yTeste, scoreNB)
# AUC
aucLR = auc(fprLR, tprLR)
aucNB = auc(fprNB, tprNB)
Mineração de Dados
Métodos Auxiliares
Mineração de Dados
Métodos Auxiliares
Curva ROC
0.8
Verdadeiro Positivo
0.6
0.4
0.2
Regressao Logistica (area = 0.98)
Naive Bayes (area = 0.99)
0.0
0.0 0.2 0.4 0.6 0.8 1.0
Falso Positivo
Mineração de Dados
Desbalanceamento dos Dados
Mineração de Dados
Desbalanceamento dos Dados
◮ Exemplos
◮ Casos de câncer em bases médicas
◮ Representações de invasores em sistemas
Mineração de Dados
Desbalanceamento dos Dados
Mineração de Dados
Avaliação de Modelos: scikit-learn
Mineração de Dados
Avaliação de Modelos: scikit-learn
Avaliação de Modelos
◮ A biblioteca scikit-learn disponibiliza diversos mecanismos para
avaliação de modelos
◮
http://scikit-learn.org/stable/modules/classes.html#module-sklearn
◮ Acurácia (accuracy score)
◮ Matriz de Confusão (confusion matrix)
◮ Fβ score (fbeta score)
◮ Curva ROC (roc curve)
◮ Área Sob a Curva ROC (auc)
http://scikit-learn.org/stable/modules/classes.html#module-sklearn
◮ Separação dos dados/holdout (train test split e ShuffleSplit)
◮ Validação Cruzada (GroupKFold, cross validate e cross val score)
◮ Validação Cruzada Estratificada (StratifiedKFold)
Mineração de Dados
Avaliação de Modelos: scikit-learn
Avaliação de Modelos
◮ A biblioteca scikit-learn disponibiliza diversos mecanismos para
avaliação de modelos
◮
http://scikit-learn.org/stable/modules/classes.html#module-sklearn
◮ Acurácia (accuracy score)
◮ Matriz de Confusão (confusion matrix)
◮ Fβ score (fbeta score)
◮ Curva ROC (roc curve)
◮ Área Sob a Curva ROC (auc)
http://scikit-learn.org/stable/modules/classes.html#module-sklearn
◮ Separação dos dados/holdout (train test split e ShuffleSplit)
◮ Validação Cruzada (GroupKFold, cross validate e cross val score)
◮ Validação Cruzada Estratificada (StratifiedKFold)
Mineração de Dados
Avaliação de Modelos: scikit-learn
Avaliação de Modelos
◮ Métodos para determinação de parâmetros dos modelos
◮ Busca em Grade (GridSearchCV)
◮ Busca Aleatória (RandomizedSearchCV)
Mineração de Dados
Avaliação de Modelos: scikit-learn
Avaliação de Modelos
◮ Métodos para determinação de parâmetros dos modelos
◮ Busca em Grade (GridSearchCV)
◮ Busca Aleatória (RandomizedSearchCV)
Mineração de Dados