Hyperparameterjustering i Python
Alex Scriven
Data Scientist
Vissa hyperparametrar är viktigare att börja justera än andra.
Men vilka värden ska man prova?
Låt oss titta på de viktigaste tipsen!
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!
Var försiktig med orimliga värden för olika algoritmer:
Att dokumentera rimliga hyperparametervärden är en värdefull investering.
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?
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)
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)

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})
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()
Vår graf:

Pythons range-funktion fungerar inte med decimala steg.
Ett praktiskt knep är att använda NumPy:s np.linspace(start, end, num)
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