機器學習常見異常和解決辦法匯總
文章目錄
1.sklearn庫的LogisticRegression模型訓練時警告lbfgs failed to converge (status=1)
scikit-learn是一個Python機器學習庫,提供了很多基礎的模型和算法。在使用LogisticRegression邏輯斯蒂回歸模型時,可能會出現(xiàn)警告信息如下:
ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.
Increase the number of iterations (max_iter) or scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(
分析:
從警告信息中可以看到,是迭代次數(shù)ITERATIONS超過了限制,LogisticRegression的max_iter參數(shù)的默認值為100,數(shù)據(jù)量超過了限制。
解決辦法:
只需要在初始化模型的時候給max_iter參數(shù)指定一個較大的值就不會超過限制,例如max_iter=10000
就不會再出現(xiàn)警告信息。
2.sklearn庫的LogisticRegression模型使用L1正則報錯
使用sklearn庫的LogisticRegression模型時可以指定懲罰項,即正則項,在使用L1正則時會報錯,例如LogisticRegression(fit_intercept=True, C=0.1, penalty='l1')
,報錯如下:
File "XXX\lib\site-packages\sklearn\linear_model\_logistic.py", line 447, in _check_solver
raise ValueError(
ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.
分析:
可以看到,這是因為在新版的sklearn庫中,lbfgs分類器只支持l2懲罰項或者不要懲罰項,要使用L1正則項,則需要使用liblinear分類器,同時dual必須是False。
解決辦法:
在設置懲罰項參數(shù)的同時,設置分類器為liblinear即可,例如clf = LogisticRegression(fit_intercept=True, C=0.1, penalty='l1', solver='liblinear')
。
掃碼進群: