Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Machine learning usando scikits

3,014 views

Published on

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

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

Machine learning usando scikits

  1. 1. Machine Learning usando scikits.learn<br />Marcelo Gomes Pereira de Lacerda<br />Engenharia da Computação<br />Escola Politécnica de Pernambuco<br />Universidade de Pernambuco<br />PUG-PE - Julho de 2011<br />
  2. 2. Roteiro<br />Elementos Básicos<br />Aprendizagem Supervisionada<br />Seleção de Modelo<br />Aprendizagem Não-Supervisionada<br />Conclusão<br />PUG-PE - Julho de 2011<br />
  3. 3. Elementos Básicos<br />Base de dados (features = Array 2D, labelsArray 1D)<br />Estimator<br />Evaluator<br />PUG-PE - Julho de 2011<br />
  4. 4. Aprendizagem Supervisionada<br />Encontrar relação entre dois datasets: X e Y<br />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.<br />X => Array 2D. Ex.: [[1,2,3],[3,4,5],[5,6,7]]<br />Y => Array 1D (na maioria dos casos). Ex.: [0,0,1]<br />fit(X,Y)<br />predict(p)<br />PUG-PE - Julho de 2011<br />
  5. 5. Aprendizagem Supervisionada<br />Classificação<br />PUG-PE - Julho de 2011<br />
  6. 6. Aprendizagem Supervisionada<br />Regressão<br />PUG-PE - Julho de 2011<br />
  7. 7. K-NearestNeighborClassifier (KNN)<br />PUG-PE - Julho de 2011<br />
  8. 8. K-NearestNeighborClassifier (KNN)<br />PUG-PE - Julho de 2011<br />import numpy as np<br />from scikits.learn import datasets<br />iris = datasets.load_iris()<br />iris_X = iris.data<br />iris_y = iris.target<br />np.random.seed(0)<br />indices = np.random.permutation(len(iris_X))<br />iris_X_train = iris_X[indices[:-10]]<br />iris_y_train = iris_y[indices[:-10]]<br />iris_X_test = iris_X[indices[-10:]]<br />iris_y_test = iris_y[indices[-10:]]<br />
  9. 9. K-NearestNeighborClassifier (KNN)<br />PUG-PE - Julho de 2011<br />fromscikits.learn.neighborsimportNeighborsClassifier<br />knn = NeighborsClassifier()<br />printknn.fit(iris_X_train, iris_y_train)<br />NeighborsClassifier(n_neighbors=5, window_size=1, algorithm=auto)<br />printknn.predict(iris_X_test)<br />array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0])<br />
  10. 10. Regressão Linear<br />y = xb + e<br />y = variável alvo<br />x = dado<br />b = coeficiente<br />e = ruído da observação<br />PUG-PE - Julho de 2011<br />
  11. 11. Regressão Linear<br />PUG-PE - Julho de 2011<br />fromscikits.learnimportlinear_model<br />diabetes = datasets.load_diabetes()<br />diabetes_X_train = diabetes.data[:-20]<br />diabetes_X_test = diabetes.data[-20:]<br />diabetes_y_train = diabetes.target[:-20]<br />diabetes_y_test = diabetes.target[-20:]<br />regr = linear_model.LinearRegression()<br />regr.fit(diabetes_X_train, diabetes_y_train)<br />regr.predict(diabetes_X_test)<br />[1,2.6,-1.67,3,...,2.45]<br />
  12. 12. Regressão para Classificação<br />Regressão Linear não é recomendada<br />Dá muito peso a elementos distantes da fronteira de decisão!<br />Solução: Regressão Logística (Sigmóide)<br />PUG-PE - Julho de 2011<br />
  13. 13. Regressão para Classificação<br />PUG-PE - Julho de 2011<br />logistic = linear_model.LogisticRegression(C=1e5)<br />logistic.fit(iris_X_train, iris_y_train)<br />LogisticRegression(C=100000.0, intercept_scaling=1, dual=False, fit_intercept=True, penalty='l2', tol=0.0001)<br />
  14. 14. SupportVector Machines (SVM)<br />Achar a combinação de amostras de treinamento de forma que maximize a margem entre as classes<br />PUG-PE - Julho de 2011<br />
  15. 15. SupportVector Machines (SVM)<br />SVC = SupportVectorClassification<br />SVR = SupportVectorRegression<br />PUG-PE - Julho de 2011<br />fromscikits.learnimportsvm<br />svc = svm.SVC(kernel='linear')<br />svc.fit(iris_X_train, iris_y_train)<br />
  16. 16. SupportVector Machines (SVM)<br />Outros Kernels<br />svc = svm.SVC(kernel='linear')<br />svc = svm.SVC(kernel='poly',degree=3)<br />svc = svm.SVC(kernel='rbf')<br />PUG-PE - Julho de 2011<br />
  17. 17. Seleção de Modelo<br />PUG-PE - Julho de 2011<br />
  18. 18. Seleção de Modelo<br /> Medição da qualidade de predição do modelo através do método score<br />Dica: Implementar K-FoldCrossValidation para obter resultados mais precisos.<br />PUG-PE - Julho de 2011<br />>>> fromscikits.learnimportdatasets, svm<br />>>> digits = datasets.load_digits()<br />>>> X_digits = digits.data<br />>>> y_digits = digits.target<br />>>> svc = svm.SVC()<br />>>> svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])<br />0.97999999999999998<br />
  19. 19. Seleção de Modelo<br />PUG-PE - Julho de 2011<br />>>> importnumpy as np<br />>>> X_folds = np.array_split(X_digits, 10)<br />>>> y_folds = np.array_split(y_digits, 10)<br />>>> scores = list()<br />>>> for k in range(10):<br />... X_train = list(X_folds)<br />... X_test = X_train.pop(k)<br />... X_train = np.concatenate(X_train)<br />... y_train = list(y_folds)<br />... y_test = y_train.pop(k)<br />... y_train = np.concatenate(y_train)<br />... scores.append(svc.fit(X_train, y_train).score(X_test, y_test))<br />>>> printscores<br />[0.9555555555555556, 1.0, 0.93333333333333335, 0.99444444444444446, 0.98333333333333328, 0.98888888888888893, 0.99444444444444446, 0.994413407821229, 0.97206703910614523, 0.96089385474860334]<br />
  20. 20. Seleção de Modelo<br />O scikits.learn dá uma mãozinha!<br />Ou... Melhor ainda!<br />PUG-PE - Julho de 2011<br />>>> kfold = cross_val.KFold(len(X_digits), k=3)<br />>>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test])<br />... for train, test in kfold]<br />[0.95530726256983245, 1.0, 0.93296089385474856, 0.98324022346368711, 0.98882681564245811, 0.98882681564245811, 0.994413407821229, 0.994413407821229, 0.97206703910614523, 0.95161290322580649]<br />>>> cross_val.cross_val_score(svc, X_digits, y_digits, cv=kfold, n_jobs=-1)<br />array([ 0.95530726, 1., 0.93296089, 0.98324022, 0.98882682,<br /> 0.98882682, 0.99441341, 0.99441341, 0.97206704, 0.9516129 ])<br />
  21. 21. Seleção de Modelo<br />Cross-ValidationGenerators<br />KFold(n, k)<br />StratifiedKFold(y, k)<br />LeaveOneOut(n)<br />LeaveOneLabelOut(labels)<br />PUG-PE - Julho de 2011<br />
  22. 22. Aprendizagem Não-Supervisionada<br />PUG-PE - Julho de 2011<br />
  23. 23. K-Means (Clusterização “Plana”)<br />PUG-PE - Julho de 2011<br />>>> fromscikits.learnimport cluster, datasets<br />>>> iris = datasets.load_iris()<br />>>> X_iris = iris.data<br />>>> y_iris = iris.target<br />>>> k_means = cluster.KMeans(k=3)<br />>>> k_means.fit(X_iris) <br />KMeans(verbose=0, k=3, max_iter=300, init='k-means++',...<br />>>> printk_means.labels_[::10]<br />[1 1 1 1 1 0 0 0 0 0 2 2 2 2 2]<br />>>> printy_iris[::10]<br />[0 0 0 0 0 1 1 1 1 1 2 2 2 2 2]<br />
  24. 24. K-Means (Clusterização “Plana”)<br />Desempenho do K-Means depende da inicialização dos clusters<br />scikits.learn cuida disso por debaixo dos panos!<br />PUG-PE - Julho de 2011<br />
  25. 25. PCA (Principal Componente Analysis)<br />PUG-PE - Julho de 2011<br />
  26. 26. PCA (Principal Componente Analysis)<br />PUG-PE - Julho de 2011<br />>>> x1 = np.random.normal(size=100)<br />>>> x2 = np.random.normal(size=100)<br />>>> x3 = x1 + x2<br />>>> X = np.c_[x1, x2, x3]<br />>>> fromscikits.learnimportdecomposition<br />>>> pca = decomposition.PCA()<br />>>> pca.fit(X)<br />>>> printpca.explained_variance_<br />[ 2.77227227e+00, 1.14228495e+00, 2.66364138e-32]<br />>>> X_reduced = pca.fit_transform(X, n_components=2)<br />>>> X_reduced.shape<br />(100, 2)<br />
  27. 27. Conclusão<br />PUG-PE - Julho de 2011<br /> =<br />
  28. 28. Fonte<br />http://gaelvaroquaux.github.com/scikit-learn-tutorial/<br />PUG-PE - Julho de 2011<br />
  29. 29. OBRIGADO!<br />PUG-PE - Julho de 2011<br />

×