Slide 1

Slide 1 text

A I C R D M L Com Python e scikit-learn Christian S. Perone [email protected] de junho de

Slide 2

Slide 2 text

A I C R D Parte I A

Slide 3

Slide 3 text

A I C R D A ▸ Christian S. Perone ▸ Trabalha como desenvolvedor ▸ Colaborador e mantenedor open-source ▸ Blog ▸ http://pyevolve.sourceforge.net/wordpress ▸ Projetos ▸ https://github.com/perone ▸ Twitter @tarantulae

Slide 4

Slide 4 text

A I C R D R A Apresentação I O que é Machine Learning ? O problema Supervisionado vs Não-supervisionado Aprendizado Supervisionado C Introdução OCR Support Vector Machines Classi cação no scikit-learn R Introdução Imóveis de Porto Alegre Regressão Linear D Dúvidas

Slide 5

Slide 5 text

A I C R D Parte II I

Slide 6

Slide 6 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos:

Slide 7

Slide 7 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos: ▸ Classi cador de Emails

Slide 8

Slide 8 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos: ▸ Classi cador de Emails ▸ Reconhecedor de caracteres (OCR)

Slide 9

Slide 9 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos: ▸ Classi cador de Emails ▸ Reconhecedor de caracteres (OCR) ▸ Sistemas de Recomendação

Slide 10

Slide 10 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos: ▸ Classi cador de Emails ▸ Reconhecedor de caracteres (OCR) ▸ Sistemas de Recomendação ▸ Retenção de clientes

Slide 11

Slide 11 text

A I C R D O M L Machine Learning (ou Aprendizado de Máquina) é uma sub-área da Inteligência Arti cial que estuda sistemas que podem aprender com dados. Alguns exemplos: ▸ Classi cador de Emails ▸ Reconhecedor de caracteres (OCR) ▸ Sistemas de Recomendação ▸ Retenção de clientes ▸ Análise de Sentimento

Slide 12

Slide 12 text

A I C R D O 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) N Existem também outras categorias (inclusive híbridas) que não serão abordadas.

Slide 13

Slide 13 text

A I C R D S N - 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.

Slide 14

Slide 14 text

A I C R D S N - 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).

Slide 15

Slide 15 text

A I C R D A S No Aprendizado Supervisionado, temos dois tipos de problemas:

Slide 16

Slide 16 text

A I C R D A S No Aprendizado Supervisionado, temos dois tipos de problemas: Classi caçã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 classi cação pode também ser vista como um aprendizado de valores discretos.

Slide 17

Slide 17 text

A I C R D A S No Aprendizado Supervisionado, temos dois tipos de problemas: Classi caçã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 classi caçã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.

Slide 18

Slide 18 text

A I C R D A S Figura: Diagrama de aprendizado supervisionado (por Olivier Grisel)

Slide 19

Slide 19 text

A I C R D S -L Scikit-learn (sklearn) é um framework open-source de Machine Learning escrito em Python utilizando as plataformas Numpy/Scipy e Matplotlib.

Slide 20

Slide 20 text

A I C R D S -L Scikit-learn (sklearn) é um framework open-source de Machine Learning escrito em Python utilizando as plataformas Numpy/Scipy e Matplotlib. ▸ Ótima documentação

Slide 21

Slide 21 text

A I C R D S -L 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

Slide 22

Slide 22 text

A I C R D S -L 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)

Slide 23

Slide 23 text

A I C R D S -L 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

Slide 24

Slide 24 text

A I C R D S -L 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

Slide 25

Slide 25 text

A I C R D Parte III C

Slide 26

Slide 26 text

A I C R D C - H

Slide 27

Slide 27 text

A I C R D C - H

Slide 28

Slide 28 text

A I C R D C - H

Slide 29

Slide 29 text

A I C R D C - R C Para demonstrar um problema de classi caçã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: ▸ . imagens rotuladas de caracteres escritos a mão ▸ Aproximadamente caracteres por classe ▸ Cada imagem tem o tamanho x ( pixels) ▸ Cada pixel tem a intensidade de à (tons de cinza)

Slide 30

Slide 30 text

A I C R D C - R C

Slide 31

Slide 31 text

A I C R D C - R C 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,) N Como pode-se notar pelo formato dos dados do atributo data, o dataset contém . amostras de caracteres contendo pixels em cada uma das amostras. Além dos dados temos os rótulos dos dados no atributo target.

Slide 32

Slide 32 text

A I C R D C - R C

Slide 33

Slide 33 text

A I C R D C - R C >> digitos.data[0] array([ 0., 0., 5., 13., 9., 1., 0., 0., 0., 15., 10., 15., 5., 0., 0., 3., 15., 2., 8., 0., 0., 4., 12., 0., 0., 8., 8., 5., 8., 0., 0., 9., 8., 0., 0., 4., 1., 12., 7., 0., 0., 2., 14., 5., 10., 0., 0., 0., 6., 13., 10., 0., 0., 0.]) >>> digitos.target[0] 0

Slide 34

Slide 34 text

A I C R D C - S V M Para classi car 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 classi cação (ou regressão) que procura encontrar um modelo onde a separação entre as classes tenha a maior margem possível.

Slide 35

Slide 35 text

A I C R D C - S V M Figura: Support Vector Machines (wikipedia)

Slide 36

Slide 36 text

A I C R D C - - Figura: API para Aprendizado Supervisionado do sklearn (por Olivier Grisel)

Slide 37

Slide 37 text

A I C R D C - - + SVM from sklearn import svm, datasets digitos = datasets.load_digits() modelo = svm.SVC(gamma=0.001) num_amostras = len(digitos.data)

Slide 38

Slide 38 text

A I C R D C - - + SVM from sklearn import svm, datasets digitos = datasets.load_digits() modelo = svm.SVC(gamma=0.001) num_amostras = len(digitos.data) modelo.fit(digitos.data[:num_amostras / 2], digitos.target[:num_amostras / 2])

Slide 39

Slide 39 text

A I C R D C - - + SVM from sklearn import svm, datasets digitos = datasets.load_digits() modelo = svm.SVC(gamma=0.001) num_amostras = len(digitos.data) modelo.fit(digitos.data[:num_amostras / 2], digitos.target[:num_amostras / 2]) classe_esperada = digitos.target[num_amostras / 2:] classe_descoberta = modelo.predict(digitos.data[num_amostras / 2:])

Slide 40

Slide 40 text

A I C R D C - - + SVM >>> classe_esperada[25:35] array([8, 9, 0, 1, 2, 3, 4, 9, 6, 7]) >>> classe_descoberta[25:35] array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])

Slide 41

Slide 41 text

A I C R D C - M C Uma das maneiras avaliar o quão bem um modelo se comporta, é utilizando uma Matriz de Confusão: >>> from sklearn import metrics >>> metrics.confusion_matrix(classe_esperada, ... classe_descoberta) [[87 0 0 0 1 0 0 0 0 0] [ 0 88 1 0 0 0 0 0 1 1] [ 0 0 85 1 0 0 0 0 0 0] [ 0 0 0 79 0 3 0 4 5 0] [ 0 0 0 0 88 0 0 0 0 4] [ 0 0 0 0 0 88 1 0 0 2] [ 0 1 0 0 0 0 90 0 0 0] [ 0 0 0 0 0 1 0 88 0 0] [ 0 0 0 0 0 0 0 0 88 0] [ 0 0 0 1 0 1 0 0 0 90]]

Slide 42

Slide 42 text

A I C R D C - M C

Slide 43

Slide 43 text

A I C R D Parte IV R

Slide 44

Slide 44 text

A I C R D R 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.

Slide 45

Slide 45 text

A I C R D R 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

Slide 46

Slide 46 text

A I C R D R L - D I 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 em Março de do site de uma imobiliária e contém dados de aproximadamente . imóveis a venda. Figura: Alguns imóveis do bairro Bela Vista. Utilizando BeautifulSoup

Slide 47

Slide 47 text

A I C R D R L - D I Figura: Scatter plot de imóveis do bairro Bela Vista.

Slide 48

Slide 48 text

A I C R D R L - D I Figura: Scatter plot de imóveis do bairro Centro.

Slide 49

Slide 49 text

A I C R D R L - D I Figura: Scatter plot de imóveis do Centro (vermelho) e Bela Vista (azul).

Slide 50

Slide 50 text

A I C R D R L Para realizar a Regressao Linear, usaremos apenas feature (para facilitar a visualização da regressão).

Slide 51

Slide 51 text

A I C R D R L Para realizar a Regressao Linear, usaremos apenas 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.

Slide 52

Slide 52 text

A I C R D R L - O Se em tudo o mais forem idênticas as várias explicações de um fenômeno, a mais simples é a melhor. —G O ( - )

Slide 53

Slide 53 text

A I C R D R L - O

Slide 54

Slide 54 text

A I C R D R L >>> from sklearn import linear_model >>> from sklearn.cross_validation import train_test_split >>> model = linear_model.LinearRegression()

Slide 55

Slide 55 text

A I C R D R L >>> from sklearn import linear_model >>> from sklearn.cross_validation import train_test_split >>> model = linear_model.LinearRegression() >>> area, preco = imobiliaria.load_data("Bela Vista") >>> area_train, area_test, preco_train, preco_test = \ train_test_split(area, preco, test_size=0.20) >>> model.fit(area_train, preco_train)

Slide 56

Slide 56 text

A I C R D R L >>> from sklearn import linear_model >>> from sklearn.cross_validation import train_test_split >>> model = linear_model.LinearRegression() >>> area, preco = imobiliaria.load_data("Bela Vista") >>> area_train, area_test, preco_train, preco_test = \ train_test_split(area, preco, test_size=0.20) >>> model.fit(area_train, preco_train) >>> model.predict(56) 247882.22260541

Slide 57

Slide 57 text

A I C R D R L >>> from sklearn import linear_model >>> from sklearn.cross_validation import train_test_split >>> model = linear_model.LinearRegression() >>> area, preco = imobiliaria.load_data("Bela Vista") >>> area_train, area_test, preco_train, preco_test = \ train_test_split(area, preco, test_size=0.20) >>> model.fit(area_train, preco_train) >>> model.predict(56) 247882.22260541 >>> model.score(area_test, preco_test) 0.77655417131351878

Slide 58

Slide 58 text

A I C R D R L import matplotlib.pyplot as plt plt.scatter(area, preco, alpha=0.5) plt.plot(area, model.predict(area), color="red")

Slide 59

Slide 59 text

A I C R D R L 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.

Slide 60

Slide 60 text

A I C R D R L - M 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.

Slide 61

Slide 61 text

A I C R D R L - M

Slide 62

Slide 62 text

A I C R D R L - M features, preco = imobiliaria.load_data("Bela Vista") features_train, features_test, preco_train, preco_test = \ train_test_split(features, preco, test_size=0.20)

Slide 63

Slide 63 text

A I C R D R L - M 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)

Slide 64

Slide 64 text

A I C R D R L - M 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

Slide 65

Slide 65 text

A I C R D R L - M 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 . para . .

Slide 66

Slide 66 text

A I C R D R L - M 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 m com apenas dormitório localizado no bairro Bela Vista ?

Slide 67

Slide 67 text

A I C R D R L - M 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 m com apenas dormitório localizado no bairro Bela Vista ? linear_model.predict([56, 1]) array([ 216157.98252844]) Ou seja: um imóvel de dormitório com m no bairro Bela Vista em Porto Alegre custaria aproximadamente R . , .

Slide 68

Slide 68 text

A I C R D Parte V D

Slide 69

Slide 69 text

A I C R D D Junte-se ao PyTchê ! Acesse http://pytche.org