You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提升Scikit-learn多项逻辑回归训练速度的方法咨询

关于Scikit-learn逻辑回归训练耗时过长的问题与提速建议

首先,针对你的情况:21613×19的数据集训练耗时2小时确实偏久,这个规模的数据集正常训练应该在数分钟到十几分钟内完成,大概率是参数设置或预处理不到位导致的,下面是具体的优化建议:

1. 优先对特征做标准化处理

逻辑回归的求解器(尤其是基于梯度的newton-cg、lbfgs、sag/saga)对特征尺度非常敏感。如果你的特征数值范围差异很大,会导致求解器收敛速度极慢。建议用StandardScaler做标准化:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# 之后用标准化后的特征训练模型
clf.fit(X_train_scaled, y_train)

2. 更换更高效的求解器

你当前使用的newton-cg求解器在多分类场景下的效率不如一些现代求解器,推荐尝试以下两种:

  • saga:适合大规模数据集,支持L1/L2正则,多分类场景下收敛速度快,是当前最推荐的选项之一
  • sag:类似saga,但仅支持L2正则,速度也比newton-cg快很多

修改代码示例:

clf = LogisticRegression(solver='saga', multi_class='multinomial', n_jobs=-1)
clf.fit(X_train_scaled, y_train)

3. 开启并行计算

LogisticRegression的n_jobs参数可以指定使用的CPU核心数,设置为-1会利用所有可用核心,对于多分类任务能大幅缩短训练时间,上面的示例已经包含了这个参数。

4. 调整迭代与收敛参数

  • 检查max_iter:默认是100,如果模型一直不收敛会持续迭代,可适当增大(比如设为1000),但如果预处理到位,其实不需要太大的迭代次数
  • 调整tol:设置更大的容忍度(比如从默认的1e-4改为1e-3),可以让模型提前停止迭代,牺牲一点精度换取速度

示例:

clf = LogisticRegression(solver='saga', multi_class='multinomial', n_jobs=-1, max_iter=1000, tol=1e-3)

5. 检查数据质量

  • 确认数据集没有冗余特征:比如高度相关的特征,可以用相关性分析(如corr())剔除重复或高度相关的特征,减少计算量
  • 确保数据类型合适:将特征矩阵转换为float32类型(如果当前是float64),可以减少内存占用,提升计算速度:
X_train = X_train.astype('float32')

最后,按照上面的步骤调整后,你的训练时间应该能降到几分钟以内。如果还是有问题,可以检查是否有其他代码逻辑拖慢了训练(比如fit前的不必要计算)。

内容的提问来源于stack exchange,提问作者Joel2342

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:52:30