Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
- ______________________________________________
- # Carregando o dataset
- from sklearn.datasets import load_wine
- wine = load_wine()
- # Exemplos de acesso aos dados
- X = wine.data[:, :] # Features de cada elemento
- y = wine.target # Classes de cada elemento
- 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.
- ____
- # É preciso treinar o classificador, e testar o seu desempenho com dados "novos".
- # Aqui, dividimos os dados em treino e teste, para podermos testar nosso desempenho depois.
- from sklearn.model_selection import train_test_split
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
- # O uso dessa função facilita, mas não é obrigatório. Você pode dividir os seus dados manualmente.
- 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.
- ____
- # Carregando e treinando os classificadores
- # Random forests
- from sklearn.ensemble import RandomForestClassifier
- rfc = RandomForestClassifier()
- rfc.fit(X_train,y_train)
- y_pred = rfc.predict(X_test)
- # Métricas do Random Forests
- rfc_acc = round(accuracy_score(y_test, y_pred), 6) # round é para arredondar para seis casas decimais
- rfc_recall = round(recall_score(y_test, y_pred, average='weighted'), 6)
- rfc_precision = round(precision_score(y_test, y_pred, average='weighted'), 6)
- # KNN
- from sklearn.neighbors import KNeighborsClassifier
- knn = KNeighborsClassifier(n_neighbors=3)
- knn.fit(X_train, y_train)
- y_pred = knn.predict(X_test)
- # Métricas do KNN
- knn_acc = round(accuracy_score(y_test, y_pred), 6)
- knn_recall = round(recall_score(y_test, y_pred, average='weighted'), 6)
- knn_precision = round(precision_score(y_test, y_pred, average='weighted'), 6)]
- # Comparação
- print("KNN vs Random Forests\n")
- print("Classes: {0}\n".format(wine.target_names))
- print("Acurácia: {0} vs {1}".format(knn_acc, rfc_acc))
- print("Recall: {0} vs {1}".format(knn_recall, rfc_recall))
- print("Precisão: {0} vs {1}".format(knn_precision, rfc_precision))
- 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:
- from sklearn.neural_network import MLPClassifier (Links para um site externo)Links para um site externo
- from sklearn.neighbors import KNeighborsClassifier (Links para um site externo)Links para um site externo
- from sklearn.svm import SVC (Links para um site externo)Links para um site externo
- from sklearn.gaussian_process import GaussianProcessClassifier (Links para um site externo)Links para um site externo
- from sklearn.gaussian_process.kernels import RBF (Links para um site externo)Links para um site externo
- from sklearn.tree import DecisionTreeClassifier (Links para um site externo)Links para um site externo
- 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
- from sklearn.naive_bayes import GaussianNB (Links para um site externo)Links para um site externo
- from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis (Links para um site externo)Links para um site externo
- 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.
- 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.
- ____
- # Na validação cruzada
- from sklearn.model_selection import cross_val_score
- cv_rfc = cross_val_score(rfc, X, y)
- cv_knn = cross_val_score(knn, X, y)
- print("\nValidação cruzada: {0} vs {1}".format(cv_knn, cv_rfc))
- Outros algoritmos para fazer validação cruzada:
- 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
- #Buscando hiper parâmetros
- from sklearn.model_selection import GridSearchCV
- #RFC
- parameters = {'min_samples_split':(2,6)}
- rfc_hps = GridSearchCV(rfc, parameters)
- rfc_hps.fit(X, y)
- print("Melhor valor para o parâmetro min_samples_split: {0}".format(rfc_hps.best_params_['min_samples_split']))
- #KNN
- parameters = {'n_neighbors':(1,20)}
- knn_hps = GridSearchCV(knn, parameters)
- knn_hps.fit(X, y)
- knn_hps.best_params_['n_neighbors']
- print("Melhor valor para o parâmetro n_neighbors: {0}".format(knn_hps.best_params_['n_neighbors']))
- Doc do GridSearchCV (Links para um site externo)Links para um site externo
- 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.
- _______________________________________________
- Não usem exatamente esse código no trabalho de vocês, mas o utilizem de base. Algumas variações bem vindas são:
- Usem outros classificadores.
- Comparem mais de dois classificadores.
- Resolvam outro dos dataset propostos nos trabalhos.
- Usem outras métricas.
- Façam outro tipo de validação cruzada.
- Explorem mais o ajuste de hiper-parâmetros
- Agora, o que eu mais espero de vocês é a análise, acima de tudo. Atentem a isso no relatório do trabalho.
- _______________________________________________
- 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.
- 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