No post de introdução (que você acessar aqui), aprendemos o que é Machine Learning e usamos um classificador de emails como exemplo. Agora vamos aprender a codificar este classificador, utilizando o algoritmo Naive Bayes.
Naive Bayes é um algoritmo simples de classificação, que utiliza dados históricos para prever a classificação de um novo dado. Como funciona: Ele calcula a probabilidade de um evento ocorrer dado que outro evento já ocorreu. Onde é aplicado: Ficou conhecido por filtrar emails entre spam/não spam, mas pode ser utilizado em situações gerais de classificação entre 2 opções.
Muitas das vezes, os algoritmos de Machine Learning são implementados usando Python, porque essa linguagem já possui uma biblioteca com vários algoritmos implementados. Vamos aprender a utilizar Naive Bayes em um código Python, sem entrar nos detalhes matemáticos do algoritmo, mas você pode encontrar informações em [1].
Instalar Python
Inicialmente você precisará instalar o Python na sua máquina. Entre em https://www.python.org/ e faça download para Linux ou Windows.
Após a instalação, na Linha de Comando, digite:
pip install scikit-learn numpy scipy
Esta linha instala várias bibliotecas que utilizaremos neste primeiro exemplo: Scikit-learn [2] é um pacote de bibliotecas Python que contém a implementação de muuuuitos algoritmos de Machine Learning. NumPy é o pacote básico da linguagem Python que suporta vetores, matrizes e funções matemáticas. SciPy é um pacote open source que implementa diversas técnicas de computação científica.
Agora, ao digitar "python" na Linha de Comando você já está dentro do console do Python e podemos começar a trabalhar.
Preparando os dados
Lembra-se dos dados do post anterior?

Imaginando que temos estes 10 dados e queremos prever 2 novos, conforme abaixo.

Inicialmente, vamos entender que cada linha é um conjunto de dados, por exemplo na primeira linha da Figura 1, as características [Sim, 50, Sim] geram o resultado [É SPAM].
Agrupando todas as características temos:
[Sim, 50, Sim], [Não, 1, Não], [Não, 60, Sim], [Não, 100, Sim], [Sim, 70, Não], [Não, 3, Sim], [Sim, 1, Sim], [Sim, 200, Sim], [Não, 2, Sim], [Sim, 1, Sim]
Podemos transformar "Sim" em "1" e "Não" em "0", ficando com:
[1, 50, 1], [0, 1, 0], [0, 60, 1], [0, 100, 1], [1, 70, 0], [0, 3, 1], [1, 1, 0], [1, 200, 1], [0, 2, 1], [1, 1, 1]
Agora, vamos agrupar os resultados:
É SPAM, NÃO É SPAM, É SPAM, É SPAM, É SPAM, NÃO É SPAM, NÃO É SPAM, É SPAM, É SPAM, É SPAM
Podemos transformar "É SPAM" em "1" e "NÃO É SPAM" em "0", ficando com:
1, 0, 1, 1, 1, 0, 0, 1, 1, 1
Resumindo: Este é o conjunto de características (features, em inglês):
[[1, 50, 1], [0, 1, 0], [0, 60, 1], [0, 100, 1], [1, 70, 0], [0, 3, 1], [1, 1, 0], [1, 200, 1], [0, 2, 1], [1, 1, 1]]
E este é o conjunto de resultados (labels, em inglês):
[1, 0, 1, 1, 1, 0, 0, 1, 1, 1]
Implementando Naive Bayes
Vamos criar então nosso Naive Bayes. Você pode colar este código no console do Python e ele já é executado ou então pode salvá-lo em um arquivo arquivo.py e executar este arquivo diretamente da Linha de Comando.
from sklearn.naive_bayes import MultinomialNB features = [[1, 50, 1], [0, 1, 0], [0, 60, 1], [0, 100, 1], [1, 70, 0], [0, 3, 1], [1, 1, 0], [1, 200, 1], [0, 2, 1], [1, 1, 1]] labels = [1, 0, 1, 1, 1, 0, 0, 1, 1, 1] clf = MultinomialNB() clf.fit(features, labels) pred = clf.predict([[0, 3, 1]]) print(pred)
[0] ou seja NÃO É SPAM
Se mudarmos a quantidade de destinatário de 3 para 300 (linha 2 da Figura 2), o resultado é outro:
pred = clf.predict([[0, 300, 1]]) print(pred)
[1] ou seja É SPAM
Conclusão
Esse é um exemplo bem básico sobre Naive Bayes, mas que já te mostra como é fácil implementá-lo usando as bibliotecas do Python. Mais detalhes dos parâmetros e métodos desta biblioteca podem ser encontrados em [3]. Especificamente neste exemplo, usamos todos os dados históricos para TREINAR o modelo, mas o correto é dividir os dados em 2 grupos (70% para treino e 30% para teste do modelo). Vamos fazer isso no próximo post.