Valeurs d'hyperparamètres

Ajustement des hyperparamètres en Python

Alex Scriven

Data Scientist

Valeurs d'hyperparamètres

 

Certains hyperparamètres sont prioritaires à régler d'abord.

Mais quelles valeurs essayer pour les hyperparamètres ?

  • Dépendent de l'algorithme et de l'hyperparamètre
  • Il existe des conseils et pratiques exemplaires

Voyons quelques astuces clés !

Ajustement des hyperparamètres en Python

Hyperparamètres en conflit

Attention aux choix d'hyperparamètres incompatibles.

  • LogisticRegression() a des options solver et penalty qui peuvent entrer en conflit.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Certains conflits ne sont pas explicites : ils seront simplement « ignorés » (dans ElasticNet avec l'hyperparamètre normalize) :

This parameter is ignored when fit_intercept is set to False

Consultez la documentation de Scikit-Learn !

Ajustement des hyperparamètres en Python

Valeurs d'hyperparamètres absurdes

 

Évitez de fixer des valeurs « insensées » selon l'algorithme :

  • Forêt aléatoire avec très peu d'arbres
    • Est-ce vraiment une « forêt » avec seulement 2 arbres ?
  • 1 voisin dans l'algorithme KNN
    • Faire la moyenne des « votes » d'une seule personne n'est pas très robuste !
  • Augmenter un hyperparamètre d'une valeur infime

Prendre le temps de documenter des valeurs raisonnables d'hyperparamètres est très utile.

Ajustement des hyperparamètres en Python

Automatiser le choix des hyperparamètres

 

Dans l'exercice précédent, nous avons bâti des modèles ainsi :

knn_5 =  KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20  = KNeighborsClassifier(n_neighbors=20)

C'est peu efficace. Peut-on faire mieux ?

Ajustement des hyperparamètres en Python

Automatiser l'ajustement des hyperparamètres

Essayez une boucle for pour parcourir les options :

neighbors_list = [3,5,10,20,50,75]

accuracy_list = []
for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test)
accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy)
Ajustement des hyperparamètres en Python

Automatiser l'ajustement des hyperparamètres

On peut stocker les résultats dans un DataFrame pour les consulter :

results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

Exactitude selon le nombre de voisins – tableau

Ajustement des hyperparamètres en Python

Courbes d'apprentissage

Créons une courbe d'apprentissage

Cette fois, nous testerons bien plus de valeurs

neighbors_list = list(range(5,500, 5))

accuracy_list = [] for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test) accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy) results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
Ajustement des hyperparamètres en Python

Courbes d'apprentissage

Traçons le DataFrame plus volumineux :

plt.plot(results_df['neighbors'], 
    results_df['accuracy'])

# Ajouter les étiquettes et le titre plt.gca().set(xlabel='n_neighbors', ylabel='Accuracy', title='Accuracy for different n_neighbors') plt.show()
Ajustement des hyperparamètres en Python

Courbes d'apprentissage

Notre graphique :

courbe d'apprentissage : exactitude selon le nombre de voisins pour KNN

Ajustement des hyperparamètres en Python

Astuce pour générer des valeurs

La fonction range de Python ne gère pas les pas décimaux.

Astuces : utilisez np.linspace(start, end, num) de NumPy

  • Génère num valeurs également espacées dans l'intervalle (start, end) que vous précisez.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Ajustement des hyperparamètres en Python

Passons à la pratique !

Ajustement des hyperparamètres en Python

Preparing Video For Download...