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

时间:2019-07-18 01:30:42

标签: python logistic-regression cross-validation multiclass-classification

我正在进行多类/多标签文本分类。我试图摆脱“ 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未能收敛。增加了迭代次数。“ of。迭代”。,ConvergenceWarning)” *

1 个答案:

答案 0 :(得分:1)

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

一些要检查的东西:

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

2)根据我的经验,在给定相同输入数据的情况下,max_iter而不是solver需要更多的"liblinear"迭代。

3)我没有看到任何'max_iter max_iter 100`(sklearn 0.22)。

4)我看到您设置了正则化参数set in your code snippet. It currently defaults to。由于C是正则化强度的倒数,因此它大大减少了正则化。预计它将消耗更多的迭代次数,并可能导致模型过度拟合。

5)我没想到更高的C=100000会降低您的准确性。解算器在发散而不是收敛。数据可能无法缩放或随机状态不固定,或者容差max_iter(默认值为1e-4)变高。

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