Optimisation des hyperparamètres en Python

Optimisation des hyperparamètres en Python

Alex Scriven

Data Scientist

Introduction

 

Pourquoi suivre ce cours ?

  • Nouveaux algorithmes complexes avec de nombreux hyperparamètres
  • Le réglage peut prendre beaucoup de temps
  • Compréhension plus profonde au‑delà des valeurs par défaut

Vous pourriez être surpris de ce qui se cache sous le capot !

Optimisation des hyperparamètres en Python

Le jeu de données

 

Le jeu de données concerne les défauts de carte de crédit.

Il contient des variables liées à l'historique financier de certains consommateurs à Taïwan. Il compte 30 000 utilisateurs et 24 attributs.

Notre cible de modélisation est le défaut de remboursement du prêt.

Il a déjà été prétraité et, par moments, nous prendrons de plus petits échantillons pour illustrer un concept.

Des informations supplémentaires sont disponibles ici :

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

Optimisation des hyperparamètres en Python

Aperçu des paramètres

 

Qu'est‑ce qu'un paramètre ?

  • Des composantes du modèle apprises pendant l'entraînement
  • Vous ne les définissez pas manuellement (vous ne le pouvez pas d'ailleurs)
  • L'algorithme les découvre pour vous
Optimisation des hyperparamètres en Python

Paramètres en régression logistique

Un modèle de régression logistique simple :

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... ]])
Optimisation des hyperparamètres en Python

Paramètres en régression logistique

Nettoyer les coefficients :

# 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"])
Optimisation des hyperparamètres en Python

Paramètres en régression logistique

 

Triez et affichez les trois plus grands coefficients

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

tableau des coefficients

Optimisation des hyperparamètres en Python

Où trouver les paramètres

 

Pour trouver les paramètres, il faut :

  1. Connaître un peu l'algorithme
  2. Consulter la documentation Scikit‑learn

Les paramètres se trouvent dans la section « Attributes », et non « parameters » !

Optimisation des hyperparamètres en Python

Paramètres dans Random Forest

Et pour les algorithmes à base d'arbres ?

La forêt aléatoire n'a pas de coefficients, mais des décisions de nœuds (quelle variable et quelle valeur de coupure).

# 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]

Par simplicité, nous montrerons le produit final (une image) de l'arbre de décision. N'hésitez pas à explorer vous‑même les bibliothèques utilisées (graphviz et pydotplus).

Optimisation des hyperparamètres en Python

Organigramme des décisions d'un arbre unique Random Forest

Optimisation des hyperparamètres en Python

Extraction des décisions de nœuds

Nous pouvons extraire les détails du nœud gauche, le deuxième depuis le haut :

# 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 »

Optimisation des hyperparamètres en Python

Passons à la pratique !

Optimisation des hyperparamètres en Python

Preparing Video For Download...