La régression logistique de la bibliothèque scikit-learn (https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) (LogisticRegression) est par défaut solver
dans la version 0.22. Changé de liblinearà
lbfgs`.
Notez que cette modification peut entraîner des résultats d'exécution différents ou une sortie d'erreur même avec le même code.
J'obtiens une erreur avec le code suivant qui fait la normalisation L1.
lr_l1 = LogisticRegression(C=C, penalty='l1').fit(X_train, y_train)
Voici le contenu de l'erreur.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~/devp/linear_model.py in
1 for C, marker in zip([0.001, 1, 100], ['o', '^', 'v']):
----> 2 lr_l1 = LogisticRegression(C=C, penalty='l1').fit(X_train, y_train)
3 print('Training accuracy of l1 logreg with C={:.f3}: {:.2f}'.format(C, lr_l1.score(X_train, y_train)))
4 print('Test accuracy of l1 logreg with C={:.f3}: {:.2f}'.format(C, lr_l1.score(X_test, y_test)))
5 plt.plot(lr_l1.coef_.T, marker, label='C={:.3f}'.format(C))
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/_logistic.py in fit(self, X, y, sample_weight)
1484 The SAGA solver supports both float64 and float32 bit arrays.
1485 """
-> 1486 solver = _check_solver(self.solver, self.penalty, self.dual)
1487
1488 if not isinstance(self.C, numbers.Number) or self.C < 0:
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/_logistic.py in _check_solver(solver, penalty, dual)
443 if solver not in ['liblinear', 'saga'] and penalty not in ('l2', 'none'):
444 raise ValueError("Solver %s supports only 'l2' or 'none' penalties, "
--> 445 "got %s penalty." % (solver, penalty))
446 if solver != 'liblinear' and dual:
447 raise ValueError("Solver %s supports only "
ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.
L'erreur est que «lbfgs» dans «solveur» ne prend en charge que «l2» ou «aucun».
solveur
pour résoudre l'erreurDécrivez comme suit.
lr_l1 = LogisticRegression(C=C, penalty='l1', solver='liblinear').fit(X_train, y_train)
Comme indiqué dans ici, la valeur par défaut de solver
dans LogisticRegression
a été modifiée par la mise à jour. C'est à cause de ça.
Changed in version 0.22: The default solver changed from ‘liblinear’ to ‘lbfgs’ in 0.22.
En conséquence, en supposant que la valeur par défaut de «solveur» est «liblinear», il semble que le code source qui omet le paramètre de «solveur» lors de la normalisation L1 sera affecté et générera une erreur. ..
De plus, dans le cas de "Je pensais que la valeur par défaut était liblinear
et je l'ai exécutée, elle a été exécutée avec lbfgs
" parce que solveur
a été omis, le résultat de sortie est dans le passé même s'il ne provoque pas d'erreur. Cela devient un événement différent de.
Dans certains cas, "l'opération change ou ne fonctionne pas en raison du côté bibliothèque", alors assurez-vous de vérifier la mise à jour de la version de la bibliothèque que vous utilisez souvent.
Recommended Posts