繁体   English   中英

Python:逻辑回归 max_iter 参数降低了准确性

[英]Python: Logistic regression max_iter parameter is reducing the accuracy

我正在做多类/多标签文本分类。 我试图摆脱“ConvergenceWarning”。

当我将max_iter从默认值调整为4000 时,警告消失了。 但是,我的模型精度从78降低到75

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score


logreg = Pipeline([('vect', CountVectorizer()),
            ('tfidf', TfidfTransformer()),
            ('clf', LogisticRegression(n_jobs=1, C=1e5, solver='lbfgs',multi_class='ovr' ,random_state=0, class_weight='balanced' )),
           ])
logreg.fit(X_train, y_train)


y_pred = logreg.predict(X_test)

print('Logistic Regression Accuracy %s' % accuracy_score(y_pred, y_test))

cv_score = cross_val_score(logreg, train_tfidf, y_train, cv=10, scoring='accuracy')
print("CV Score : Mean : %.7g | Std : %.7g | Min : %.7g | Max : %.7g" % (np.mean(cv_score),np.std(cv_score),np.min(cv_score),np.max(cv_score)))

为什么当 max_iter =4000 时我的准确度会降低? 有没有其他方法可以解决*“ConvergenceWarning: lbfgs 未能收敛。增加迭代次数。“迭代次数。”,ConvergenceWarning)” *

它缺少问题中使用的数据,因此无法重现问题,只能猜测。

要检查的一些事项:

1)许多估计器,例如LogisticRegression喜欢(不是说需要)缩放数据。 根据您的数据,您可能希望使用MaxAbsScalerMinMaxScalerStandardScalerRobustAScaler 最佳选择取决于您要解决的问题类型、稀疏性等数据属性、下游估计器是否欢迎负值等。缩放数据通常会加快收敛速度​​,甚至可能不需要增加max_iter

2)根据我的经验, solver不是"liblinear"需要更多的max_iter迭代来收敛给定相同的输入数据。

3) 我set in your code snippet. It currently defaults to没有看到任何 'max_iter set in your code snippet. It currently defaults to set in your code snippet. It currently defaults to 100`(sklearn 0.22)。

4)我看到你设置了正则化参数C=100000 它大大减少了正则化,因为 C 是正则化强度的倒数。 预计会消耗更多迭代,并可能导致模型过度拟合。

5) 我没想到更高的max_iter会降低准确度。 求解器正在发散而不是收敛。 数据可能未缩放或随机状态不固定或容差tol (默认值 1e-4)变得很高。

6) 检查您的cross_val_score交叉验证参数cv 如果我没有错,默认行为不会设置随机状态,从而导致可变平均准确度。

在我的例子中,我以小的增量(从默认的 100 到 400,然后是 400 的间隔)增加了max_iter ,直到我摆脱了警告。 而且,有趣的是,它增加了模型性能参数(准确度、精度、召回率、F1 分数)。 直觉上这是有道理的,因为现在收敛发生了,你达到了最佳解决方案,而在早期的情况下你没有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM