gpt4 book ai didi

python - 迭代次数达到限制的收敛警告 : lbfgs failed to converge (status=1): STOP: TOTAL NO.

转载 作者:行者123 更新时间:2023-12-04 04:27:36 28 4
gpt4 key购买 nike

我有一个由数字和分类数据组成的数据集,我想根据患者的医疗特征预测其不良结果。我为我的数据集定义了一个预测管道,如下所示:

X = dataset.drop(columns=['target'])
y = dataset['target']

# define categorical and numeric transformers
numeric_transformer = Pipeline(steps=[
('knnImputer', KNNImputer(n_neighbors=2, weights="uniform")),
('scaler', StandardScaler())])

categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore'))])

# dispatch object columns to the categorical_transformer and remaining columns to numerical_transformer
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, selector(dtype_exclude="object")),
('cat', categorical_transformer, selector(dtype_include="object"))
])

# Append classifier to preprocessing pipeline.
# Now we have a full prediction pipeline.
clf = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression())])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

clf.fit(X_train, y_train)
print("model score: %.3f" % clf.score(X_test, y_test))
但是,在运行此代码时,我收到以下警告消息:
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
extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)

model score: 0.988
有人可以向我解释这个警告是什么意思吗?我是机器学习的新手,所以对我可以做些什么来改进预测模型有点迷茫。正如您从 numeric_transformer 中看到的,我通过标准化对数据进行了缩放。我也很困惑模型得分是多么高,以及这是好事还是坏事。

最佳答案

警告的意思是它主要说的是:建议​​尝试使求解器(算法)收敛。
lbfgs代表:“有限内存 Broyden-Fletcher-Goldfarb-Shanno 算法”。它是 Scikit-Learn 库提供的求解器算法之一。
有限内存一词仅表示它存储 只有少数 隐式表示梯度近似的向量。
它有更好的收敛在相对较小的数据集上。

但什么是算法收敛?
用简单的话来说。如果求解的误差在非常小的范围内(即几乎没有变化),那么这意味着算法达到了解决方案(不必是最佳解决方案,因为它可能会停留在所谓的“局部最优” ”)。
另一方面,如果错误是 变化明显 (即使误差相对较小[例如在您的情况下分数很好],但每次迭代的误差之间的差异大于某些容差)那么我们说算法没有收敛。
现在,您需要知道 Scikit-Learn API 有时会为用户提供选项来指定算法在以迭代方式搜索解决方案时应采用的最大迭代次数:

LogisticRegression(... solver='lbfgs', max_iter=100 ...)
如您所见,LogisticRegression 中的默认求解器是 'lbfgs',最大迭代次数默认为 100。
最后,请注意,增加最大迭代次数不一定能保证收敛,但肯定会有所帮助!

更新:
根据您在下面的评论,一些可能有助于算法收敛的尝试(在许多中)提示是:
  • 增加迭代次数:如本答案所示;
  • 尝试不同的优化器:看 here ;
  • 扩展您的数据:看 here ;
  • 添加工程功能:看 here ;
  • 数据预处理:看here - use casehere ;
  • 添加更多数据:看 here .
  • 关于python - 迭代次数达到限制的收敛警告 : lbfgs failed to converge (status=1): STOP: TOTAL NO.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62658215/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com