Die logistische Regression der Scikit-Learn-Bibliothek (https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) (LogisticRegression) ist in Version 0.22 standardmäßig "Solver". Geändert von liblinearzu
lbfgs`.
Beachten Sie, dass diese Änderung auch mit demselben Code zu unterschiedlichen Ausführungsergebnissen oder einer Fehlerausgabe führen kann.
Ich erhalte eine Fehlermeldung mit dem folgenden Code, der die L1-Normalisierung durchführt.
lr_l1 = LogisticRegression(C=C, penalty='l1').fit(X_train, y_train)
Das Folgende ist der Fehlerinhalt.
---------------------------------------------------------------------------
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.
Der Fehler ist, dass "lbfgs" in "Solver" nur "l2" oder "none" unterstützt.
Beschreiben Sie wie folgt.
lr_l1 = LogisticRegression(C=C, penalty='l1', solver='liblinear').fit(X_train, y_train)
Wie in [hier] angegeben (https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html), wurde der Standardwert von "solver" in "LogisticRegression" durch das Update geändert. Es liegt daran.
Changed in version 0.22: The default solver changed from ‘liblinear’ to ‘lbfgs’ in 0.22.
Unter der Annahme, dass der Standardwert von "Solver" "liblinear" ist, scheint der Quellcode, der die Einstellung von "Solver" während der Durchführung der L1-Normalisierung auslässt, betroffen zu sein und einen Fehler auszulösen. ..
Im Fall von "Ich dachte, der Standardwert sei" liblinear "und führte ihn aus, wurde er mit" lbfgs "ausgeführt", da "Solver" weggelassen wurde, liegt das Ausgabeergebnis in der Vergangenheit, auch wenn es keinen Fehler verursacht. Es wird ein Ereignis, das sich von unterscheidet.
Es gibt Fälle, in denen sich der Vorgang aufgrund der Bibliotheksseite ändert oder nicht funktioniert. Überprüfen Sie daher unbedingt das Versions-Upgrade der Bibliothek, die Sie häufig verwenden.
Recommended Posts