10.16 Bayes ingênuo

Despite these rather optimistic assumptions, naive Bayes classifiers often outperform far more sophisticated alternatives. (…) [A]lthough the individual class density estimates may be biased, this bias might not hurt the posterior probabilities as much, especially near the decision regions. (Hastie, Tibshirani, and Friedman 2009, 211)

Pode-se dizer que o método de classificação Bayes ingênuo (Wickramasinghe and Kalutarage 2020) é uma aplicação direta do Teorema de Bayes (Bayes 1763). O método leva esse nome devido à suposição de que as variáveis preditoras são condicionalmente independentes, sendo muitas vezes mais eficaz do que modelos sofisticados. (Hand and Yu 2001) examinam as evidências desta suposta superioridade, considerando explicações empíricas e teóricas. (Harry Zhang 2004) mostra que não importa quão fortes sejam as dependências entre os atributos, o método ainda pode ser ótimo se as dependências forem distribuídas uniformemente nas classes ou se as dependências se anularem. O autor ainda propõe e prova condições suficientes e necessárias para a otimalidade do Bayes ingênuo.

Seguindo a notação de (Harry Zhang 2004), um exemplo \(E\) é representado por uma tupla de valores de atributos \((x_1, x_2, \ldots, x_n)\), onde \(x_i\) é o valor de uma particular realização do atributo \(X_i\). Seja \(c\) o valor da variável de classificação \(C\), que pode pertencer apenas às classes \(+\) e \(-\). Um classificador é uma função que atribui um rótulo de classe a um exemplo. De acordo com regra de Bayes, a probabilidade de um exemplo \(E = (x_1, \ldots, x_n)\) ser da classe \(c\) é \[\begin{equation} Pr(c|E) = \frac{Pr(c) Pr(E|c)}{Pr(E)} \tag{10.32} \end{equation}\]

\(E\) é classificado como da classe \(+\) através do classificador bayesiano \(f_{B}(E)\) se e somente se \[\begin{equation} f_{B}(E) = \frac{Pr(+|E)}{Pr(-|E)} \ge 1 \tag{10.33} \end{equation}\]

Se assumirmos que todos os atributos são condicionalmente independentes dado o valor da variável de classe, pode-se escrever \[\begin{equation} Pr(E|c) = Pr(x_1,\ldots,x_n|c) = \prod_{i=1}^{n} Pr(x_i|c) \tag{10.34} \end{equation}\]

Eesta suposição resulta no classificador de Bayes ingênuo (NB), dado por \[\begin{equation} f_{NB}(E) = \frac{Pr(+)}{Pr(-)} \prod_{i=1}^{n} \frac{Pr(x_i|+)}{Pr(x_i|-)} \tag{10.35} \end{equation}\]

Exercício 10.10 Mostre que a suposição da Eq. (10.34) aplicada ao classificador bayesiano da Eq. (10.33) leva ao classificador de Bayes ingênuo da Eq. (10.35).

Exemplo 10.34 (Bayes ingênuo - Parte 1) Classificando espécies de lírio via Bayes ingênuo.

# amostra de treino: 60%
n <- nrow(iris)
n_train <- floor(.6*n)
set.seed(1); itrain <- sort(sample(1:n, n_train))
train <- iris[itrain,]
test <- iris[-itrain,]
# modelo
fit <- e1071::naiveBayes(Species ~ ., data = train)
fit
## 
## Naive Bayes Classifier for Discrete Predictors
## 
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
## 
## A-priori probabilities:
## Y
##     setosa versicolor  virginica 
##  0.3555556  0.2888889  0.3555556 
## 
## Conditional probabilities:
##             Sepal.Length
## Y                [,1]      [,2]
##   setosa     5.006250 0.3618389
##   versicolor 6.007692 0.5542007
##   virginica  6.740625 0.6298281
## 
##             Sepal.Width
## Y                [,1]      [,2]
##   setosa     3.428125 0.3928674
##   versicolor 2.784615 0.2378105
##   virginica  2.968750 0.3486726
## 
##             Petal.Length
## Y                [,1]      [,2]
##   setosa     1.456250 0.1966453
##   versicolor 4.376923 0.4537027
##   virginica  5.621875 0.5868090
## 
##             Petal.Width
## Y                [,1]      [,2]
##   setosa     0.250000 0.1218142
##   versicolor 1.334615 0.1742236
##   virginica  2.015625 0.2772089
# predição
pred <- predict(fit, test)
# matriz de confusão
(cm <- table(pred, test[,5]))
##             
## pred         setosa versicolor virginica
##   setosa         18          0         0
##   versicolor      0         23         1
##   virginica       0          1        17

Exercício 10.11 Considere os dados do Exemplo 10.34 e que
\(E\): Exemplo
\(SE\): Setosa
\(\overline{SE} = VE \cup VI\): Não Setosa
\(VE\): Versicolor
\(\overline{VE} = SE \cup VI\): Não Versicolor
\(VI\): Virginica
\(\overline{VI} = SE \cup VE\): Não Virginica
\(SL_i\): \(i\)-ésima observação de Sepal Length
\(SW_i\): \(i\)-ésima observação de Sepal Width
\(PL_i\): \(i\)-ésima observação de Petal Length
\(PW_i\): \(i\)-ésima observação de Petal Width

  1. Verifique que as probabilidades a priori \(Pr(SE)\), \(Pr(VE)\) e \(Pr(VI)\) são simplesmente as proporções das frequências das categorias nos dados de treino.
  2. Verifique que na tabela de probabilidades condicionais são inindicam a média e o desvio padrão amostral de cada (sub-)variável.
  3. Obtenha as densidades gaussianas \(f(SL_i|SE)\), \(f(SW_i|SE)\), \(f(PL_i|SE)\) e \(f(PW_i|SE)\). Implemente.
  4. Obtenha as densidades gaussianas \(f(SL_i|VE)\), \(f(SW_i|VE)\), \(f(PL_i|VE)\) e \(f(PW_i|VE)\). Implemente.
  5. Obtenha as densidades gaussianas \(f(SL_i|VI)\), \(f(SW_i|VI)\), \(f(PL_i|VI)\) e \(f(PW_i|VI)\). Implemente.
  6. Obtenha \(f(SL_i|\overline{SE})\). Implemente.
  7. Extrapole o resultado do item f para \(f(SW_i|\overline{SE})\), \(f(PL_i|\overline{SE})\), \(f(PW_i|\overline{SE})\), \(f(SL_i|\overline{VE})\), \(f(SW_i|\overline{VE})\), \(f(PL_i|\overline{VE})\), \(f(PW_i|\overline{VE})\), \(f(SL_i|\overline{VI})\), \(f(SW_i|\overline{VI})\), \(f(PL_i|\overline{VI})\) e \(f(PW_i|\overline{VI})\).
  8. Calcule \(Pr(SE|E)\), \(Pr(VE|E)\) e \(Pr(VI|E)\). Compare com a saída de predict(fit, test, 'raw')).
  9. Obtenha o relatório de predição com base na matriz de confusão via caret::confusionMatrix ou de outra ferramenta de relatório desejada.

Exercício 10.12 Considere o banco de dados de spam disponibilizado por George Forman no Repositório de Aprendizado de Máquina da UC Irvine.

  1. Ajuste o modelo de Bayes ingênuo para classificar a variável spam. Considere a Seção 8.1.3 de (Izbicki and Santos 2020, 144).
  2. Automatize a leitura de nomesCol a partir do arquivo https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.names.
url0 <- 'https://filipezabala.com/data/spambase.data'
dat <- read.table(url0, sep = ',')
nomesCol <- c(
  'word_freq_make',
  'word_freq_address',
  'word_freq_all',
  'word_freq_3d',
  'word_freq_our',
  'word_freq_over',
  'word_freq_remove',
  'word_freq_internet',
  'word_freq_order',
  'word_freq_mail',
  'word_freq_receive',
  'word_freq_will',
  'word_freq_people',
  'word_freq_report',
  'word_freq_addresses',
  'word_freq_free',
  'word_freq_business',
  'word_freq_email',
  'word_freq_you',
  'word_freq_credit',
  'word_freq_your',
  'word_freq_font',
  'word_freq_000',
  'word_freq_money',
  'word_freq_hp',
  'word_freq_hpl',
  'word_freq_george',
  'word_freq_650',
  'word_freq_lab',
  'word_freq_labs',
  'word_freq_telnet',
  'word_freq_857',
  'word_freq_data',
  'word_freq_415',
  'word_freq_85 ',
  'word_freq_technology',
  'word_freq_1999',
  'word_freq_parts',
  'word_freq_pm',
  'word_freq_direct',
  'word_freq_cs',
  'word_freq_meeting',
  'word_freq_original',
  'word_freq_project',
  'word_freq_re',
  'word_freq_edu',
  'word_freq_table',
  'word_freq_conference',
  'char_freq_;',
  'char_freq_(',
  'char_freq_[',
  'char_freq_!',
  'char_freq_$',
  'char_freq_#',
  'capital_run_length_averag',
  'capital_run_length_longes',
  'capital_run_length_total',
  'spam')
colnames(dat) <- nomesCol
dat$spam <- factor((dat$spam), levels = c('1','0') , ordered = T)
# amostras
set.seed(1); itrain <- sort(sample(1:nrow(dat), floor(.6*nrow(dat))))
train <- dat[itrain,]
test <- dat[-itrain,]
# frequências das categorias nos dados de treino
(tab <- table(dat$spam))
## 
##    1    0 
## 1813 2788
# probabilidades a priori
prop.table(tab)
## 
##         1         0 
## 0.3940448 0.6059552
# modelo
set.seed(4321); fit <- e1071::naiveBayes(spam ~ ., data = train)
# predição
pred <- predict(fit, test)
# matriz de confusão
(cm <- table(pred, test[,'spam']))
##     
## pred   1   0
##    1 666 486
##    0  38 651
# relatório via caret::confusionMatrix
caret::confusionMatrix(cm)
## Confusion Matrix and Statistics
## 
##     
## pred   1   0
##    1 666 486
##    0  38 651
##                                           
##                Accuracy : 0.7154          
##                  95% CI : (0.6942, 0.7359)
##     No Information Rate : 0.6176          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.4625          
##                                           
##  Mcnemar's Test P-Value : < 2.2e-16       
##                                           
##             Sensitivity : 0.9460          
##             Specificity : 0.5726          
##          Pos Pred Value : 0.5781          
##          Neg Pred Value : 0.9448          
##              Prevalence : 0.3824          
##          Detection Rate : 0.3618          
##    Detection Prevalence : 0.6257          
##       Balanced Accuracy : 0.7593          
##                                           
##        'Positive' Class : 1               
## 

Referências

Bayes, Thomas. 1763. “An Essay Towards Solving a Problem in the Doctrine of Chances. By the Late Rev. Mr. Bayes, FRS Communicated by Mr. Price, in a Letter to John Canton, AMFR S.” Philosophical Transactions of the Royal Society of London, no. 53: 370–418. https://www.ias.ac.in/article/fulltext/reso/008/04/0080-0088.
Hand, David J, and Keming Yu. 2001. “Idiot’s Bayes—Not so Stupid After All?” International Statistical Review 69 (3): 385–98. https://www.researchgate.net/profile/David-Hand-2/publication/229731942_Idiot's_Bayes_Not_So_Stupid_after_All/links/569d4f9708aed27a702fa0a3/Idiots-Bayes-Not-So-Stupid-after-All.pdf.
Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. 2009. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. Springer Science & Business Media. https://web.stanford.edu/~hastie/Papers/ESLII.pdf.
Izbicki, Rafael, and Tiago Mendonça dos Santos. 2020. Aprendizado de Máquina: Uma Abordagem Estatística. http://www.rizbicki.ufscar.br/ame/.
Wickramasinghe, Indika, and Harsha Kalutarage. 2020. “Naive Bayes: Applications, Variations and Vulnerabilities: A Review of Literature with Code Snippets for Implementation.” Soft Computing 25 (3): 2277–93. https://link.springer.com/article/10.1007/s00500-020-05297-6.
Zhang, Harry. 2004. “The Optimality of Naive Bayes.” American Association for Artificial Intelligence 1 (2): 3. http://www.cs.unb.ca/~hzhang/publications/FLAIRS04ZhangH.pdf.