library(knitr) # colocar figuras/imagens na apresentação
library(readxl) # leitura dos dados em excel
library(flextable) # Construir Tabelas
library(officer) # Pacote para utilizar algumas opções extras do pacote flextable
library(DT) # pacote para construir tabelas dinâmicas
Neste presente trabalho será apresentado a definição de alguns classificadores bayesianos e a sua aplicação na classificação de texto, implementação dos classificadores em alguns exemplos no Rstudio/Rmarkdown.
O algoritmo “Naive Bayes” é um classificador probabilístico baseado no “Teorema de Bayes”, o qual foi criado por Thomas Bayes (1701 - 1761) para tentar provar a existência de Deus.
Hoje é utilizado na área de Aprendizado de Máquina (Machine Learning) para categorizar textos com base na frequência das palavras usadas.
Exemplos de Utilização do Classificador:
Classificação de textos;
Pode ser usado para identificar se determinado e-mail é um SPAM ou sobre qual assunto se refere determinado texto;
Análise de sentimento em redes sociais.
knitr::include_graphics("Thomas_Bayes.gif")
Figura 1: Thomas Bayes (1701-1761).
library(lattice)
library(latticeExtra)
# Carrega.
data(UCBAdmissions)
# Dados da forma de um array cúbico.
str(UCBAdmissions)
## 'table' num [1:2, 1:2, 1:6] 512 313 89 19 353 207 17 8 120 205 ...
## - attr(*, "dimnames")=List of 3
## ..$ Admit : chr [1:2] "Admitted" "Rejected"
## ..$ Gender: chr [1:2] "Male" "Female"
## ..$ Dept : chr [1:6] "A" "B" "C" "D" ...
addmargins(margin.table(UCBAdmissions, 1:2))
## Gender
## Admit Male Female Sum
## Admitted 1198 557 1755
## Rejected 1493 1278 2771
## Sum 2691 1835 4526
# Gráfico de mosaico.
mosaicplot(UCBAdmissions)
da <- as.data.frame(UCBAdmissions)
da
## Admit Gender Dept Freq
## 1 Admitted Male A 512
## 2 Rejected Male A 313
## 3 Admitted Female A 89
## 4 Rejected Female A 19
## 5 Admitted Male B 353
## 6 Rejected Male B 207
## 7 Admitted Female B 17
## 8 Rejected Female B 8
## 9 Admitted Male C 120
## 10 Rejected Male C 205
## 11 Admitted Female C 202
## 12 Rejected Female C 391
## 13 Admitted Male D 138
## 14 Rejected Male D 279
## 15 Admitted Female D 131
## 16 Rejected Female D 244
## 17 Admitted Male E 53
## 18 Rejected Male E 138
## 19 Admitted Female E 94
## 20 Rejected Female E 299
## 21 Admitted Male F 22
## 22 Rejected Male F 351
## 23 Admitted Female F 24
## 24 Rejected Female F 317
# Total de casos.
tot <- sum(da$Freq)
tot
## [1] 4526
# Divide nos níveis de Admit e calcula a marginal e todas as
# condicionais. Retorna as probabilidades.
probs <- by(data = da,
INDICES = da$Admit,
FUN = function(a_subset) {
with(a_subset, {
a <- as.character(a_subset$Admit[1])
# Freq(A = a) e Prob(A = a)
f_a <- sum(Freq)
p_a <- f_a/tot
# Freq(g | A = a) e Prob(g | A = a)
f_g.a <- tapply(Freq, Gender, sum)
p_g.a <- f_g.a/f_a
# Freq(d | A = a) e Prob(g | A = a).
f_d.a <- tapply(Freq, Dept, sum)
p_d.a <- f_d.a/f_a
cat("------------------------------\n")
cat(sprintf("P(A = %s): %0.3f", a, p_a), "\n\n")
cat(sprintf("P(G = %s | A = %s): %0.3f",
names(p_g.a), a, p_g.a),
sep = "\n")
cat("\n")
cat(sprintf("P(D = %s | A = %s): %0.3f",
names(p_d.a), a, p_d.a),
sep = "\n")
cat("\n")
probs <- (p_a) * outer(p_g.a, p_d.a, FUN = "*")
probs <- plyr::adply(probs, seq_along(dim(probs)))
names(probs) <- c("Gender", "Dept", a)
return(probs)
})
})
## ------------------------------
## P(A = Admitted): 0.388
##
## P(G = Male | A = Admitted): 0.683
## P(G = Female | A = Admitted): 0.317
##
## P(D = A | A = Admitted): 0.342
## P(D = B | A = Admitted): 0.211
## P(D = C | A = Admitted): 0.183
## P(D = D | A = Admitted): 0.153
## P(D = E | A = Admitted): 0.084
## P(D = F | A = Admitted): 0.026
##
## ------------------------------
## P(A = Rejected): 0.612
##
## P(G = Male | A = Rejected): 0.539
## P(G = Female | A = Rejected): 0.461
##
## P(D = A | A = Rejected): 0.120
## P(D = B | A = Rejected): 0.078
## P(D = C | A = Rejected): 0.215
## P(D = D | A = Rejected): 0.189
## P(D = E | A = Rejected): 0.158
## P(D = F | A = Rejected): 0.241
probs
## da$Admit: Admitted
## Gender Dept Admitted
## 1 Male A 0.090644116
## 2 Female A 0.042144218
## 3 Male B 0.055804198
## 4 Female B 0.025945691
## 5 Male C 0.048564735
## 6 Female C 0.022579764
## 7 Male D 0.040571160
## 8 Female D 0.018863219
## 9 Male E 0.022170857
## 10 Female E 0.010308153
## 11 Male F 0.006937819
## 12 Female F 0.003225681
## ------------------------------------------------------------
## da$Admit: Rejected
## Gender Dept Rejected
## 1 Male A 0.03952272
## 2 Female A 0.03383124
## 3 Male B 0.02559453
## 4 Female B 0.02190878
## 5 Male C 0.07095042
## 6 Female C 0.06073318
## 7 Male D 0.06226019
## 8 Female D 0.05329439
## 9 Male E 0.05202237
## 10 Female E 0.04453087
## 11 Male F 0.07952162
## 12 Female F 0.06807008
Naive-Bayes
Redes neurais
SOM
Árvores de decisão
Regras de decisão