使用Scikit-learn包的ProgressBar

举报
yd_37369233 发表于 2026/09/07 20:04:58 2026/09/07
【摘要】 在 Scikit-learn 中,使用进度条主要有两种官方推荐的方式:一是利用较新版本(1.9+)内置的 ProgressBar 回调,二是使用传统且普遍的 verbose 参数。下面是这两种主流方法的详细介绍和用法示例。 📌 方法一:使用内置的 ProgressBar 回调 (Scikit-learn 1.9+)从 Scikit-learn 1.9 版本开始,官方在 sklearn.ca...

在 Scikit-learn 中,使用进度条主要有两种官方推荐的方式:一是利用较新版本(1.9+)内置的 ProgressBar 回调,二是使用传统且普遍的 verbose 参数。

下面是这两种主流方法的详细介绍和用法示例。

📌 方法一:使用内置的 ProgressBar 回调 (Scikit-learn 1.9+)

从 Scikit-learn 1.9 版本开始,官方在 sklearn.callback 模块中引入了 ProgressBar 回调,提供了一种标准、优雅的进度条显示方式。

1. 环境准备
首先,你需要确保安装了 rich 库,因为 ProgressBar 依赖于它来渲染进度条。

pip install rich

2. 基本用法
使用 ProgressBar 的步骤非常简单,主要分为三步:创建回调实例、注册到模型、训练模型。

from sklearn.callback import ProgressBar
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# 1. 创建 ProgressBar 实例
progress_bar = ProgressBar()

# 2. 创建模型并注册回调
model = LogisticRegression(max_iter=1000)
model.set_callbacks(progress_bar)

# 3. 训练模型,进度条会自动显示
X, y = load_iris(return_X_y=True)
model.fit(X, y)

3. 进阶配置:max_propagation_depth
ProgressBar 接受一个 max_propagation_depth 参数,用于控制进度条在嵌套的评估器(如管道Pipeline或网格搜索GridSearchCV)中显示的深度。

  • max_propagation_depth=1 (默认):只显示最外层评估器的进度条。
  • max_propagation_depth=0:不显示任何进度条。
  • max_propagation_depth=None:显示所有层级的进度条。

示例:在网格搜索 (GridSearchCV) 中使用

from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.callback import ProgressBar

X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=1000)
param_grid = {'C': [0.1, 1, 10]}

# 创建网格搜索实例,并为其注册 ProgressBar
grid_search = GridSearchCV(model, param_grid, cv=3)
grid_search.set_callbacks(ProgressBar(max_propagation_depth=1))

grid_search.fit(X, y)

注意:目前,ProgressBar 回调功能仍处于“实验性”(Experimental)阶段,并非所有评估器都已支持。请查阅官方文档确认你使用的模型是否兼容。

📌 方法二:使用传统的 verbose 参数

这是 Scikit-learn 中最传统、最普遍的方法。许多模型的 fit() 函数或类本身都接受一个 verbose 参数。

  • verbose=0 (默认):不输出任何信息。
  • verbose=1verbose=True:输出简化的进度信息。
  • verbose>1:输出更详细的调试信息。

示例:

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=10000, n_features=20)
# 设置 verbose=1 来显示训练进度
model = GradientBoostingClassifier(n_estimators=100, verbose=1)
model.fit(X, y)

这种方法虽然简单,但不同模型输出的进度信息格式可能不统一,且不一定都是图形化的进度条。

💎 总结与建议

  • 如果你使用的是 Scikit-learn 1.9 或更高版本,并且你的模型支持回调,那么优先推荐使用 ProgressBar。它提供了更统一、更美观的图形化进度条体验。
  • 如果你的 Scikit-learn 版本较旧,或者模型不支持回调,那么使用 verbose 参数是最兼容和直接的选择。
  • 对于更复杂或自定义的训练循环,你仍然可以自由地使用 tqdm 等第三方库,它们提供了极高的灵活性和丰富的功能。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。