scikit-learn: Aprendizado de máquina 101 com Python

Propaganda
scikit-learn: Aprendizado de máquina 101
com Python
Luciana Fujii
Campus Party BH 2016
scikit-learn: Aprendizado de máquina 101 com Python
N
1 / 30
Introdução
Aprendizado de máquina
Aprendizado de máquina é o campo da ciência da computação que
dá aos computadores a abilidade de aprender sem ser
explicitamente programado.
scikit-learn: Aprendizado de máquina 101 com Python
N
2 / 30
Introdução
Aprendizado de máquina
Usado em tarefas em que desenvolver explicitamente um algoritmo
é inviável:
Detecção de spam
OCR
Visão computacional
Carros auto dirigı́veis
...
scikit-learn: Aprendizado de máquina 101 com Python
N
3 / 30
Introdução
scikit-learn
Python: rápido desenvolvimento
Baseada em NumPy e SciPy
Software Livre
Fácil de instalar
Não usa GPU
scikit-learn: Aprendizado de máquina 101 com Python
N
4 / 30
Introdução
Set Up
Instalação:
numpy
scikit-learn
scipy
scikit-learn: Aprendizado de máquina 101 com Python
N
5 / 30
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 máquina 101 com Python
N
6 / 30
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 máquina 101 com Python
N
7 / 30
Aprendizado e predição
Aprendizado e predição
Estimator é um objeto que implementa:
fit: treina o modelo
predict: depois do treino, faz a predição 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 máquina 101 com Python
N
8 / 30
Aprendizado e predição
Um pouco de teoria
Aprendizado de máquina tem diferentes abordagens:
Aprendizado supervisionado
Aprendizado não-supervisionado
Aprendizado por reforço
scikit-learn: Aprendizado de máquina 101 com Python
N
9 / 30
Aprendizado supervisionado
Perceptron
scikit-learn: Aprendizado de máquina 101 com Python
N
10 / 30
Aprendizado supervisionado
Perceptron
Classifica dados linearmente separáveis, 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 máquina 101 com Python
N
11 / 30
Aprendizado supervisionado
Support Vector Machines - SVM
scikit-learn: Aprendizado de máquina 101 com Python
N
12 / 30
Aprendizado supervisionado
Support Vector Machines - SVM
Também encontra uma reta que separa dados linearmente
separáveis, mas encontra a melhor reta
Código 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 máquina 101 com Python
N
13 / 30
Aprendizado supervisionado
Support Vector Machines - SVM
scikit-learn: Aprendizado de máquina 101 com Python
N
14 / 30
Aprendizado supervisionado
Support Vector Machines - SVM
Projeção: z = x 2 + y 2
scikit-learn: Aprendizado de máquina 101 com Python
N
15 / 30
Aprendizado supervisionado
Support Vector Machines - SVM
Kernel: transformação do dado (simplicação)
Nesse caso: Z = X 2 + Y 2
Kernels na class SVC do scikit-learn:
Linear
Polynomial
RBF
Sigmoid
Um método que você implementar
scikit-learn: Aprendizado de máquina 101 com Python
N
16 / 30
Aprendizado Supervisionado - Redes Neurais
Redes Neurais - Multi-layer Perceptrons
scikit-learn: Aprendizado de máquina 101 com Python
N
17 / 30
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 máquina 101 com Python
N
18 / 30
Aprendizado Supervisionado - Redes Neurais
Redes Neurais - MLP
Um Multi-layer Perceptron tem muitos parâmetros:
hidden layer sizes: tupla (200,100,80)- 3 camadas
activation: ’relu’,’logistic’,’tanh’. . .
solver: ’lbfgs’, ’sgd’, ’adam’ (método de atualizar parâmetros)
alpha: termo de regularização
learning rate: ’constant’,’adaptive’...
learning rate init
...
scikit-learn: Aprendizado de máquina 101 com Python
N
19 / 30
Aprendizado Supervisionado - Redes Neurais
Feature Scaling
Redes neurais são sensı́veis ao tamanho das caracterı́sticas
Resultados são melhores se as entradas são redimensionadas
A entrada de teste também tem que ser redimensionada
Métodos comuns:
Redimensionar a entrada para ter valores entre -1 e 1 (ou 0 e 1)
Padronizar entrada para ter média 0 e variância 1
scikit-learn tem StandardScaler
scikit-learn: Aprendizado de máquina 101 com Python
N
20 / 30
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()
>>> # Don’t 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 máquina 101 com Python
N
21 / 30
Aprendizado não-supervisionado
Clusterização
Método não-supervisionado mais comum.
scikit-learn: Aprendizado de máquina 101 com Python
N
22 / 30
Aprendizado não-supervisionado
Clusterização
>>> 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 máquina 101 com Python
N
23 / 30
Avaliação do modelo e validação cruzada
Conjunto de treino e teste
Nós devemos utilizar dados de teste que nós não 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 máquina 101 com Python
N
24 / 30
Avaliação do modelo e validação cruzada
Validação cruzada
Para escolher os hiper parâmetros usando o conjunto de test, nós
corremos o risco de overfitting dos hiper parâmetros para o conjunto
de teste.
Alternativas:
Conjunto de validação: separar o conjunto de treinamento entre
validação e treino
Validação cruzada
scikit-learn: Aprendizado de máquina 101 com Python
N
25 / 30
Avaliação do modelo e validação cruzada
Validação cruzada
Conjunto de validação:
Problema de reduzir demais o seu conjunto de treino
Escolher os melhores hiper parâmetros para o conjunto de
validação, não necessariamente generalizando
Validação cruzada:
Mantém 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 validação para cada k
subconjuntos
O desempenho é medido na média dos valores conseguidos
Pode se tornar caro computacionalmente
scikit-learn: Aprendizado de máquina 101 com Python
N
26 / 30
Avaliação do modelo e validação 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 máquina 101 com Python
N
27 / 30
Escolha do método
Escolhendo um estimator
scikit-learn: Aprendizado de máquina 101 com Python
N
28 / 30
Escolha do método
Links úteis
http://scikit-learn.org/
http://scikit-learn.org/stable/tutorial/machine learning map/
http://cs.stanford.edu/people/karpathy/convnetjs/
scikit-learn: Aprendizado de máquina 101 com Python
N
29 / 30
Luciana Fujii - [email protected]
scikit-learn: Aprendizado de máquina 101 com Python
N
30 / 30
Download