machine learning usando scikits

29
Machine Learning usando scikits.learn Marcelo Gomes Pereira de Lacerda Engenharia da Computação Escola Politécnica de Pernambuco Universidade de Pernambuco PUG-PE - Julho de 2011

Upload: marcelo-lacerda

Post on 10-May-2015

2.410 views

Category:

Technology


0 download

DESCRIPTION

Apresentação usada no XIV encontro do PUG-PE.

TRANSCRIPT

Page 1: Machine learning usando scikits

PUG-PE - Julho de 2011

Machine Learning usando scikits.learn

Marcelo Gomes Pereira de LacerdaEngenharia da Computação

Escola Politécnica de PernambucoUniversidade de Pernambuco

Page 2: Machine learning usando scikits

PUG-PE - Julho de 2011

Roteiro

• Elementos Básicos• Aprendizagem Supervisionada• Seleção de Modelo• Aprendizagem Não-Supervisionada• Conclusão

Page 3: Machine learning usando scikits

PUG-PE - Julho de 2011

Elementos Básicos

• Base de dados (features = Array 2D, labels Array 1D)

• Estimator• Evaluator

Page 4: Machine learning usando scikits

PUG-PE - Julho de 2011

Aprendizagem Supervisionada

• Encontrar relação entre dois datasets: X e Y• A aprendizagem ocorre sob “orientações” do

humano, o qual diz se uma resposta dada pelo modelo está correta ou não e qual a resposta certa.

• X => Array 2D. Ex.: [[1,2,3],[3,4,5],[5,6,7]]• Y => Array 1D (na maioria dos casos). Ex.: [0,0,1]• fit(X,Y)• predict(p)

Page 5: Machine learning usando scikits

PUG-PE - Julho de 2011

Aprendizagem Supervisionada

• Classificação

Page 6: Machine learning usando scikits

PUG-PE - Julho de 2011

Aprendizagem Supervisionada

• Regressão

Page 7: Machine learning usando scikits

PUG-PE - Julho de 2011

K-Nearest Neighbor Classifier (KNN)

Page 8: Machine learning usando scikits

PUG-PE - Julho de 2011

K-Nearest Neighbor Classifier (KNN)

import numpy as npfrom scikits.learn import datasets

iris = datasets.load_iris()iris_X = iris.datairis_y = iris.targetnp.random.seed(0)indices = np.random.permutation(len(iris_X))iris_X_train = iris_X[indices[:-10]]iris_y_train = iris_y[indices[:-10]]iris_X_test = iris_X[indices[-10:]]iris_y_test = iris_y[indices[-10:]]

Page 9: Machine learning usando scikits

PUG-PE - Julho de 2011

K-Nearest Neighbor Classifier (KNN)

from scikits.learn.neighbors import NeighborsClassifier

knn = NeighborsClassifier()print knn.fit(iris_X_train, iris_y_train)

NeighborsClassifier(n_neighbors=5, window_size=1, algorithm=auto)

print knn.predict(iris_X_test)

array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0])

Page 10: Machine learning usando scikits

PUG-PE - Julho de 2011

Regressão Linear

• y = xb + e– y = variável alvo– x = dado– b = coeficiente– e = ruído da observação

Page 11: Machine learning usando scikits

PUG-PE - Julho de 2011

Regressão Linearfrom scikits.learn import linear_model

diabetes = datasets.load_diabetes()diabetes_X_train = diabetes.data[:-20]diabetes_X_test = diabetes.data[-20:]diabetes_y_train = diabetes.target[:-20]diabetes_y_test = diabetes.target[-20:]

regr = linear_model.LinearRegression()regr.fit(diabetes_X_train, diabetes_y_train)regr.predict(diabetes_X_test)

[1,2.6,-1.67,3,...,2.45]

Page 12: Machine learning usando scikits

PUG-PE - Julho de 2011

Regressão para Classificação

• Regressão Linear não é recomendada• Dá muito peso a elementos distantes da fronteira de

decisão!

• Solução: Regressão Logística (Sigmóide)

Page 13: Machine learning usando scikits

PUG-PE - Julho de 2011

Regressão para Classificação

logistic = linear_model.LogisticRegression(C=1e5)logistic.fit(iris_X_train, iris_y_train)

LogisticRegression(C=100000.0, intercept_scaling=1, dual=False, fit_intercept=True, penalty='l2', tol=0.0001)

Page 14: Machine learning usando scikits

PUG-PE - Julho de 2011

Support Vector Machines (SVM)

• Achar a combinação de amostras de treinamento de forma que maximize a margem entre as classes

Page 15: Machine learning usando scikits

PUG-PE - Julho de 2011

Support Vector Machines (SVM)

• SVC = Support Vector Classification• SVR = Support Vector Regression

from scikits.learn import svmsvc = svm.SVC(kernel='linear')svc.fit(iris_X_train, iris_y_train)

Page 16: Machine learning usando scikits

PUG-PE - Julho de 2011

Support Vector Machines (SVM)

• Outros Kernels– svc = svm.SVC(kernel='linear')– svc = svm.SVC(kernel='poly',degree=3)– svc = svm.SVC(kernel='rbf')

Page 17: Machine learning usando scikits

PUG-PE - Julho de 2011

Seleção de Modelo

Page 18: Machine learning usando scikits

PUG-PE - Julho de 2011

Seleção de Modelo

• Medição da qualidade de predição do modelo através do método score

• Dica: Implementar K-Fold Cross Validation para obter resultados mais precisos.

>>> from scikits.learn import datasets, svm>>> digits = datasets.load_digits()>>> X_digits = digits.data>>> y_digits = digits.target>>> svc = svm.SVC()>>> svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])0.97999999999999998

Page 19: Machine learning usando scikits

PUG-PE - Julho de 2011

Seleção de Modelo>>> import numpy as np>>> X_folds = np.array_split(X_digits, 10)>>> y_folds = np.array_split(y_digits, 10)>>> scores = list()>>> for k in range(10):... X_train = list(X_folds)... X_test = X_train.pop(k)... X_train = np.concatenate(X_train)... y_train = list(y_folds)... y_test = y_train.pop(k)... y_train = np.concatenate(y_train)... scores.append(svc.fit(X_train, y_train).score(X_test, y_test))>>> print scores[0.9555555555555556, 1.0, 0.93333333333333335, 0.99444444444444446, 0.98333333333333328, 0.98888888888888893, 0.99444444444444446, 0.994413407821229, 0.97206703910614523, 0.96089385474860334]

Page 20: Machine learning usando scikits

PUG-PE - Julho de 2011

Seleção de Modelo

• O scikits.learn dá uma mãozinha!

• Ou... Melhor ainda!

>>> kfold = cross_val.KFold(len(X_digits), k=3)>>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test])... for train, test in kfold][0.95530726256983245, 1.0, 0.93296089385474856, 0.98324022346368711, 0.98882681564245811, 0.98882681564245811, 0.994413407821229, 0.994413407821229, 0.97206703910614523, 0.95161290322580649]

>>> cross_val.cross_val_score(svc, X_digits, y_digits, cv=kfold, n_jobs=-1)array([ 0.95530726, 1., 0.93296089, 0.98324022, 0.98882682, 0.98882682, 0.99441341, 0.99441341, 0.97206704, 0.9516129 ])

Page 21: Machine learning usando scikits

PUG-PE - Julho de 2011

Seleção de Modelo

• Cross-Validation Generators– KFold(n, k)– StratifiedKFold(y, k)– LeaveOneOut(n)– LeaveOneLabelOut(labels)

Page 22: Machine learning usando scikits

PUG-PE - Julho de 2011

Aprendizagem Não-Supervisionada

Page 23: Machine learning usando scikits

PUG-PE - Julho de 2011

K-Means (Clusterização “Plana”)>>> from scikits.learn import cluster, datasets>>> iris = datasets.load_iris()>>> X_iris = iris.data>>> y_iris = iris.target

>>> k_means = cluster.KMeans(k=3)>>> k_means.fit(X_iris) KMeans(verbose=0, k=3, max_iter=300, init='k-means++',...>>> print k_means.labels_[::10][1 1 1 1 1 0 0 0 0 0 2 2 2 2 2]>>> print y_iris[::10][0 0 0 0 0 1 1 1 1 1 2 2 2 2 2]

Page 24: Machine learning usando scikits

PUG-PE - Julho de 2011

K-Means (Clusterização “Plana”)

• Desempenho do K-Means depende da inicialização dos clusters

• scikits.learn cuida disso por debaixo dos panos!

Page 25: Machine learning usando scikits

PUG-PE - Julho de 2011

PCA (Principal Componente Analysis)

Page 26: Machine learning usando scikits

PUG-PE - Julho de 2011

PCA (Principal Componente Analysis)

>>> x1 = np.random.normal(size=100)>>> x2 = np.random.normal(size=100)>>> x3 = x1 + x2>>> X = np.c_[x1, x2, x3]

>>> from scikits.learn import decomposition>>> pca = decomposition.PCA()>>> pca.fit(X)>>> print pca.explained_variance_[ 2.77227227e+00, 1.14228495e+00, 2.66364138e-32]

>>> X_reduced = pca.fit_transform(X, n_components=2)>>> X_reduced.shape(100, 2)

Page 27: Machine learning usando scikits

PUG-PE - Julho de 2011

Conclusão

=

Page 28: Machine learning usando scikits

PUG-PE - Julho de 2011

Fonte

• http://gaelvaroquaux.github.com/scikit-learn-tutorial/

Page 29: Machine learning usando scikits

PUG-PE - Julho de 2011

OBRIGADO!