O algoritmo “Naive Bayes” é um classificador probabilístico muito utilizado em machine learning. Baseado no “Teorema de Bayes”, o modelo foi criado por um matemático inglês, e também ministro presibiteriano, chamado Thomas Bayes (1701 – 1761) para tentar provar a existência de Deus.

Hoje é também utilizado na área de Aprendizado de Máquina (Machine Learning) para categorizar textos com base na frequência das palavras usadas.

Entre as possibilidades de aplicações está a classificação de um e-mail como SPAM ou Não-SPAM e a identificação de um assunto com base em seu conteúdo.

Ele recebe o nome de “naive” (ingênuo) porque desconsidera a correlação entre as variáveis (features). Ou seja, se determinada fruta é rotulada como “Limão”, caso ela também seja descrita como “Verde” e “Redonda”, o algoritmo não vai levar em consideração a correlação entre esses fatores. Isso porque trata cada um de forma independente.

🆕 Este artigo foi revisado e atualizado em maio de 2024!

 

O que é Naive Bayes

O Naive Bayes é um dos algoritmos mais simples e poderosos utilizados em Machine Learning para tarefas de classificação. Baseado no teorema de Bayes, ele assume que todas as características (features) são independentes entre si, simplificando significativamente os cálculos.

É Frequentemente aplicado em processamento de linguagem natural e diagnósticos médicos, o método pode ser usado quando os atributos que descrevem as instâncias forem condicionalmente independentes. O teorema de Bayes trata sobre probabilidade condicional, ou seja, a probabilidade de um evento A ocorrer, dado que o evento B ocorreu.

 

Teorema de Bayes

O teorema de Bayes é a base do classificador Naive Bayes. Ele fornece uma forma de atualizar as probabilidades de uma hipótese com base em novas evidências. A fórmula do teorema de Bayes é:

 
[math] P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
[/math]

 
Onde:

  • [math]P(A|B)[/math] é a probabilidade de A dado B.
  • [math]P(B|A)[/math] é a probabilidade de B dado A.
  • [math]P(A)[/math] é a probabilidade a priori de A.
  • [math]P(B)[/math] é a probabilidade a priori de B.

 

Princípio do Naive Bayes

O classificador Naive Bayes aplica o teorema de Bayes com a suposição de que as características são independentes. A fórmula é:

 
[math] P(C_k|X) = \frac{P(X|C_k) \cdot P(C_k)}{P(X)}
[/math]

 
Como [math]P(X)[/math] é constante para todas as classes, a fórmula pode ser simplificada para:

 
[math] P(C_k|X) \propto P(X|C_k) \cdot P(C_k)
[/math]

 
Usando a suposição de independência:

 
[math] P(X|C_k) = \prod_{i=1}^{n} P(x_i|C_k)
[/math]

 

Variações do Naive Bayes

Gaussian Naive Bayes

Usado quando as características são contínuas e assume uma distribuição normal. A fórmula é:

 
[math] P(x_i|C_k) = \frac{1}{\sqrt{2\pi\sigma_{C_k}^2}} \exp\left(-\frac{(x_i – \mu_{C_k})^2}{2\sigma_{C_k}^2}\right)
[/math]

 

Multinomial Naive Bayes

Adequado para dados discretos, como contagens de palavras em problemas de classificação de texto. A fórmula é:

 
[math] P(x_i|C_k) = \frac{N_{C_k,x_i} + \alpha}{N_{C_k} + \alpha n}
[/math]

 

Bernoulli Naive Bayes

O modelo de Bernoulli Naive Bayes assume que os atributos seguem uma distribuição de Bernoulli, que é um caso especial da distribuição binomial onde [math]n=1[/math]. Neste modelo, cada atributo [math]Xi[/math] pode ter apenas dois valores: 0 ou 1.

A distribuição de Bernoulli é então usada para modelar a presença ou ausência de um atributo. Sua fórmula é:

 
[math] P(x_i|C_k) = P(x_i=1|C_k)^{x_i} \cdot P(x_i=0|C_k)^{1-x_i}
[/math]

 

Aplicações do Naive Bayes

O Naive Bayes é amplamente utilizado em várias áreas devido à sua simplicidade e eficiência:

Classificação de Texto

Naive Bayes é amplamente utilizado para classificação de texto, como filtragem de spam, análise de sentimentos e categorização de documentos.

Reconhecimento de Padrões

Em reconhecimento de padrões, o Naive Bayes pode ser usado para tarefas como reconhecimento de faces.

Diagnóstico Médico

O Naive Bayes é usado em diagnósticos médicos para prever a probabilidade de uma doença com base em sintomas.

Sistema de Recomendação

Em sistemas de recomendação, o Naive Bayes pode ser usado para prever a probabilidade de um usuário gostar de um item com base em suas preferências anteriores.

 

Vantagens e Desvantagens

Vantagens

  • Simplicidade: Fácil de entender e implementar.
  • Rapidez: Rápido para treinar e prever.
  • Eficiência: Funciona bem com grandes conjuntos de dados.

Desvantagens

  • Suposição de Independência: A suposição de que todas as características são independentes raramente é verdadeira na prática.
  • Sensibilidade a Dados Escassos: Pode ser afetado por características que não aparecem em todos os dados.

 

Exemplo de Naive Bayes para Diagnóstico Médico

Imagine que estamos trabalhando no diagnóstico de uma nova doença. Após realizar testes em 100 pessoas, descobrimos que 20 delas possuíam a doença (20%) e 80 estavam saudáveis (80%).

De todas as pessoas que possuíam a doença, 90% receberam um resultado positivo no teste.
30% das pessoas que não possuíam a doença também receberam um resultado positivo.

Vamos tabular os dados:

100 pessoas realizaram o teste.
20% das pessoas possuíam a doença.
90% das pessoas com a doença receberam positivo no teste.
30% das pessoas sem a doença receberam positivo no teste.

A questão é: se uma nova pessoa receber um resultado positivo, qual a probabilidade dela realmente possuir a doença?

Essa probabilidade a posteriori é resolvida pelo Naive Bayes. Multiplicamos a probabilidade a priori (possuir a doença) pela probabilidade de “receber um resultado positivo, dado que tem a doença”.

Agora vamos fazer os cálculos:

Probabilidade de possuir a doença, dado que o teste é positivo:

[math] P(doença|positivo) = \frac{P(positivo|doença) \cdot P(doença)}{P(positivo)}
[/math]

 
[math]P(doença) = 0.2[/math]

 
[math]P(positivo|doença) = 0.9[/math]

 
[math]P(positivo) = P(positivo|doença) \cdot P(doença) + P(positivo|não\ doença) \cdot P(não\ doença)[/math]

 
[math]P(positivo) = 0.9 \cdot 0.2 + 0.3 \cdot 0.8 = 0.18 + 0.24 = 0.42[/math]

 
[math] P(doença|positivo) = \frac{0.9 \cdot 0.2}{0.42} \approx 0.4286
[/math]

 
Probabilidade de não possuir a doença, dado que o teste é positivo:

 
[math] P(não\ doença|positivo) = \frac{P(positivo|não\ doença) \cdot P(não\ doença)}{P(positivo)}
[/math]

 
[math]P(não\ doença) = 0.8[/math]

 
[math]P(positivo|não\ doença) = 0.3[/math]

 
[math] P(não\ doença|positivo) = \frac{0.3 \cdot 0.8}{0.42} \approx 0.5714
[/math]

 
[math]P(doença|positivo) + P(não\ doença|positivo) \approx 0.4286 + 0.5714 = 1[/math]

 
Portanto, a probabilidade de uma pessoa possuir a doença, dado que o teste é positivo, é aproximadamente 42.86%, e a probabilidade de não possuir é aproximadamente 57.14%.

 

Exemplo de Implementação em Python

A seguir, um exemplo de como implementar o Naive Bayes usando a biblioteca scikit-learn em Python:


from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Exemplo de dados
X = [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]] y = [0, 0, 1, 1, 1]

# Dividindo os dados em treino e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Gaussian Naive Bayes
gnb = GaussianNB()
gnb.fit(X_train, y_train)
y_pred_gnb = gnb.predict(X_test)
accuracy_gnb = accuracy_score(y_test, y_pred_gnb)
print(f’GaussianNB Acurácia: {accuracy_gnb}’)

# Multinomial Naive Bayes
mnb = MultinomialNB()
mnb.fit(X_train, y_train)
y_pred_mnb = mnb.predict(X_test)
accuracy_mnb = accuracy_score(y_test, y_pred_mnb)
print(f’MultinomialNB Acurácia: {accuracy_mnb}’)

# Bernoulli Naive Bayes
bnb = BernoulliNB()
bnb.fit(X_train, y_train)

y_pred_bnb = bnb.predict(X_test)

accuracy_bnb = accuracy_score(y_test, y_pred_bnb)

print(f’BernoulliNB Acurácia: {accuracy_bnb}’)

 

Conclusão

A resolução de problemas relacionados a texto é muito bem resolvida com a utilização do Naive Bayes. Classificação de textos, filtragem de SPAM e análise de sentimento em redes sociais são algumas das muitas aplicações para o algoritmo.

Além disso, o algoritmo é muito robusto para previsões em tempo real, ainda mais por precisar de poucos dados para realizar a classificação. Entretanto, caso haja necessidade de correlacionar fatores, o Naive Bayes tende a falhar na predição.

 

Referências

Categorized in:

Machine Learning,

Last Update: junho 23, 2024