Utilidade
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.
Atualmente, o algoritmo se tornou popular na área de Aprendizado de Máquina (Machine Learning) para categorizar textos baseado na frequência das palavras usadas, e assim pode ser usado para identificar se determinado e-mail é um SPAM ou sobre qual assunto se refere determinado texto, por exemplo.
Por ser muito simples e rápido, possui um desempenho relativamente maior do que outros classificadores. Além disso, o Naive Bayes só precisa de um pequeno número de dados de teste para concluir classificações com uma boa precisão.
A principal característica do algoritmo, e também o motivo de receber “naive” (ingênuo) no nome, é que ele desconsidera completamente a correlação entre as variáveis (features). Ou seja, se determinada fruta é considerada uma “Maçã” se ela for “Vermelha”, “Redonda” e possui “aproximadamente 10cm de diâmetro”, o algoritmo não vai levar em consideração a correlação entre esses fatores, tratando cada um de forma independente.
Determinando probabilidades
Para entender um pouco melhor como funciona o classificador, vamos a um exemplo rápido:
Digamos que estamos trabalhando no diagnóstico de uma nova doença, e que fizemos testes em 100 pessoas distintas.
Após coletarmos a análise, descobrimos que 20 pessoas possuíam a doença (20%) e 80 pessoas estavam saudáveis (80%), sendo que das pessoas que possuíam a doença, 90% receberam Positivo no teste da doença, e 30% das pessoas que não possuíam a doença também receberam o teste positivo.
Listando esses dados de uma forma mais clara, temos:
- 100 pessoas realizaram o teste.
- 20% das pessoas que realizaram o teste possuíam a doença.
- 90% das pessoas que possuíam a doença, receberam positivo no teste.
- 30% das pessoas que não possuíam a doença, receberam positivo no teste.
A pergunta neste caso seria: Se uma nova pessoa realizar o teste e receber um resultado positivo, qual a probabilidade de ela possuir a doença?
O algoritmo de Naive Bayes consiste em encontrar uma probabilidade a posteriori (possuir a doença, dado que recebeu um resultado positivo), multiplicando a probabilidade a priori (possuir a doença) pela probabilidade de “receber um resultado positivo, dado que tem a doença”.
Devemos também computar a probabilidade a posteriori da negação (Não possuir a doença, dado que recebeu um resultado Positivo).
Ou seja:
- P(doença|positivo) = 20% * 90%
- P(doença|positivo) = 0,2 * 0,9
- P(doença|positivo) = 0,18
- P(não doença|positivo) = 80% * 30%
- P(não doença|positivo) = 0,8 * 0,3
- P(não doença|positivo) = 0,24
Após isso precisamos normalizar os dados, para que a soma das duas probabilidades resulte 1 (100%).
Para isso, dividimos o resultado pela soma das duas probabilidades.
Exemplo:
- P(doença|positivo) = 0,18/(0,18+0,24) = 0,4285
- P(não doença|positivo) = 0,24/(0,18+0,24) = 0,5714
- 0,4285 + 0,5714 = 0,9999.. ou aproximadamente 1.
A fórmula se apresenta desta maneira:
Podemos concluir que se o resultado do teste da nova pessoa for positivo, ela possui aproximadamente 43% (0,4285) de chance de estar doente.
Implementação em Python
Ao estudar sobre Inteligência Artificial, é inevitável receber algum tipo de contato com a linguagem de programação Python.
O principal motivo são as grandes bibliotecas que tratam e implementam os algoritmos mais usados em Aprendizado de Máquina.
Uma das mais famosas, é a biblioteca Scikit Learn (ou sklearn).
O Sklearn implementa o Naive Bayes de 3 formas:
Cada implementação é utilizada para objetivos diferentes.
Implementação em Ruby
No Github podemos encontrar a implementação do Naive Bayes em diversas linguagens, incluindo Ruby.
A gem “nbayes” implementa de uma forma muito simples de usar para classificar texto.
Exemplo:
Conclusão
Se o problema for classificar texto ou algo do gênero, o Naive Bayes é uma das melhores alternativas. Se a correlação entre os fatores forem extremamente importantes, o Naive Bayes pode falhar na predição da nova informação.
Algumas utilidades práticas:
- Previsões em tempo real: Por possuir uma velocidade relativamente alta e precisar apenas de poucos dados para realizar a classificação, o Naive Bayes pode ser utilizado para previsões em tempo real.
- Classificação de textos/Filtragem de spam/Análise de sentimento: Muito utilizado para filtragem de SPAM, Análise de Sentimento nas redes sociais (identificar se o usuário está feliz ou triste ao publicar determinado texto).
O entendimento do algoritmo pode ser confuso no início. Abaixo deixo alguns links (em inglês) que explicam de outras maneiras esta técnica:
- Guia sobre Naive Bayes do site Arbitral
- 6 passos fáceis para aprender o algoritmo Naive Bayes (com código em Python)
- Classificador Naive Bayes - Wikipedia
- Escrito originalmente por Lorenzo Candiago.