Hyperparameter Tuning in Python
Alex Scriven
Data Scientist
Waarom deze course volgen?
Je zult versteld staan van wat er onder de motorkap zit!
De dataset gaat over creditcardwanbetalingen.
Hij bevat variabelen over de financiële historie van consumenten in Taiwan. Er zijn 30.000 gebruikers en 24 attributen.
Ons doel is te voorspellen of ze in gebreke bleven met hun lening.
Hij is al voorbewerkt; soms nemen we kleinere samples om een concept te tonen.
Meer info over de dataset vind je hier:
https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients
Wat is een parameter?
Een simpele logistieke regressie:
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... ]])
Maak de coëfficiënten netjes:
# 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"])
Sorteer en print nu de top drie coëfficiënten
coefs.sort_values(by=["Coefficient"], axis=0, inplace=True, ascending=False)
print(coefs.head(3))

Om parameters te vinden heb je nodig:
Parameters staan onder ‘Attributes’, niet onder ‘Parameters’!
Hoe zit het met boomgebaseerde algoritmen?
Random forest heeft geen coëfficiënten, maar knoopbeslissingen (welke feature en welke waarde om op te splitsen).
# 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]
Voor de eenvoud tonen we het eindresultaat (een afbeelding) van de decision tree. Verken de gebruikte packages (graphviz & pydotplus) gerust zelf.

We kunnen details ophalen van de linker, op één na hoogste knoop:
# 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))
"Deze knoop splitste op feature PAY_0, bij een waarde van 1.5"
Hyperparameter Tuning in Python