Naive Bayes
Os classificadores Naive Bayes aplicam o teorema de Bayes e pressupõem que as características são independentes dada a classe. Conheça as variantes, a filtragem de spam, as limitações e o código Python.
Naive Bayes é uma família de classificadores probabilísticos que aplicam o teorema de Bayes sob a hipótese "ingênua" de que as características são independentes entre si quando se conhece a classe. Essa hipótese permite ao modelo aprender separadamente a distribuição de cada característica em cada classe, de modo que o treinamento consiste numa única passagem de contagem pelos dados de treinamento, e a previsão combina algumas probabilidades armazenadas. Mehran Sahami e colegas aplicaram o método a e-mails indesejados em 1998; os filtros bayesianos de spam baseados nele se popularizaram no início dos anos 2000, e ele continua sendo uma referência rápida e robusta em aprendizagem supervisionada para texto e outros dados de dimensionalidade muito alta.
Como funciona o Naive Bayes#
O teorema de Bayes dá a probabilidade de uma classe C, dadas as características x₁ … xₙ, como P(C | x) = P(C)·P(x | C) / P(x). Estimar P(x | C) para cada combinação de valores das características exigiria um conjunto de dados enorme, por isso o Naive Bayes pressupõe independência condicional e fatoriza a expressão em P(x₁ | C)·P(x₂ | C)·…·P(xₙ | C). O classificador prevê a classe com o maior produto entre a probabilidade a priori P(C) e essa expressão, e descarta P(x), que é igual para todas as classes. As implementações somam log-probabilidades em vez de multiplicar probabilidades, pois o produto de milhares de números pequenos causa subfluxo na aritmética de ponto flutuante.
A contagem cria um modo de falha: uma palavra que nunca apareceu com uma classe durante o treinamento recebe probabilidade zero, o que zera a pontuação dessa classe para qualquer documento que a contenha, independentemente das outras evidências. A suavização aditiva resolve isso adicionando uma pseudocontagem α a cada contagem; α = 1 é a suavização de Laplace e o padrão no scikit-learn.
Tipos de classificadores Naive Bayes#
As variantes diferem pela distribuição que pressupõem para cada característica dentro de uma classe. O Naive Bayes multinomial modela contagens, como a frequência de cada palavra num documento, e é a opção padrão para texto. O Naive Bayes de Bernoulli modela presença ou ausência binária e também penaliza a ausência de palavras típicas de uma classe. O Naive Bayes gaussiano ajusta uma distribuição normal, com sua própria média e variância, a cada característica contínua em cada classe. O Naive Bayes complementar estima as estatísticas das palavras de cada classe a partir de todas as outras classes, o que é adequado para conjuntos de dados de texto desequilibrados, e o Naive Bayes categórico lida com características que assumem um conjunto fixo de valores categóricos.
Este exemplo treina o MultinomialNB do scikit-learn com as contagens de palavras de seis mensagens rotuladas e calcula a pontuação de duas novas mensagens:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# Tiny labeled corpus: 1 = spam, 0 = legitimate
texts = [
"win a free prize now",
"free cash bonus click now",
"claim your free reward today",
"meeting moved to monday",
"lunch with the team today",
"project review notes attached",
]
labels = [1, 1, 1, 0, 0, 0]
# Count words, then learn class priors and per-class word probabilities (alpha=1 is Laplace smoothing)
vectorizer = CountVectorizer()
model = MultinomialNB(alpha=1.0)
model.fit(vectorizer.fit_transform(texts), labels)
new = vectorizer.transform(["free prize today", "notes from the monday meeting"])
print(f"P(spam): {model.predict_proba(new)[:, 1].round(3)}")A primeira mensagem recebe uma probabilidade de spam de 0,881 porque "free" e "prize" aparecem apenas em mensagens de spam; a segunda recebe 0,053 porque "notes", "monday" e "meeting" aparecem apenas em mensagens legítimas. Sem suavização, "free" teria probabilidade zero na classe legítima, e qualquer mensagem legítima que a contivesse seria classificada como spam com certeza.
Pontos fortes e limitações#
O treinamento e a previsão têm tempo linear em relação ao número de amostras e características, por isso o Naive Bayes processa milhões de documentos com uma latência de inferência muito baixa, e as implementações do scikit-learn são atualizadas com novos batches por meio de partial_fit para a aprendizagem online. O método também precisa de poucos dados: Ng e Jordan (2001) mostraram que o Naive Bayes se aproxima do erro assintótico com menos exemplos de treinamento do que a regressão logística, que alcança um erro menor quando há muitos dados. Suas previsões de classe costumam ser precisas mesmo quando as características são correlacionadas, pois basta ordenar corretamente as classes.
As próprias probabilidades são mal calibradas. Características correlacionadas contabilizam as mesmas evidências várias vezes, o que aproxima as pontuações de 0 ou 1; por isso, aplicações que precisam de valores de confiança confiáveis recalibram-nos com dados reservados. Um conjunto de palavras independentes também não consegue representar a ordem das palavras ou suas interações: assim, "not good" parece uma mistura de uma negação e uma palavra positiva, algo que modelos com atenção, como transformers, interpretam no contexto.
Aplicações#
- Filtragem de spam: Os filtros de e-mail calculam a pontuação de cada mensagem com base nas palavras, nos padrões do remetente e nos links que ela contém, e atualizam as estatísticas de palavras quando os usuários marcam mensagens como spam.
- Análise de sentimentos: Avaliações e solicitações de suporte são classificadas como positivas ou negativas com base nas palavras usadas, uma escolha comum para o primeiro modelo antes do ajuste fino de um modelo de linguagem.
- Roteamento de documentos: Artigos de notícias, documentos jurídicos e solicitações de suporte são organizados por tema ou fila, muitas vezes com o Naive Bayes complementar quando algumas categorias são muito mais raras do que outras.
- Referências básicas de processamento de linguagem natural (NLP): A identificação de idiomas e a classificação por tema usam o Naive Bayes como referência rápida que qualquer modelo mais caro precisa superar.
Naive Bayes em visão computacional#
Pixels vizinhos são fortemente correlacionados, por isso tratar pixels brutos como características independentes descarta as bordas e texturas que definem os objetos, capturadas pelas redes neurais convolucionais ao processarem regiões em conjunto. Antes da aprendizagem profunda, a abordagem de saco de palavras visuais aplicava o Naive Bayes a histogramas de descritores locais, como SIFT, agrupados em palavras visuais com agrupamento k-means, o equivalente visual das contagens de palavras. As contagens das classes de objetos encontradas pelo YOLO26 por meio da deteção de objetos formam o mesmo tipo de vetor de contagem; assim, um modelo Naive Bayes multinomial pode classificar uma cena como rua, cozinha ou escritório apenas com base nas deteções.
Naive Bayes vs. modelos relacionados#
- Redes bayesianas: Naive Bayes é a rede bayesiana mais simples: a classe é o único nó pai de cada característica, e não há arestas entre as características. As redes bayesianas gerais acrescentam essas arestas para modelar dependências.
- Inferência bayesiana: o «Bayes» em Naive Bayes refere-se ao teorema de Bayes. O Naive Bayes padrão estima cada probabilidade como uma frequência suavizada, uma única estimativa pontual, enquanto os métodos totalmente bayesianos mantêm uma distribuição sobre cada parâmetro.
- Máquinas de vetores de suporte (SVM): aprendem diretamente uma fronteira discriminativa, com um custo de treinamento mais alto. Na classificação de sentimentos, Wang e Manning (2012) concluíram que Naive Bayes era mais preciso do que as SVMs em trechos curtos, enquanto as SVMs eram mais precisas em avaliações completas.










