Dostrajanie hiperparametrów w Pythonie

Strojenie hiperparametrów w Pythonie

Alex Scriven

Data Scientist

Wprowadzenie

 

Dlaczego warto podjąć ten kurs?

  • Nowe, złożone algorytmy z wieloma hiperparametrami
  • Dostrajanie może być bardzo czasochłonne
  • Pogłębia zrozumienie działania modeli poza ustawieniami domyślnymi

Można być zaskoczonym tym, co kryje się „pod maską"!

Strojenie hiperparametrów w Pythonie

Zbiór danych

 

Zbiór danych dotyczy niespłacania kart kredytowych.

Zawiera zmienne związane z historią finansową konsumentów na Tajwanie. Obejmuje 30 000 użytkowników i 24 atrybuty.

Celem modelowania jest przewidzenie, czy dany klient nie spłacił kredytu

Dane zostały już wstępnie przetworzone; niekiedy będziemy używać mniejszych próbek do zilustrowania pojęć

Dodatkowe informacje o zbiorze danych można znaleźć tutaj:

https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients

Strojenie hiperparametrów w Pythonie

Omówienie parametrów

 

Czym jest parametr?

  • Składowe modelu wyznaczane w procesie uczenia
  • Nie ustawia się ich ręcznie (w zasadzie nie jest to możliwe!)
  • Algorytm wyznacza je samodzielnie
Strojenie hiperparametrów w Pythonie

Parametry w regresji logistycznej

Prosty model regresji logistycznej:

log_reg_clf = LogisticRegression() 
log_reg_clf.fit(X_train, y_train)

print(log_reg_clf.coef_)
array([[-2.88651273e-06, -8.23168511e-03,  7.50857018e-04,
         3.94375060e-04,  3.79423562e-04,  4.34612046e-04,
         4.37561467e-04,  4.12107102e-04, -6.41089138e-06,
        -4.39364494e-06,  cont... ]])
Strojenie hiperparametrów w Pythonie

Parametry w regresji logistycznej

Porządkowanie współczynników:

# Get the original variable names
original_variables = list(X_train.columns)

# Zip together the names and coefficients zipped_together = list(zip(original_variables, log_reg_clf.coef_[0])) coefs = [list(x) for x in zipped_together]
# Put into a DataFrame with column labels coefs = pd.DataFrame(coefs, columns=["Variable", "Coefficient"])
Strojenie hiperparametrów w Pythonie

Parametry w regresji logistycznej

 

Teraz posortuj i wydrukuj trzy najważniejsze współczynniki

coefs.sort_values(by=["Coefficient"], axis=0, inplace=True, ascending=False)
print(coefs.head(3))

tabela współczynników

Strojenie hiperparametrów w Pythonie

Gdzie znaleźć parametry

 

Aby znaleźć parametry, należy:

  1. Znać podstawy działania algorytmu
  2. Zapoznać się z dokumentacją Scikit-Learn

Parametry znajdują się w sekcji „Attributes", nie „parameters"!

Strojenie hiperparametrów w Pythonie

Parametry w lesie losowym

A co z algorytmami opartymi na drzewach?

Las losowy nie ma współczynników, lecz decyzje węzłów (jaka cecha i jaka wartość podziału).

# A simple random forest estimator
rf_clf = RandomForestClassifier(max_depth=2)
rf_clf.fit(X_train, y_train)

# Pull out one tree from the forest chosen_tree = rf_clf.estimators_[7]

Dla uproszczenia pokażemy gotowy wynik (obraz) drzewa decyzyjnego. Zachęcamy do samodzielnego zbadania użytego pakietu (graphviz i pydotplus).

Strojenie hiperparametrów w Pythonie

Diagram przepływu decyzji pojedynczego drzewa lasu losowego

Strojenie hiperparametrów w Pythonie

Wyodrębnianie decyzji węzłów

Możemy wyodrębnić szczegóły lewego węzła, drugiego od góry:

# Get the column it split on
split_column = chosen_tree.tree_.feature[1]
split_column_name = X_train.columns[split_column]

# Get the level it split on split_value = chosen_tree.tree_.threshold[1]
print("This node split on feature {}, at a value of {}" .format(split_column_name, split_value))

"This node split on feature PAY_0, at a value of 1.5"

Strojenie hiperparametrów w Pythonie

Czas na ćwiczenia!

Strojenie hiperparametrów w Pythonie

Preparing Video For Download...