scikit-learn: Aprendizado de máquina 101 com Python Luciana Fujii Campus Party BH 2016 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. 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... 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 4 / 30
Introdução Set Up Instalação: numpy scikit-learn scipy 5 / 30
Datasets Standard datasets A primeira coisa que precisamos pra aprender alguma coisa: dados scikit-learn tem alguns datasets exemplo que podemos usar 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 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... 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 9 / 30
Aprendizado supervisionado Perceptron 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] 11 / 30
Aprendizado supervisionado Support Vector Machines - SVM 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] 13 / 30
Aprendizado supervisionado Support Vector Machines - SVM 14 / 30
Aprendizado supervisionado Support Vector Machines - SVM Projeção: z = x 2 + y 2 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 16 / 30
Aprendizado Supervisionado - Redes Neurais Redes Neurais - Multi-layer Perceptrons 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,... ) 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... 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 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) 21 / 30
Aprendizado não-supervisionado Clusterização Método não-supervisionado mais comum. 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]]) 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,)) 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 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 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)) 27 / 30
Escolha do método Escolhendo um estimator 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/ 29 / 30
Luciana Fujii - luciana@fujii.eti.br 30 / 30