Este documento apresenta um tutorial sobre machine learning com Python e scikit-learn. Ele discute introdução ao machine learning, classificação, regressão e o framework scikit-learn. Apresenta exemplos de classificação usando reconhecimento de dígitos escritos à mão e regressão linear para prever preços de imóveis.
1. Apresentação Introdução Classificação Regressão Dúvidas
Machine Learning
Com Python e scikit-learn
Christian S. Perone
christian.perone@gmail.com
5 de junho de 2014
3. Apresentação Introdução Classificação Regressão Dúvidas
Apresentação
▸ Christian S. Perone
▸ Trabalha como desenvolvedor
▸ Colaborador e mantenedor open-source
▸ Blog
▸ http://pyevolve.sourceforge.net/wordpress
▸ Projetos
▸ https://github.com/perone
▸ Twitter @tarantulae
4. Apresentação Introdução Classificação Regressão Dúvidas
Roteiro
Apresentação
Apresentação
Introdução
O que é Machine Learning ?
O problema
Supervisionado vs Não-supervisionado
Aprendizado Supervisionado
Classificação
Introdução
OCR
Support Vector Machines
Classificação no scikit-learn
Regressão
Introdução
Imóveis de Porto Alegre
Regressão Linear
Dúvidas
Dúvidas
6. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
7. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
▸ Classificador de Emails
8. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
▸ Classificador de Emails
▸ Reconhecedor de caracteres (OCR)
9. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
▸ Classificador de Emails
▸ Reconhecedor de caracteres (OCR)
▸ Sistemas de Recomendação
10. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
▸ Classificador de Emails
▸ Reconhecedor de caracteres (OCR)
▸ Sistemas de Recomendação
▸ Retenção de clientes
11. Apresentação Introdução Classificação Regressão Dúvidas
O que é Machine Learning ?
Machine Learning (ou Aprendizado de Máquina) é uma sub-área da
Inteligência Artificial que estuda sistemas que podem aprender com
dados. Alguns exemplos:
▸ Classificador de Emails
▸ Reconhecedor de caracteres (OCR)
▸ Sistemas de Recomendação
▸ Retenção de clientes
▸ Análise de Sentimento
12. Apresentação Introdução Classificação Regressão Dúvidas
O problema
O problema de aprendizado geralmente considera um conjunto de n
amostras e tenta prever dados de uma amostra desconhecida. As
propriedades de uma amostra são geralmente chamadas de features. São
categorizados em:
▸ Aprendizado Supervisionado (Supervised Learning)
▸ Aprendizado Não-supervisionado (Unsupervised Learning)
Nota
Existem também outras categorias (inclusive híbridas) que não serão
abordadas.
13. Apresentação Introdução Classificação Regressão Dúvidas
Supervisionado vs Não-supervisionado
No Aprendizado Supervisionado, os algoritmos são treinados com
dados rotulados. Exemplo: Reconhecimento de Caracteres (OCR), onde
o treino é realizado com várias amostras de caracteres onde cada
imagem contém também um rótulo de qual caractere aquela imagem
representa.
14. Apresentação Introdução Classificação Regressão Dúvidas
Supervisionado vs Não-supervisionado
No Aprendizado Supervisionado, os algoritmos são treinados com
dados rotulados. Exemplo: Reconhecimento de Caracteres (OCR), onde
o treino é realizado com várias amostras de caracteres onde cada
imagem contém também um rótulo de qual caractere aquela imagem
representa.
No Aprendizado Não-supervisionado, os algoritmos operam em
dados não rotulados. Um exemplo de algoritmo não-supervisionado é o
clustering, em que amostras são agrupadas conforme o nível de
similaridade (ex: agrupar imagens semelhantes em um banco de
imagens).
16. Apresentação Introdução Classificação Regressão Dúvidas
Aprendizado Supervisionado
No Aprendizado Supervisionado, temos dois tipos de problemas:
Classificação As amostras pertencem a duas ou mais classes (ex:
spam/não-spam) e o objetivo é aprender através de dados
já rotulados qual a classe de um dado novo não rotulado.
A classificação pode também ser vista como um
aprendizado de valores discretos.
17. Apresentação Introdução Classificação Regressão Dúvidas
Aprendizado Supervisionado
No Aprendizado Supervisionado, temos dois tipos de problemas:
Classificação As amostras pertencem a duas ou mais classes (ex:
spam/não-spam) e o objetivo é aprender através de dados
já rotulados qual a classe de um dado novo não rotulado.
A classificação pode também ser vista como um
aprendizado de valores discretos.
Regressão Se a saída esperada do algoritmo é uma ou mais
variáveis contínuas, o problema é chamado de regressão.
Um exemplo de regressão é prever o preço de um imóvel
levando em consideração suas features (características)
como o tamanho, número de quartos, número de
garagens, etc.
18. Apresentação Introdução Classificação Regressão Dúvidas
Aprendizado Supervisionado
Figura: Diagrama de aprendizado supervisionado (por Olivier Grisel)
19. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
20. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
▸ Ótima documentação
21. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
▸ Ótima documentação
▸ Inúmeros exemplos
22. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
▸ Ótima documentação
▸ Inúmeros exemplos
▸ Licença permissiva (BSD)
23. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
▸ Ótima documentação
▸ Inúmeros exemplos
▸ Licença permissiva (BSD)
▸ Utilizado por grandes empresas
24. Apresentação Introdução Classificação Regressão Dúvidas
Scikit-Learn
Scikit-learn (sklearn) é um framework open-source de Machine
Learning escrito em Python utilizando as plataformas Numpy/Scipy e
Matplotlib.
▸ Ótima documentação
▸ Inúmeros exemplos
▸ Licença permissiva (BSD)
▸ Utilizado por grandes empresas
▸ Grande comunidade e muitos workshops
29. Apresentação Introdução Classificação Regressão Dúvidas
Classificação - Reconhecimento de Caracteres
Para demonstrar um problema de classificação, vamos utilizar um
conjunto de dados de dígitos escritos à mão para treinar um modelo
que irá posteriormente reconhecer imagens de caracteres escritos a mão.
O conjunto de dados que vamos utilizar contém:
▸ 1.797 imagens rotuladas de caracteres escritos a mão
▸ Aproximadamente 180 caracteres por classe
▸ Cada imagem tem o tamanho 8x8 (64 pixels)
▸ Cada pixel tem a intensidade de 0 à 16 (tons de cinza)
31. Apresentação Introdução Classificação Regressão Dúvidas
Classificação - Reconhecimento de Caracteres
O pacote scikit-learn (sklearn) já vem com o dataset de dígitos:
>>> from sklearn import datasets
>>> digitos = datasets.load_digits()
>>> digitos.data.shape
(1797L, 64L)
>>> digitos.target.shape
(1797L,)
Nota
Como pode-se notar pelo formato dos dados do atributo data, o dataset
contém 1.797 amostras de caracteres contendo 64 pixels em cada uma das
amostras. Além dos dados temos os rótulos dos dados no atributo target.
34. Apresentação Introdução Classificação Regressão Dúvidas
Classificação - Support Vector Machines
Para classificar as imagens de caracteres vamos utilizar um método
muito conhecido em Machine Learning, este método é chamado de
Support Vector Machine. SVM é uma técnica de classificação (ou
regressão) que procura encontrar um modelo onde a separação entre as
classes tenha a maior margem possível.
44. Apresentação Introdução Classificação Regressão Dúvidas
Regressão
Para ilustrar como uma regressão funciona, utilizaremos o método de
Regressão Linear em um conjunto de dados reais. O método de
Regressão Linear é um dos métodos mais simples para se realizar uma
regressão. Ele funciona traçando uma reta sobre os dados de forma que
esta reta tenha a soma de residuais com o menor valor possível.
45. Apresentação Introdução Classificação Regressão Dúvidas
Regressão
Para ilustrar como uma regressão funciona, utilizaremos o método de
Regressão Linear em um conjunto de dados reais. O método de
Regressão Linear é um dos métodos mais simples para se realizar uma
regressão. Ele funciona traçando uma reta sobre os dados de forma que
esta reta tenha a soma de residuais com o menor valor possível.
Figura: Regressao Linear
46. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Dados de Imóveis
Para ilustrar como a Regressão Linear funciona, utilizaremos o método
em um conjunto de dados reais de imóveis da cidade de Porto Alegre /
RS. Este conjunto de dados foi extraído 1
em Março de 2014 do site de
uma imobiliária e contém dados de aproximadamente 6.800 imóveis a
venda.
Figura: Alguns imóveis do bairro Bela Vista.
1
Utilizando BeautifulSoup
49. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Dados de Imóveis
Figura: Scatter plot de imóveis do Centro (vermelho) e Bela Vista (azul).
50. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear
Para realizar a Regressao Linear, usaremos apenas 1 feature (para
facilitar a visualização da regressão).
51. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear
Para realizar a Regressao Linear, usaremos apenas 1 feature (para
facilitar a visualização da regressão).
Como entrada utilizaremos o dado da área do imóvel (em mts
quadrados) e como saída esperada (valor que queremos prever baseado
na área) utilizaremos o valor do imóvel em reais.
52. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Overfitting
Se em tudo o mais forem
idênticas as várias explicações
de um fenômeno, a mais
simples é a melhor.
—Guilherme de Ockham
(1288-1347)
58. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear
import matplotlib.pyplot as plt
plt.scatter(area, preco, alpha=0.5)
plt.plot(area, model.predict(area), color="red")
59. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear
import matplotlib.pyplot as plt
plt.scatter(area, preco, alpha=0.5)
plt.plot(area, model.predict(area), color="red")
Figura: Regressão Linear e dados de treino.
60. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Múltiplas features
No modelo anterior, utilizamos apenas uma feature (área do imóvel)
para criar um modelo, mas ainda temos um dado com um ótimo valor
preditivo.
Podemos incorporar este novo dado em uma nova feature do nosso
modelo para reduzir o erro do nosso modelo.
65. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Múltiplas features
features, preco = imobiliaria.load_data("Bela Vista")
features_train, features_test, preco_train, preco_test =
train_test_split(features, preco, test_size=0.20)
model.fit(features_train, preco_train)
model.score(features_test, preco_test)
0.81960426250252283
Melhora no score de 0.77 para 0.81.
66. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Múltiplas features
Utilizando o modelo de regressão que treinamos, podemos fazer
perguntas como por exemplo, qual seria a estimativa de preço para um
imóvel de 56 m2
com apenas 1 dormitório localizado no bairro Bela
Vista ?
67. Apresentação Introdução Classificação Regressão Dúvidas
Regressão Linear - Múltiplas features
Utilizando o modelo de regressão que treinamos, podemos fazer
perguntas como por exemplo, qual seria a estimativa de preço para um
imóvel de 56 m2
com apenas 1 dormitório localizado no bairro Bela
Vista ?
linear_model.predict([56, 1])
array([ 216157.98252844])
Ou seja: um imóvel de 1 dormitório com 56 m2
no bairro Bela Vista
em Porto Alegre custaria aproximadamente R$216.157,00.