Identifier le coefficient de pénalisation L1 optimal
Vous allez maintenant ajuster le paramètre C pour la régularisation L1 afin de trouver celui qui réduit la complexité du modèle tout en conservant de bonnes métriques de performance. Vous exécuterez une boucle for sur les valeurs possibles de C, créerez une régression logistique pour chacune et calculerez les métriques de performance.
Une liste C a été créée avec les valeurs possibles. Le tableau l1_metrics a été construit avec 3 colonnes : la première contient les valeurs de C, et les deux suivantes servent d’emplacements pour le nombre de coefficients non nuls et le rappel du modèle. Les variables mises à l’échelle ont été chargées comme train_X, train_Y pour l’entraînement, et test_X, test_Y pour le test.
numpy et pandas sont chargés sous les alias np et pd, ainsi que la fonction recall_score de sklearn.
Cet exercice fait partie du cours
Machine Learning pour le marketing en Python
Instructions
- Exécutez une boucle
forsur l’intervalle allant de 0 à la longueur de la listeC. - Pour chaque valeur candidate de
C, initialisez et entraînez une régression logistique, puis prédisez le churn sur les données de test. - Pour chaque valeur candidate de
C, enregistrez le nombre de coefficients non nuls et le rappel dans les deuxième et troisième colonnes del1_metrics. - Créez un DataFrame
pandasà partir del1_metricsavec les noms de colonnes appropriés.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Run a for loop over the range of C list length
for index in ___(0, len(C)):
# Initialize and fit Logistic Regression with the C candidate
logreg = ___(penalty='l1', C=C[___], solver='liblinear')
logreg.fit(___, train_Y)
# Predict churn on the testing data
pred_test_Y = logreg.___(test_X)
# Create non-zero count and recall score columns
l1_metrics[index,1] = np.___(logreg.coef_)
l1_metrics[index,2] = recall_score(___, pred_test_Y)
# Name the columns and print the array as pandas DataFrame
col_names = ['C','Non-Zero Coeffs','Recall']
print(pd.DataFrame(l1_metrics, columns=___))