Hodnoty hyperparametrů

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Hodnoty hyperparametrů

 

Některé hyperparametry je důležitější ladit jako první.

Ale jaké hodnoty pro hyperparametry zvolit?

  • Závisí na konkrétním algoritmu a hyperparametru
  • Existují určitá doporučení a osvědčené postupy

Podívejme se na nejdůležitější tipy!

Hyperparameter Tuning in Python

Konfliktní volby hyperparametrů

Pozor na konfliktní kombinace hyperparametrů.

  • LogisticRegression() má konfliktní možnosti parametrů solver a penalty.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Některé konflikty nejsou explicitní – parametr bude pouze ignorován (příklad ElasticNet s hyperparametrem normalize):

This parameter is ignored when fit_intercept is set to False

Vždy konzultujte dokumentaci Scikit-Learn!

Hyperparameter Tuning in Python

Nevhodné hodnoty hyperparametrů

 

Dávejte pozor na nevhodné hodnoty pro různé algoritmy:

  • Náhodný les s malým počtem stromů
    • Lze s pouhými 2 stromy mluvit o „lese"?
  • 1 soused v algoritmu KNN
    • Průměrování „hlasů" jedné osoby není příliš robustní!
  • Zvyšování hyperparametru o velmi malou hodnotu

Dokumentování rozumných hodnot hyperparametrů je cenná činnost.

Hyperparameter Tuning in Python

Automatizace volby hyperparametrů

 

V předchozím cvičení jsme modely vytvářeli takto:

knn_5 =  KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20  = KNeighborsClassifier(n_neighbors=20)

Tento postup je poměrně neefektivní. Lze to udělat lépe?

Hyperparameter Tuning in Python

Automatizace ladění hyperparametrů

Použijte smyčku for pro iteraci přes možnosti:

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)
Hyperparameter Tuning in Python

Automatizace ladění hyperparametrů

Výsledky lze uložit do DataFrame:

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

Tabulka přesnosti pro sousedy

Hyperparameter Tuning in Python

Učební křivky

Vytvoříme graf učební křivky

Tentokrát otestujeme více hodnot

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})
Hyperparameter Tuning in Python

Učební křivky

Větší DataFrame lze vykreslit:

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()
Hyperparameter Tuning in Python

Učební křivky

Náš graf:

učební křivka přesnosti vs. počet sousedů pro KNN

Hyperparameter Tuning in Python

Praktický trik pro generování hodnot

Funkce range v Pythonu nepodporuje desetinné kroky.

Praktický trik využívá np.linspace(start, end, num) z NumPy

  • Vytvoří zadaný počet hodnot (num) rovnoměrně rozložených v intervalu (start, end).
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Hyperparameter Tuning in Python

Pojďme si procvičit!

Hyperparameter Tuning in Python

Preparing Video For Download...