Naïve Bayes: como funciona o algoritmo de machine learning

Naïve Bayes: como funciona o algoritmo de machine learning

O tema de hoje, Naïve Bayes, sucede outro importante modelo de classificação em aprendizado supervisionado que já falamos aqui no blog, a árvore de decisão. Ferramenta de suporte a decisões, as Árvores de Decisão utilizam um modelo baseado na teoria dos grafos para desenvolver uma estrutura de tomada de decisão.

A sentença para as árvores de decisão é a classificação concedida a um atributo de rótulo. Modelos de classificação tem aplicações diversas na sociedade moderna, do diagnóstico médico aos filtros de e-mail. A seguir apresentamos mais um interessante modelo, o Naïve Bayes.

O que é Naïve Bayes?

O classificador multinomial Naïve Bayes é um dos modelos mais populares no aprendizado de máquina. Tomando como premissa a suposição de independência entre as variáveis do problema, o modelo de Naïve Bayes realiza uma classificação probabilística de observações, caracterizando-as em classes pré-definidas.

Sendo um modelo adequado para classificação de atributos discretos, o Naïve Bayes tem aplicações na análise de crédito, diagnósticos médicos ou busca por falhas em sistemas mecânicos.

É interessante saber que o Naïve Bayes é um dos modelos mais conhecidos a aplicar o conceito de probabilidade. Esse modelo, como o nome indica, faz uso do teorema de Bayes como princípio fundamental.

Como curiosidade, o teorema foi desenvolvido pelo estatístico, filósofo e ministro presbiteriano Thomas Bayes (1701 - 1761) e publicado depois de sua morte pelas mãos de Richard Price (1723 - 1791), um padre, filósofo e matemático galês, sendo definido como:

P(E)P(E) = P(H)P(H)

Em que P (H) é a probabilidade de que uma hipótese (H) seja verdadeira, antes de qualquer evidência (E) ser conhecida. O termo P(H) é a probabilidade de observarmos uma evidência (E), dado que a hipótese (H) é verdadeira. Por outro lado, P(E) é a probabilidade de observação da evidência (E) e P(E) é a probabilidade de que a hipótese (H) seja verdadeira, dada a evidência observada (E).

O algoritmo Naïve Bayes é uma aplicação direta do teorema homônimo. O termo naïve, (do inglês, ingênuo) se refere à premissa central do algoritmo de que os atributos considerados são não correlacionados entre si.

Como fazer Naïve Bayes?

O classificador multinomial Naïve Bayes tem muitas aplicações, entre elas a classificação de informação textual, sejam documentos legais como políticas públicas ou estratégias de mercado, sejam e-mails em nossa caixa de entrada.

Para aprender na prática, você pode realizar um curso de Data Science que abrange exercícios mão na massa, por exemplo.

Agora, vamos falar um pouco sobre a detecção de spams para exemplificar melhor a atuação do algoritmo. Suponha que você pretenda construir um algoritmo que analise seus e-mails  e os caracterize como do tipo spam ou do tipo não spam, como apresentado na figura abaixo.

Classificador Naïve Bayes de e-mails.


A primeira coisa a se fazer é criarmos um histograma com uma lista de palavras contidas nos e-mails recebidos, como pode ser visto na figura abaixo.

Histograma de palavras em e-mail do tipo spam e não spam.


Com essa informação pode ser calculada a probabilidade de vermos uma determinada palavra, considerando-se um e-mail do tipo não spam, dada por:


A equação acima é definida como a razão entre a contagem do número total de aparições de uma determinada palavra em um subconjunto + não em um subconjunto  + não spam + spam, ∑palavranão spam e a contagem do número total de todas as palavras, ipalavrai,não spam. Da mesma forma, é necessário calcular a probabilidade de vermos uma determinada palavra, considerando um e-mail do tipo spam.


Essa quantidade é utilizada para a determinação do tipo da mensagem. Note que uma quantidade unitária pode ser incluída à mão no histograma, para evitarmos problemas com ocorrências de probabilidades nulas.

Uma vez que treinamos nosso modelo e calculamos as probabilidades de ocorrência em ambos os tipos de e-mails, podemos testar um e-mail recebido, que possui uma probabilidade a priori de ser uma mensagem normal dada pela soma dos e-mails não spam, dividida pela soma do total de e-mails:


Lembre-se de que a probabilidade a priori da mesma mensagem ser um spam é:


A probabilidade de que um e-mail seja não spam, dado que ele é composto por uma combinação palavrai de palavras, é proporcional ao produto entre a probabilidade de que um email seja não spam e a probabilidade de ocorrência da combinação palavrai de palavras em um email do tipo não spam, sendo definida como:


O mesmo raciocínio é aplicado no cálculo da probabilidade de que um email seja spam, dado que ele é composto por uma combinação palavrai de palavras.

Quando o algoritmo compara P (não spam[palavra]i) com P(spam[palavra]i), ele procura pela maior probabilidade e rotula o e-mail:


Uma abordagem ingênua para a classificação de e-mails desconsidera a ordem de ocorrência de palavras dentro da mensagem palavrai, mas sabemos que em nossa comunicação cotidiana expressões verbais possuem determinadas ordens de ocorrência.

O que levar em conta no modelo de predição Naïve Bayes

O modelo Naïve Bayes de classificação de e-mails considera arranjos de palavras, mas não leva em conta a ordem que dá significados a esses arranjos, o que faz dele um modelo enviesado. Entretanto, sua performance tende a estar à altura para a tarefa, o que demonstra que ele tem uma baixa variância.

O cálculo realizado acima, para a classificação de e-mails, considera contagens inteiras da ocorrência de cada palavra, uma forma discreta de contabilizar um determinado atributo. Há uma versão do modelo Naïve Bayes que considera contagens fracionárias de ocorrência de cada atributo e, portanto, distribuições contínuas da probabilidade de ocorrência dos mesmos. Esse modelo é conhecido como Gaussian Naïve Bayes.

Na figura a seguir você pode ver as distribuições de uma base hipotética, com três atributos explicativos e um atributo de rótulo de classe sim/não.

Distribuições de probabilidades de diferentes atributos para modelo de rótulos sim/não.

Essa variação do modelo de Naïve Bayes toma distribuições gaussianas de cada atributo e calcula as probabilidades de ocorrências, a partir de distribuições contínuas de valores. A probabilidade de que uma observação O (valor1, valor2, valor3 ) caia na classe não, dado que ela é composta por uma combinação [atributo]i de atributos é proporcional ao produto entre sua probabilidade a priori e a  probabilidade de ocorrência da combinação [atributo]i de atributos em uma observação do tipo não.

O mesmo raciocínio é aplicado no cálculo da probabilidade de que uma observação pertença à classe sim, dado que ela é composta pela combinação [atributo]i. Novamente, quando o algoritmo compara P (não|[atributo]i) com P(sim|[atributo]i), ele procura pela maior probabilidade. Rotulando a observação, da mesma maneira como é feita a rotulação dos casos de contagens inteiras da ocorrência.

O modelo de Naïve Bayes é de fácil entendimento e rápida execução, funcionando também para predições de múltiplas classes. Em geral, o Naïve Bayes performa tão bem ou melhor que outros modelos, quando a suposição da independência entre atributos é assumida.

Ele funciona bem com variáveis categóricas e para o caso das variáveis numéricas, ele as considera como distribuições normais. Por outro lado, se uma variável categórica tem uma classe contida no conjunto de teste mas não observada no conjunto de treino, um valor nulo de probabilidade lhe será atribuído, o que impossibilita uma predição e técnicas de suavização deverão ser aplicadas.

Além disso, a suposição de independência entre as variáveis nem sempre se confirma em problemas reais. Mesmo assim o Naïve Bayes encontra aplicações em problemas de predição em tempo real, de múltiplas classes, de classificação de texto e também em sistemas de recomendação.

Leia mais no blog DH:

+ Qual a diferença entre data lake e data warehouse?

+ Banco de dados públicos: conheça 6 repositórios de dados disponíveis

+ O dia a dia de um analista de dados: responsabilidades, ferramentas e dúvidas

E aí, já segue a gente no Twitter? Vem pra rede, vamos conversar sobre habilidades digitais! ;)