機(jī)器學(xué)習(xí)常見(jiàn)異常和解決辦法匯總
文章目錄
1.sklearn庫(kù)的LogisticRegression模型訓(xùn)練時(shí)警告lbfgs failed to converge (status=1)
scikit-learn是一個(gè)Python機(jī)器學(xué)習(xí)庫(kù),提供了很多基礎(chǔ)的模型和算法。在使用LogisticRegression邏輯斯蒂回歸模型時(shí),可能會(huì)出現(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超過(guò)了限制,LogisticRegression的max_iter參數(shù)的默認(rèn)值為100,數(shù)據(jù)量超過(guò)了限制。
解決辦法:
只需要在初始化模型的時(shí)候給max_iter參數(shù)指定一個(gè)較大的值就不會(huì)超過(guò)限制,例如max_iter=10000
就不會(huì)再出現(xiàn)警告信息。
2.sklearn庫(kù)的LogisticRegression模型使用L1正則報(bào)錯(cuò)
使用sklearn庫(kù)的LogisticRegression模型時(shí)可以指定懲罰項(xiàng),即正則項(xiàng),在使用L1正則時(shí)會(huì)報(bào)錯(cuò),例如LogisticRegression(fit_intercept=True, C=0.1, penalty='l1')
,報(bào)錯(cuò)如下:
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.
分析:
可以看到,這是因?yàn)樵谛掳娴膕klearn庫(kù)中,lbfgs分類器只支持l2懲罰項(xiàng)或者不要懲罰項(xiàng),要使用L1正則項(xiàng),則需要使用liblinear分類器,同時(shí)dual必須是False。
解決辦法:
在設(shè)置懲罰項(xiàng)參數(shù)的同時(shí),設(shè)置分類器為liblinear即可,例如clf = LogisticRegression(fit_intercept=True, C=0.1, penalty='l1', solver='liblinear')
。
掃碼進(jìn)群: