Advertisement
Guest User

Untitled

a guest
May 24th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.83 KB | None | 0 0
  1. Para quem tiver menos familiaridade com o Scikit-Learn ou o Python, e estiver tendo dificuldade em fazer a atividade prévia, fiz esse post para ajudá-los. Ele é um passo a passo de como fazer um código para analisar o dataset da segunda atividade prática, o Wine Dataset. Usem-no de base para fazerem suas próprias análises.
  2.  
  3. ______________________________________________
  4.  
  5. # Carregando o dataset
  6. from sklearn.datasets import load_wine
  7. wine = load_wine()
  8.  
  9. # Exemplos de acesso aos dados
  10. X = wine.data[:, :] # Features de cada elemento
  11. y = wine.target # Classes de cada elemento
  12.  
  13. Esse é o começo de tudo, como vocês tem no enunciado. X são as features do dataset, e y são as classes dele.
  14.  
  15. ____
  16.  
  17. # É preciso treinar o classificador, e testar o seu desempenho com dados "novos".
  18. # Aqui, dividimos os dados em treino e teste, para podermos testar nosso desempenho depois.
  19.  
  20.  
  21. from sklearn.model_selection import train_test_split
  22. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  23. # O uso dessa função facilita, mas não é obrigatório. Você pode dividir os seus dados manualmente.
  24.  
  25. Para conferir o resultado de seu classificador, você precisa utilizar dados "novos", que ele não utilizou no treino, para checar se as previsões dele são corretas. Como o dataset não vem com os dados de teste separados, vocês precisam tirar um parte dele "na mão" para testar. Essa função que usei divide os dados em treino e teste. Ela facilita, mas vocês podem fazer essa divisão manualmente se quiserem. Isso é algo como a divisão de treino e teste que vemos na aula de validação cruzada.
  26.  
  27. ____
  28.  
  29. # Carregando e treinando os classificadores
  30. # Random forests
  31. from sklearn.ensemble import RandomForestClassifier
  32.  
  33. rfc = RandomForestClassifier()
  34. rfc.fit(X_train,y_train)
  35. y_pred = rfc.predict(X_test)
  36.  
  37. # Métricas do Random Forests
  38. rfc_acc = round(accuracy_score(y_test, y_pred), 6) # round é para arredondar para seis casas decimais
  39. rfc_recall = round(recall_score(y_test, y_pred, average='weighted'), 6)
  40. rfc_precision = round(precision_score(y_test, y_pred, average='weighted'), 6)
  41.  
  42. # KNN
  43. from sklearn.neighbors import KNeighborsClassifier
  44. knn = KNeighborsClassifier(n_neighbors=3)
  45. knn.fit(X_train, y_train)
  46. y_pred = knn.predict(X_test)
  47.  
  48. # Métricas do KNN
  49. knn_acc = round(accuracy_score(y_test, y_pred), 6)
  50. knn_recall = round(recall_score(y_test, y_pred, average='weighted'), 6)
  51. knn_precision = round(precision_score(y_test, y_pred, average='weighted'), 6)]
  52.  
  53. # Comparação
  54. print("KNN vs Random Forests\n")
  55. print("Classes: {0}\n".format(wine.target_names))
  56.  
  57. print("Acurácia: {0} vs {1}".format(knn_acc, rfc_acc))
  58. print("Recall: {0} vs {1}".format(knn_recall, rfc_recall))
  59. print("Precisão: {0} vs {1}".format(knn_precision, rfc_precision))
  60.  
  61. Aqui vem uma parte fundamental: a escolha dos classificadores. Eu escolhi o KNN e o Random Forests, mas vocês podem escolher outros. Algumas opções:
  62.  
  63. from sklearn.neural_network import MLPClassifier (Links para um site externo)Links para um site externo
  64. from sklearn.neighbors import KNeighborsClassifier (Links para um site externo)Links para um site externo
  65. from sklearn.svm import SVC (Links para um site externo)Links para um site externo
  66. from sklearn.gaussian_process import GaussianProcessClassifier (Links para um site externo)Links para um site externo
  67. from sklearn.gaussian_process.kernels import RBF (Links para um site externo)Links para um site externo
  68. from sklearn.tree import DecisionTreeClassifier (Links para um site externo)Links para um site externo
  69. from sklearn.ensemble import RandomForestClassifier (Links para um site externo)Links para um site externo, AdaBoostClassifier (Links para um site externo)Links para um site externo
  70. from sklearn.naive_bayes import GaussianNB (Links para um site externo)Links para um site externo
  71. from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis (Links para um site externo)Links para um site externo
  72. Fonte: um exemplo de comparação de vários classificadores (Links para um site externo)Links para um site externo. Se clicarem no link de cada classificador, vão para a página que exibe os parâmetros dele e exemplo simples de uso.
  73.  
  74. Os códigos, em si, são simples: eu instancio o classificador com os parâmetros que quero, chamo a função fit, que faz o treino, faço a previsão com os dados de teste e chamo as funções das métricas para armazenar o desempenho deles.
  75.  
  76. ____
  77.  
  78. # Na validação cruzada
  79. from sklearn.model_selection import cross_val_score
  80. cv_rfc = cross_val_score(rfc, X, y)
  81. cv_knn = cross_val_score(knn, X, y)
  82.  
  83. print("\nValidação cruzada: {0} vs {1}".format(cv_knn, cv_rfc))
  84.  
  85. Outros algoritmos para fazer validação cruzada:
  86.  
  87. Cross validate (Links para um site externo)Links para um site externo, K-Fold Iterator (Links para um site externo)Links para um site externo, Outros (Links para um site externo)Links para um site externo
  88.  
  89. #Buscando hiper parâmetros
  90. from sklearn.model_selection import GridSearchCV
  91.  
  92.  
  93. #RFC
  94. parameters = {'min_samples_split':(2,6)}
  95. rfc_hps = GridSearchCV(rfc, parameters)
  96. rfc_hps.fit(X, y)
  97. print("Melhor valor para o parâmetro min_samples_split: {0}".format(rfc_hps.best_params_['min_samples_split']))
  98.  
  99.  
  100. #KNN
  101. parameters = {'n_neighbors':(1,20)}
  102. knn_hps = GridSearchCV(knn, parameters)
  103. knn_hps.fit(X, y)
  104. knn_hps.best_params_['n_neighbors']
  105. print("Melhor valor para o parâmetro n_neighbors: {0}".format(knn_hps.best_params_['n_neighbors']))
  106.  
  107. Doc do GridSearchCV (Links para um site externo)Links para um site externo
  108.  
  109. A GridSearchCV é bastante robusta. Aí, eu basicamente pedi pra ela retornar o melhor valor encontrado para os parâmetros que busquei. Na documentação há exemplos para parâmetros não numéricos também.
  110.  
  111. _______________________________________________
  112. Não usem exatamente esse código no trabalho de vocês, mas o utilizem de base. Algumas variações bem vindas são:
  113.  
  114. Usem outros classificadores.
  115. Comparem mais de dois classificadores.
  116. Resolvam outro dos dataset propostos nos trabalhos.
  117. Usem outras métricas.
  118. Façam outro tipo de validação cruzada.
  119. Explorem mais o ajuste de hiper-parâmetros
  120. Agora, o que eu mais espero de vocês é a análise, acima de tudo. Atentem a isso no relatório do trabalho.
  121. _______________________________________________
  122.  
  123. Extra: aqui (Links para um site externo)Links para um site externo há um índice com todas as funções do Scikit. Eu destaquei a parte relacionada a seleção de modelos. Recomendo ver as partes dos algoritmos de classificação, regressão, agrupamento, além das partes de ajuste de hiper parâmetros e validação cruzada.
  124.  
  125. Eu reforço que fazer uma análise dessa "por conta própria" é uma etapa muito importante do aprendizado! A quem precisar dessa ajuda, recomendo fortemente fazer outra das atividades prévias depois, ainda que após o fim do curso.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement