Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Machine Learning com Python e Scikit-learn

Machine Learning com Python e Scikit-learn

Uma introdução a Machine Learning utilizando Python e Scikit-learn.

Christian S. Perone

June 07, 2014
Tweet

More Decks by Christian S. Perone

Other Decks in Programming

Transcript

  1. A I C R D M L Com Python e

    scikit-learn Christian S. Perone [email protected] de junho de
  2. 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
  3. 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
  4. 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:
  5. 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
  6. 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)
  7. 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
  8. 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
  9. 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
  10. 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.
  11. 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.
  12. 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).
  13. A I C R D A S No Aprendizado Supervisionado,

    temos dois tipos de problemas:
  14. 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.
  15. 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.
  16. A I C R D A S Figura: Diagrama de

    aprendizado supervisionado (por Olivier Grisel)
  17. 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.
  18. 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
  19. 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
  20. 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)
  21. 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
  22. 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
  23. 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)
  24. 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.
  25. 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
  26. 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.
  27. A I C R D C - S V M

    Figura: Support Vector Machines (wikipedia)
  28. A I C R D C - - Figura: API

    para Aprendizado Supervisionado do sklearn (por Olivier Grisel)
  29. 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)
  30. 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])
  31. 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:])
  32. 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])
  33. 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]]
  34. 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.
  35. 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
  36. 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
  37. A I C R D R L - D I

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

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

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

    Regressao Linear, usaremos apenas feature (para facilitar a visualização da regressão).
  41. 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.
  42. 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 ( - )
  43. A I C R D R L >>> from sklearn

    import linear_model >>> from sklearn.cross_validation import train_test_split >>> model = linear_model.LinearRegression()
  44. 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)
  45. 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
  46. 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
  47. 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")
  48. 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.
  49. 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.
  50. 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)
  51. 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)
  52. 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
  53. 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 . .
  54. 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 ?
  55. 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 . , .
  56. A I C R D D Junte-se ao PyTchê !

    Acesse http://pytche.org