Hyperparameter Tuning in Python
Alex Scriven
Data Scientist
Některé hyperparametry je důležitější ladit jako první.
Ale jaké hodnoty pro hyperparametry zvolit?
Podívejme se na nejdůležitější tipy!
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!
Dávejte pozor na nevhodné hodnoty pro různé algoritmy:
Dokumentování rozumných hodnot hyperparametrů je cenná činnost.
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?
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)
Výsledky lze uložit do DataFrame:
results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

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})
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()
Náš graf:

Funkce range v Pythonu nepodporuje desetinné kroky.
Praktický trik využívá np.linspace(start, end, num) z NumPy
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