機器學習常見異常和解決辦法匯總

文章目錄

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')。


掃碼進群:
Python極客部落群聊二維碼