Ajuste de Hiperparâmetros em Python
Alex Scriven
Data Scientist
Alguns hiperparâmetros são mais importantes que outros para começar a ajustar.
Mas quais valores testar para os hiperparâmetros?
Vamos ver as principais dicas!
Atenção a escolhas de hiperparâmetros que entram em conflito.
LogisticRegression() tem opções conflitantes de solver e penalty.The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.
Alguns não são explícitos e apenas "ignoram" (em ElasticNet com o hiperparâmetro normalize):
This parameter is ignored when fit_intercept is set to False
Consulte a documentação do Scikit-Learn!
Cuidado com valores "bobos" para diferentes algoritmos:
Documentar valores razoáveis para hiperparâmetros vale muito a pena.
No exercício anterior, criamos modelos assim:
knn_5 = KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20 = KNeighborsClassifier(n_neighbors=20)
Isso é pouco eficiente. Dá para melhorar?
Use um laço for para iterar pelas opções:
neighbors_list = [3,5,10,20,50,75]accuracy_list = []for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test)accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy)
Podemos guardar os resultados em um DataFrame para visualizar:
results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

Vamos criar um gráfico de curva de aprendizado
Desta vez, vamos testar muitos mais valores
neighbors_list = list(range(5,500, 5))accuracy_list = [] for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test) accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy) results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
Podemos plotar o DataFrame maior:
plt.plot(results_df['neighbors'], results_df['accuracy'])# Add the labels and title plt.gca().set(xlabel='n_neighbors', ylabel='Accuracy', title='Accuracy for different n_neighbors') plt.show()
Nosso gráfico:

A função range do Python não funciona com passos decimais.
Um truque útil usa o np.linspace(start, end, num) do NumPy
num valores igualmente espaçados no intervalo (start, end) que você definir.print(np.linspace(1,2,5))
[1. 1.25 1.5 1.75 2. ]
Ajuste de Hiperparâmetros em Python