Hitta den optimala L1-penalkoefficienten
Nu ska du finjustera parametern C för L1-regularisering för att hitta det värde som minskar modellens komplexitet utan att försämra prestandan alltför mycket. Du kör en for-slinga genom möjliga C-värden och bygger en logistisk regressionsmodell för varje värde, samt beräknar prestandamått.
En lista C med möjliga värden har skapats åt dig. Arrayen l1_metrics är uppbyggd med 3 kolumner: den första innehåller C-värdena och de två övriga är platshållare för antalet nollskilda koefficienter respektive modellens recall-värde. De skalade särdragen och målvariablerna är inlästa som train_X och train_Y för träning, samt test_X och test_Y för testning.
Både numpy och pandas är inlästa som np och pd, liksom funktionen recall_score från sklearn.
Den här övningen är en del av kursen
Maskininlärning för marknadsföring i Python
Övningsinstruktioner
- Kör en
for-slinga över intervallet från 0 till längden på listanC. - Initiera och träna en logistisk regressionsmodell för varje
C-kandidat, och förutsäg churn på testdata. - Lagra antalet nollskilda koefficienter och recall-värdet i den andra respektive tredje kolumnen i
l1_metricsför varjeC-kandidat. - Skapa en
pandasDataFrame frånl1_metricsmed lämpliga kolumnnamn.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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=___))