【问题标题】:Python: Logistic regression max_iter parameter is reducing the accuracyPython:逻辑回归 max_iter 参数正在降低准确性
【发布时间】:2019-11-26 21:08:03
【问题描述】:

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

当我将 ma​​x_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 iterations.", ConvergenceWarning)" *

【问题讨论】:

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


    【解决方案1】:

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

    需要检查的一些事项:

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

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

    3) 我没有看到任何“max_iterset in your code snippet. It currently defaults to100”(sklearn 0.22)。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-12-22
        • 2014-09-09
        • 1970-01-01
        • 2015-08-10
        • 2018-11-12
        • 2018-10-27
        • 1970-01-01
        • 2012-01-18
        • 2021-12-22
        相关资源
        最近更新 更多