Professional Documents
Culture Documents
100
75
50
25
sqrt(mean((d$prediction-d$y)^2))
## [1] 7.266361
R-SQUARED
Outra importante medida de ajuste de modelos de regressão é o coeficiente de
determinação, mas conhecido como R 2 .
Ele é definido como 1.0 menos o quanto o modelo tem de de variância
inexplicada, representando uma medida relativa a um modelo nulo que usa
somente a média de y como o preditor.
Em R, o R 2 desse exemplo pode ser calculado da seguinte forma:
1-sum((d$prediction-d$y)^2)/sum((mean(d$y)-d$y)^2)
## [1] 0.9497645
## [1] 64
## [1] 6.4
## [1] 0.1662338
podem ser medidas adequadas para se mostrar num relatório, mas elas são
usualmente não aconselháveis de se usar como objetivo do projeto (i.e.,
Avaliando modelos probabilísticos
Modelos probabilisticos São úteis tanto para classificação quanto para regressão.
Eles decidem se um item está ou não numa classe, mas também retornam a
probabilidade desse item estar nessa classe.
As técnicas de regressão logistica e árvores de decisão são famosas por
retornarem uma boa estimativa dessas probabilidades.
Tais modelos podem ser avaliados pela seu resultado final, mas também podem
ser avaliados em termos das probabilidades estimadas.
Avaliando modelos probabilísticos
“In our opinion, most of the measures for probability models are very technical
and very good at comparing the qualities of different models on the same
dataset. But these criteria aren’t easy to precisely translate into businesses
needs. So we recommend tracking them, but not using them with your project
sponsor or client.”
Avaliando modelos probabilísticos
ggplot(data=spamTest) +
geom_density(aes(x=pred,color=spam,linetype=spam))
7.5
spam
density
5.0
non−spam
spam
2.5
0.0
library('ROCR')
eval <- prediction(spamTest$pred,spamTest$spam)
plot(performance(eval,"tpr","fpr"))
Avaliando modelos probabilísticos
1.0
0.8
True positive rate
0.6
0.4
0.2
0.0
print(attributes(performance(eval,'auc'))$y.values[[1]])
## [1] 0.9660072
sum(ifelse(spamTest$spam=='spam',
log(spamTest$pred),
log(1-spamTest$pred)))
## [1] -134.9478
sum(ifelse(spamTest$spam=='spam',
log(spamTest$pred),
log(1-spamTest$pred)))/dim(spamTest)[[1]]
## [1] -0.2946458
Avaliando modelos probabilísticos
## [1] -306.8952
Avaliando modelos probabilísticos
DEVIANCE
Outra medida comum é a deviance, que é definida por:
−2 ∗ (logLikelihood − S),
onde S é uma constante chaamda de the log likelihood of the saturated model.
Quanto mais baixo for a deviance, melhor será o modelo.
Na maioria dos casos, o modelo saturado é o modelo perfeito que retornaria
probabilidade 1 para items na classe e probabilidade 0 para items fora da classe
(portanto, S=0).
Geralemente é usada para comparar modelos, por exemplo a diferença entre um
modelo nulo e o modelo propsoto.
Que no nosso caso, essa diferença é:
Podmeos pensar que diviance do modelo nulo como o quanto de variânica existe
para explicar, e o deviance do modelo como o quanto foi deixado de explicar pelo
modelo.
Avaliando modelos probabilísticos
AIC
Uma medida variante da deviance é o Akaike information criterion (AIC). que é
equivalente a deviance + 2 ∗ numberOfParameters usados no modelos para fazer
a predição.
Portante, o AIC é uma penalização da deviance pela complexidade do modelo.
Um truque interessante é fazer como os estatísticos Bayesianos fazem. Eles usam
o Bayesian information criterion (BIC) (ao invés do AIC) onde uma estimativa
emprírica do modelo é utilizada pela penalizar: BIC = deviance + 2 ∗ 2e ntropy .
O AIC é útil para comparar modelos com diferentes medidas de complexidade.
Avaliando modelos probabilísticos
ENTROPY
Entropia é uma medida bastante utilizada em teoria da informação, e sua
unidade é bits. I
Se p é um vetor contendo as probabilidades de cada possível saída, a entropia é
calculada da seguinte forma:
##
## non-spam spam
## 278 180
print(entropy(table(spamTest$spam)))
## [1] 0.9667165
Avaliando modelos probabilísticos
## prediction
## truth FALSE TRUE
## non-spam 264 14
## spam 22 158
print(conditionalEntropy(cM))
## [1] 0.3971897
Avaliando modelos de Ranking
set.seed(32297)
d <- data.frame(x=runif(100), y=runif(100))
clus <- kmeans(d, centers=5)
d$cluster <- clus$cluster
1.00 4 1
4 4
4 4 4
4 1 1 1
4 1 1
4 4 1 11 1
4 4
0.75 4 4
4
4 4 3 3
3
3 3 3
2 2 3 3
2
2 2 2 3 33
2 2 2 2 3 3
0.50
y
2 2
2 2 3 3
2 2 3 3
2 3
5 55
2
2 2 5 5 5
0.25 2 5
5 5
2 2 2
2 5 5
5 5 5 5
5 5 5 5 55
5 5 55 5
0.00 2 2 5 5
table(d$cluster)
##
## 1 2 3 4 5
## 10 27 18 17 28
Avaliando modelos de clustering
Distâncias intra-cluster e cross-cluster (entre clusters)
library('reshape2')
n <- dim(d)[[1]]
pairs <- data.frame(
ca = as.vector(outer(1:n, 1:n, function(a,b) d[a, 'cluster'])),
cb = as.vector(outer(1:n, 1:n, function(a,b) d[b, 'cluster'])),
dist = as.vector(outer(1:n,1:n, function(a,b)
sqrt((d[a,'x']-d[b,'x'])^2 + (d[a,'y']-d[b,'y'])^2)))
)
dcast(pairs,ca~cb,value.var='dist',mean)
## ca 1 2 3 4 5
## 1 1 0.1478480 0.6524103 0.3780785 0.4404508 0.7544134
## 2 2 0.6524103 0.2794181 0.5551967 0.4990632 0.5165320
## 3 3 0.3780785 0.5551967 0.2031272 0.6122986 0.4656730
## 4 4 0.4404508 0.4990632 0.6122986 0.2048268 0.8365336
## 5 5 0.7544134 0.5165320 0.4656730 0.8365336 0.2221314
I Hélio Lopes
I http://www.inf.puc-rio.br/~lopes
I lopes@inf.puc-rio.br
I Simone Barbosa
I http://www.inf.puc-rio.br/~simone
I simone@inf.puc-rio.br