Valores de hiperparâmetros

Ajuste de Hiperparâmetros em Python

Alex Scriven

Data Scientist

Valores de hiperparâmetros

 

Alguns hiperparâmetros são mais importantes que outros para começar a ajustar.

Mas quais valores testar para os hiperparâmetros?

  • Específicos de cada algoritmo e hiperparâmetro
  • Existem algumas boas práticas e dicas

Vamos ver as principais dicas!

Ajuste de Hiperparâmetros em Python

Conflitos entre hiperparâmetros

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!

Ajuste de Hiperparâmetros em Python

Valores de hiperparâmetros inadequados

 

Cuidado com valores "bobos" para diferentes algoritmos:

  • Random forest com poucas árvores
    • Você chamaria de "floresta" com só 2 árvores?
  • 1 vizinho no algoritmo KNN
    • Fazer a média do "voto" de uma pessoa não parece robusto!
  • Aumentar um hiperparâmetro por um valor minúsculo

Documentar valores razoáveis para hiperparâmetros vale muito a pena.

Ajuste de Hiperparâmetros em Python

Automatizando a escolha de hiperparâmetros

 

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?

Ajuste de Hiperparâmetros em Python

Automatizando a otimização de hiperparâmetros

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)
Ajuste de Hiperparâmetros em Python

Automatizando a otimização de hiperparâmetros

Podemos guardar os resultados em um DataFrame para visualizar:

results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

Acurácia por número de vizinhos (tabela)

Ajuste de Hiperparâmetros em Python

Curvas de aprendizado

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})
Ajuste de Hiperparâmetros em Python

Curvas de aprendizado

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()
Ajuste de Hiperparâmetros em Python

Curvas de aprendizado

Nosso gráfico:

curva de aprendizado: acurácia vs número de vizinhos no KNN

Ajuste de Hiperparâmetros em Python

Um truque útil para gerar valores

A função range do Python não funciona com passos decimais.

Um truque útil usa o np.linspace(start, end, num) do NumPy

  • Cria 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

Vamos praticar!

Ajuste de Hiperparâmetros em Python

Preparing Video For Download...