Hyperparametervärden

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

Hyperparametervärden

 

Vissa hyperparametrar är viktigare att börja justera än andra.

Men vilka värden ska man prova?

  • Specifikt för varje algoritm och hyperparameter
  • Det finns några riktlinjer och tips att följa

Låt oss titta på de viktigaste tipsen!

Hyperparameterjustering i Python

Motstridiga hyperparameterval

Var uppmärksam på motstridiga hyperparameterval.

  • LogisticRegression() har motstridiga alternativ för solver och penalty.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

En del ignoreras utan tydligt felmeddelande (t.ex. ElasticNet med normalize):

This parameter is ignored when fit_intercept is set to False

Konsultera alltid Scikit-learn-dokumentationen!

Hyperparameterjustering i Python

Orimliga hyperparametervärden

 

Var försiktig med orimliga värden för olika algoritmer:

  • Slumpmässig skog med få träd
    • Kan man kalla det en "skog" med bara 2 träd?
  • 1 granne i KNN-algoritmen
    • Att ta genomsnittet av en persons "röst" är knappast robust!
  • Öka en hyperparameter med ett mycket litet steg

Att dokumentera rimliga hyperparametervärden är en värdefull investering.

Hyperparameterjustering i Python

Automatisera hyperparameterval

 

I föregående övning byggde vi modeller så här:

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

Detta är ganska ineffektivt. Kan vi göra det bättre?

Hyperparameterjustering i Python

Automatisera hyperparameterjustering

Använd en for-loop för att iterera igenom alternativen:

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)
Hyperparameterjustering i Python

Automatisera hyperparameterjustering

Vi kan spara resultaten i en DataFrame för att visa dem:

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

Tabell över träffsäkerhet per antal grannar

Hyperparameterjustering i Python

Inlärningskurvor

Nu skapar vi en inlärningskurva

Den här gången testar vi många fler värden

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})
Hyperparameterjustering i Python

Inlärningskurvor

Vi kan plotta den större DataFrame:n:

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()
Hyperparameterjustering i Python

Inlärningskurvor

Vår graf:

inlärningskurva för träffsäkerhet kontra antal grannar i KNN

Hyperparameterjustering i Python

Ett praktiskt knep för att generera värden

Pythons range-funktion fungerar inte med decimala steg.

Ett praktiskt knep är att använda NumPy:s np.linspace(start, end, num)

  • Skapar ett antal värden (num) jämnt fördelade inom ett intervall (start, end) som du anger.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Hyperparameterjustering i Python

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...