Hyperparameterjustering i Python
Alex Scriven
Data Scientist
Varför läsa den här kursen?
Du kanske förvånas av vad som döljer sig under ytan!
Datamängden handlar om kreditkortsdefaulter.
Den innehåller variabler kopplade till den finansiella historiken för konsumenter i Taiwan. Den har 30 000 användare och 24 attribut.
Vårt modelleringsmål är om de defaultade på sitt lån.
Datamängden är redan förbehandlad och vi kommer ibland använda mindre urval för att demonstrera ett begrepp.
Mer information om datamängden finns här:
https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients
Vad är en parameter?
En enkel logistisk regressionsmodell:
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... ]])
Städa upp koefficienterna:
# 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"])
Sortera och skriv ut de tre högsta koefficienterna
coefs.sort_values(by=["Coefficient"], axis=0, inplace=True, ascending=False)
print(coefs.head(3))

För att hitta parametrar behöver du:
Parametrar finns under avsnittet "Attributes", inte under "parameters"!
Vad gäller trädbaserade algoritmer?
Random forest har inga koefficienter, utan nodbeslut – vilket särdrag och vilket värde att dela på.
# 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]
För enkelhetens skull visar vi slutresultatet (en bild) av beslutsträdet. Utforska gärna paketet som används (graphviz & pydotplus) på egen hand.

Vi kan hämta detaljer om den vänstra noden, näst högst upp:
# 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"
Hyperparameterjustering i Python