Valori ale hiperparametrilor

Ajustarea hiperparametrilor în Python

Alex Scriven

Data Scientist

Valori ale hiperparametrilor

 

Unii hiperparametri sunt mai importanți decât alții pentru ajustare inițială.

Dar ce valori să încercăm?

  • Specifice fiecărui algoritm și hiperparametru
  • Există unele bune practici și sfaturi

Hai să vedem principalele sfaturi!

Ajustarea hiperparametrilor în Python

Combinații conflictuale de hiperparametri

Atenție la combinații conflictuale de hiperparametri.

  • LogisticRegression() are opțiuni conflictuale pentru solver și penalty.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Unii nu sunt expliciți, ci sunt pur și simplu ignorați (ex. ElasticNet cu hiperparametrul normalize):

This parameter is ignored when fit_intercept is set to False

Consultați întotdeauna documentația Scikit-Learn!

Ajustarea hiperparametrilor în Python

Valori absurde pentru hiperparametri

 

Evitați valorile „absurde" pentru diferiți algoritmi:

  • Random forest cu un număr mic de arbori
    • Este o „pădure" cu doar 2 arbori?
  • 1 vecin în algoritmul KNN
    • Media „voturilor" unui singur punct nu pare robustă!
  • Creșterea unui hiperparametru cu o valoare foarte mică

Documentarea valorilor rezonabile pentru hiperparametri este o activitate valoroasă.

Ajustarea hiperparametrilor în Python

Automatizarea alegerii hiperparametrilor

 

În exercițiul anterior, am construit modele astfel:

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

Acesta este ineficient. Putem face mai bine?

Ajustarea hiperparametrilor în Python

Automatizarea ajustării hiperparametrilor

Utilizați o buclă for pentru a itera prin opțiuni:

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)
Ajustarea hiperparametrilor în Python

Automatizarea ajustării hiperparametrilor

Putem stoca rezultatele într-un DataFrame:

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

Tabel cu acuratețea pentru vecini

Ajustarea hiperparametrilor în Python

Curbe de învățare

Vom crea un grafic al curbei de învățare

De data aceasta testăm mai multe valori

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})
Ajustarea hiperparametrilor în Python

Curbe de învățare

Putem reprezenta grafic DataFrame-ul extins:

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()
Ajustarea hiperparametrilor în Python

Curbe de învățare

Graficul obținut:

curbă de învățare acuratețe vs număr de vecini pentru knn

Ajustarea hiperparametrilor în Python

O metodă utilă pentru generarea valorilor

Funcția range din Python nu acceptă pași zecimali.

O metodă utilă este np.linspace(start, end, num) din NumPy

  • Generează num valori distribuite uniform în intervalul (start, end) specificat.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Ajustarea hiperparametrilor în Python

Să exersăm!

Ajustarea hiperparametrilor în Python

Preparing Video For Download...