Vous êtes sur la page 1sur 30

scikit-learn: Aprendizado de maquina 101

com Python

Luciana Fujii
Campus Party BH 2016

scikit-learn: Aprendizado de maquina 101 com Python


1 / 30
N
Introducao

Aprendizado de maquina

Aprendizado de maquina e o campo da ciencia da computacao que


da aos computadores a abilidade de aprender sem ser
explicitamente programado.

scikit-learn: Aprendizado de maquina 101 com Python


2 / 30
N
Introducao

Aprendizado de maquina

Usado em tarefas em que desenvolver explicitamente um algoritmo


e inviavel:
Deteccao de spam
OCR
Visao computacional
Carros auto dirigveis
...

scikit-learn: Aprendizado de maquina 101 com Python


3 / 30
N
Introducao

scikit-learn

Python: rapido desenvolvimento


Baseada em NumPy e SciPy
Software Livre
Facil de instalar
Nao usa GPU

scikit-learn: Aprendizado de maquina 101 com Python


4 / 30
N
Introducao

Set Up

Instalacao:
numpy
scikit-learn
scipy

scikit-learn: Aprendizado de maquina 101 com Python


5 / 30
N
Datasets

Standard datasets

A primeira coisa que precisamos pra aprender alguma coisa: dados


scikit-learn tem alguns datasets exemplo que podemos usar

scikit-learn: Aprendizado de maquina 101 com Python


6 / 30
N
Datasets

Standard datasets

>>> from sklearn import datasets


>>> iris = datasets.load iris()
>>> digits = datasets.load digits()
>>> print digits.data
>>> print digits.target
>>> print digits.data.shape

scikit-learn: Aprendizado de maquina 101 com Python


7 / 30
N
Aprendizado e predicao

Aprendizado e predicao

Estimator e um objeto que implementa:


fit: treina o modelo
predict: depois do treino, faz a predicao do resultado para uma
entrada
Exemplo de estimators:
Linear model: Perceptron, Logistic Regression, Stochastic Gradient
Descent, Passive Aggressive Classifier. . .
Support Vector Machines: SVC, SVR. . .
Nearest Neighbors
Gaussian Processes
Naive Bayes
K-means
...

scikit-learn: Aprendizado de maquina 101 com Python


8 / 30
N
Aprendizado e predicao

Um pouco de teoria

Aprendizado de maquina tem diferentes abordagens:


Aprendizado supervisionado
Aprendizado nao-supervisionado
Aprendizado por reforco

scikit-learn: Aprendizado de maquina 101 com Python


9 / 30
N
Aprendizado supervisionado

Perceptron

scikit-learn: Aprendizado de maquina 101 com Python


10 / 30
N
Aprendizado supervisionado

Perceptron

Classifica dados linearmente separaveis, encontrando uma reta que


separa os dados
>>> from sklearn import linear model
>>> clf = linear model.perceptron.Perceptron()
>>> clf
>>> clf.fit(digits.data[:-5], digits.target[:-5])
>>> clf.predict(digits.data[-5:])
>>> print digits.target[-5]

scikit-learn: Aprendizado de maquina 101 com Python


11 / 30
N
Aprendizado supervisionado

Support Vector Machines - SVM

scikit-learn: Aprendizado de maquina 101 com Python


12 / 30
N
Aprendizado supervisionado

Support Vector Machines - SVM

Tambem encontra uma reta que separa dados linearmente


separaveis, mas encontra a melhor reta
Codigo muito similar ao do perceptron:

>>> from sklearn import svm


>>> clf = svm.LinearSVC()
>>> clf
>>> clf.fit(digits.data[:-5], digits.target[:-5])
>>> clf.predict(digits.data[-5:])
>>> print digits.target[-5]

scikit-learn: Aprendizado de maquina 101 com Python


13 / 30
N
Aprendizado supervisionado

Support Vector Machines - SVM

scikit-learn: Aprendizado de maquina 101 com Python


14 / 30
N
Aprendizado supervisionado

Support Vector Machines - SVM


Projecao: z = x 2 + y 2

scikit-learn: Aprendizado de maquina 101 com Python


15 / 30
N
Aprendizado supervisionado

Support Vector Machines - SVM

Kernel: transformacao do dado (simplicacao)


Nesse caso: Z = X 2 + Y 2
Kernels na class SVC do scikit-learn:
Linear
Polynomial
RBF
Sigmoid
Um metodo que voce implementar

scikit-learn: Aprendizado de maquina 101 com Python


16 / 30
N
Aprendizado Supervisionado - Redes Neurais

Redes Neurais - Multi-layer Perceptrons

scikit-learn: Aprendizado de maquina 101 com Python


17 / 30
N
Aprendizado Supervisionado - Redes Neurais

Redes Neurais - MLP

Criando um classificador
>>> from sklearn.neural network import MLPClassifier
>>> clf = MLPClassifier()
>>> clf.fit(digits.data[:-5],digits.target[:-5])
>>> clf.predict(digits.data[-5:])
>>> clf MLPClassifier(activation=relu, alpha=0.0001, ...
)

scikit-learn: Aprendizado de maquina 101 com Python


18 / 30
N
Aprendizado Supervisionado - Redes Neurais

Redes Neurais - MLP

Um Multi-layer Perceptron tem muitos parametros:


hidden layer sizes: tupla (200,100,80)- 3 camadas
activation: relu,logistic,tanh. . .
solver: lbfgs, sgd, adam (metodo de atualizar parametros)
alpha: termo de regularizacao
learning rate: constant,adaptive...
learning rate init
...

scikit-learn: Aprendizado de maquina 101 com Python


19 / 30
N
Aprendizado Supervisionado - Redes Neurais

Feature Scaling

Redes neurais sao sensveis ao tamanho das caractersticas


Resultados sao melhores se as entradas sao redimensionadas
A entrada de teste tambem tem que ser redimensionada
Metodos comuns:
Redimensionar a entrada para ter valores entre -1 e 1 (ou 0 e 1)
Padronizar entrada para ter media 0 e variancia 1

scikit-learn tem StandardScaler

scikit-learn: Aprendizado de maquina 101 com Python


20 / 30
N
Aprendizado Supervisionado - Redes Neurais

Feature Scaling
Scaling between 1 and -1:
>>> import numpy as np
>>> X /= np.max(X) * 1.0
Standardizing:
>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler()
>>> # Dont cheat - fit only on training data
>>> scaler.fit(X train)
>>> X train = scaler.transform(X train)
>>> # apply same transformation to test data
>>> X test = scaler.transform(X test)
scikit-learn: Aprendizado de maquina 101 com Python
21 / 30
N
Aprendizado nao-supervisionado

Clusterizacao

Metodo nao-supervisionado mais comum.

scikit-learn: Aprendizado de maquina 101 com Python


22 / 30
N
Aprendizado nao-supervisionado

Clusterizacao

>>> from sklearn.cluster import Kmeans


>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4],
[4, 0]])
>>> clf = Kmeans(n clusters=2)
>>> clf.fit(X)
>>> # Check the clusters
>>> clf.labels
>>> # Get the cluster for new datapoints
>>> clf.predict([[0,0]])

scikit-learn: Aprendizado de maquina 101 com Python


23 / 30
N
Avaliacao do modelo e validacao cruzada

Conjunto de treino e teste

Nos devemos utilizar dados de teste que nos nao utilizamos pra
treinar
train test split divide seus dados entre conjunto de treinamento e
conjunto de teste

>>> import numpy as np


>>> from sklearn.model selection import train test split
>>> X train, X test, y train, y test =
train test split(iris.data, iris.target, test size=0.4,
random state=0)
>>> X train.shape, y train.shape ((90, 4), (90,))
>>> X test.shape, y test.shape ((60, 4), (60,))

scikit-learn: Aprendizado de maquina 101 com Python


24 / 30
N
Avaliacao do modelo e validacao cruzada

Validacao cruzada

Para escolher os hiper parametros usando o conjunto de test, nos


corremos o risco de overfitting dos hiper parametros para o conjunto
de teste.
Alternativas:
Conjunto de validacao: separar o conjunto de treinamento entre
validacao e treino
Validacao cruzada

scikit-learn: Aprendizado de maquina 101 com Python


25 / 30
N
Avaliacao do modelo e validacao cruzada

Validacao cruzada

Conjunto de validacao:
Problema de reduzir demais o seu conjunto de treino
Escolher os melhores hiper parametros para o conjunto de
validacao, nao necessariamente generalizando
Validacao cruzada:
Mantem o conjunto de teste
Separar o conjunto de treino em k subconjuntos
Treinar sem usar um dos subconjuntos e validar nesse subconjunto
Repetir mudando o subconjunto usado pra validacao para cada k
subconjuntos
O desempenho e medido na media dos valores conseguidos
Pode se tornar caro computacionalmente

scikit-learn: Aprendizado de maquina 101 com Python


26 / 30
N
Avaliacao do modelo e validacao cruzada

cross val score

>>> from sklearn.model selection import cross val score


>>> X train, X test, y train, y test =
train test split(iris.data, iris.target, test size=0.2)
>>> clf = svm.SVC(kernel=linear, C=1)
>>> scores = cross val score(clf, X train, y train, cv=5)
>>> scores
>>> print("Accuracy: %0.2f (+/- %0.2f)"% (scores.mean(),
scores.std() * 2))

scikit-learn: Aprendizado de maquina 101 com Python


27 / 30
N
Escolha do metodo

Escolhendo um estimator

scikit-learn: Aprendizado de maquina 101 com Python


28 / 30
N
Escolha do metodo

Links uteis

http://scikit-learn.org/
http://scikit-learn.org/stable/tutorial/machine learning map/
http://cs.stanford.edu/people/karpathy/convnetjs/

scikit-learn: Aprendizado de maquina 101 com Python


29 / 30
N
Luciana Fujii - luciana@fujii.eti.br

scikit-learn: Aprendizado de maquina 101 com Python


30 / 30
N

Vous aimerez peut-être aussi