使用Scikit-learn包的ProgressBar
在 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=1或verbose=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等第三方库,它们提供了极高的灵活性和丰富的功能。
- 点赞
- 收藏
- 关注作者
评论(0)