Ajustarea hiperparametrilor în Python
Alex Scriven
Data Scientist
Să analizăm rezultatele GridSearchCV.
Trei grupuri de proprietăți GridSearchCV:
cv_results_best_index_, best_params_ & best_score_scorer_, n_splits_ & refit_time_
Proprietățile sunt accesate prin notația punct.
De exemplu:
grid_search_object.property
Unde property este proprietatea pe care doriți să o obțineți
Proprietatea cv_results_:
Citiți-o într-un DataFrame pentru a o analiza:
cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)
print(cv_results_df.shape)
(12, 23)
Coloanele time indică timpul necesar pentru antrenarea (și scorarea) modelului.
Deoarece am efectuat o validare încrucișată cu 5 fold-uri, modelul a rulat de 5 ori, stocând media și deviația standard a timpilor în secunde.

Coloanele param_ stochează parametrii testați pe acel rând, câte o coloană per parametru

Coloana params conține un dicționar cu toți parametrii:
pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

Coloanele test_score conțin scorurile pe setul de test pentru fiecare fold de validare încrucișată, precum și statistici sumare:

Coloana rank ordonează mean_test_score de la cel mai bun la cel mai slab:

Putem selecta ușor cel mai bun grid square din cv_results_ folosind coloana rank_test_score
best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

Coloanele test_score sunt repetate și pentru training_scores.
Câteva aspecte importante de reținut:
return_train_score trebuie să fie True pentru a include coloanele de antrenament.
Nu există coloană de ranking pentru scorurile de antrenament, deoarece ne interesează doar performanța pe setul de test.
Informațiile despre cel mai bun grid square sunt rezumate în trei proprietăți:
best_params_, dicționarul de parametri care a dat cel mai bun scor.
best_score_, cel mai bun scor obținut.
best_index_, rândul din cv_results_.rank_test_score corespunzător celui mai bun rezultat.
Proprietatea best_estimator_ este un estimator construit cu cei mai buni parametri din grid search.
În cazul nostru, acesta este un estimator Random Forest:
type(grid_rf_class.best_estimator_)
sklearn.ensemble.forest.RandomForestClassifier
Putem folosi direct acest obiect ca estimator!
print(grid_rf_class.best_estimator_)

Informații suplimentare sunt disponibile în următoarele proprietăți:
scorer_Funcția de scor utilizată pe datele de validare. (am setat AUC)
n_splits_Numărul de fold-uri de validare încrucișată. (am setat 5)
refit_time_Numărul de secunde utilizate pentru reantrenarea celui mai bun model pe întregul set de date.
Ajustarea hiperparametrilor în Python