Hyperparameterwaarden

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Hyperparameterwaarden

 

Sommige hyperparameters zijn belangrijker om eerst te tunen.

Maar welke waarden probeer je voor hyperparameters?

  • Specifiek per algoritme en hyperparameter
  • Er zijn wel best practices en tips

Bekijk een paar toppers!

Hyperparameter Tuning in Python

Conflicterende hyperparameterkeuzes

Let op conflicterende hyperparameterkeuzes.

  • LogisticRegression() heeft opties solver en penalty die kunnen botsen.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Sommige zijn niet expliciet maar worden gewoon genegeerd (bij ElasticNet met de hyperparameter normalize):

This parameter is ignored when fit_intercept is set to False

Raadpleeg altijd de Scikit-learn documentatie!

Hyperparameter Tuning in Python

Onzinnige hyperparameterwaarden

 

Let op ‘onzin’-waarden voor verschillende algoritmen:

  • Random forest met weinig bomen
    • Noem je het een ‘forest’ met maar 2 bomen?
  • 1 buur in KNN
    • De ‘stem’ van één persoon middelen is niet erg robuust!
  • Een hyperparameter heel minimaal verhogen

Tijd nemen om zinvolle waarden te documenteren is waardevol.

Hyperparameter Tuning in Python

Hyperparameterkeuze automatiseren

 

In de vorige oefening bouwden we modellen als:

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

Dat is best inefficiënt. Kan dit slimmer?

Hyperparameter Tuning in Python

Hyperparametertuning automatiseren

Gebruik een for-lus om opties te doorlopen:

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

Hyperparametertuning automatiseren

We slaan de resultaten op in een DataFrame om te bekijken:

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

Nauwkeurigheid voor buur-tabel

Hyperparameter Tuning in Python

Leercurves

Laten we een leercurve maken

We testen nu veel meer waarden

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

Leercurves

We kunnen het grotere DataFrame plotten:

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

Leercurves

Onze grafiek:

nauwkeurigheid vs aantal buren leercurve voor knn

Hyperparameter Tuning in Python

Handige truc om waarden te genereren

Pythons range ondersteunt geen decimale stappen.

Een handige truc is NumPy's np.linspace(start, end, num)

  • Maak num waarden gelijkmatig verdeeld binnen het interval (start, end) dat je opgeeft.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Hyperparameter Tuning in Python

Laten we oefenen!

Hyperparameter Tuning in Python

Preparing Video For Download...