使用Scikit-learn包的ScoringMonitor

举报
yd_37369233 发表于 2026/09/08 20:04:01 2026/09/08
【摘要】 ScoringMonitor 是 Scikit-learn 在 1.9 版本中引入的一个实验性回调类。它主要用于在兼容的估计器(如 LogisticRegression)进行迭代训练时,实时监控并记录指定的评分指标。 🎯 核心用途:监控训练过程ScoringMonitor 的核心价值在于,它能让你洞察模型在训练过程中的性能变化,而不仅仅是看最终结果。这对于调试模型、分析收敛情况以及理解不同...

ScoringMonitor 是 Scikit-learn 在 1.9 版本中引入的一个实验性回调类。它主要用于在兼容的估计器(如 LogisticRegression)进行迭代训练时,实时监控并记录指定的评分指标。

🎯 核心用途:监控训练过程

ScoringMonitor 的核心价值在于,它能让你洞察模型在训练过程中的性能变化,而不仅仅是看最终结果。这对于调试模型、分析收敛情况以及理解不同超参数的影响非常有帮助。

📖 基本用法

使用 ScoringMonitor 的流程很直接:

  1. 导入并创建实例:从 sklearn.callback 导入,并指定你想要监控的评分指标。
  2. 注册到估计器:通过估计器的 set_callbacks 方法将其注册。
  3. 训练并获取日志:正常调用 fit 方法训练模型,之后通过 ScoringMonitorget_logs() 方法获取记录的数据。

代码示例

from sklearn.callback import ScoringMonitor
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression

# 1. 准备数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=0)

# 2. 创建 ScoringMonitor 实例,监控 'accuracy' 指标
scoring_monitor = ScoringMonitor(scoring="accuracy")

# 3. 创建模型并注册回调
logreg = LogisticRegression(solver="lbfgs")
logreg.set_callbacks(scoring_monitor)

# 4. 训练模型
logreg.fit(X, y)

# 5. 获取并查看日志
log = scoring_monitor.get_logs().data_as_pandas
print(log[["task_name", "task_id", "accuracy"]])

🔧 高级用法:监控复合模型与网格搜索

ScoringMonitor 的强大之处在于它能与 PipelineGridSearchCV 等复合估计器协同工作。

  • 监控 Pipeline:可以将其注册到 Pipeline 中的某个具体步骤(如 LogisticRegression)上,以监控该步骤内部的行为。
  • 监控 GridSearchCV:当与 GridSearchCV 结合使用时,可以为每一组超参数组合的每一次交叉验证折叠都记录下完整的评分变化轨迹。

复合场景示例

import numpy as np
from sklearn.callback import ScoringMonitor
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = make_classification(n_samples=1000, n_features=100, random_state=42)

# 监控多个指标
scoring_metrics = ["d2_log_loss_score", "accuracy", "average_precision"]
scoring_monitor = ScoringMonitor(scoring=scoring_metrics)

# 创建 Pipeline,并将 ScoringMonitor 注册到 LogisticRegression 步骤上
model = make_pipeline(
    StandardScaler(),
    LogisticRegression(solver="lbfgs", max_iter=1000).set_callbacks(scoring_monitor),
)

# 定义超参数网格并进行网格搜索
param_grid = {"logisticregression__C": np.geomspace(0.01, 100, 3)}
grid_search = GridSearchCV(model, param_grid, cv=5, scoring=scoring_metrics, refit=scoring_metrics[0])

# 执行网格搜索
grid_search.fit(X, y)

# 获取日志 (这会包含所有参数组合和CV折的详细迭代记录)
# logs = scoring_monitor.get_logs(select="all")

⚠️ 重要注意事项

  • 实验性功能:此API仍在积极开发中,未来版本可能会有变动,且目前仅部分估计器支持。
  • 支持的估计器:目前已知支持回调的估计器包括 LogisticRegressionStandardScalerPipeline 以及 GridSearchCV 等搜索类。
  • 日志查看:训练完成后,使用 get_logs() 方法获取日志。返回的 ScoringMonitorLog 对象提供了 data (列表形式) 和 data_as_pandas (DataFrame形式) 两种数据接口,便于分析。

💎 总结

ScoringMonitor 是一个用于监控模型训练过程的实用工具。它能帮助你:

  • 分析收敛性:观察损失或评分是否平稳。
  • 调试模型:发现训练过程中的异常。
  • 理解超参数:对比不同参数下的训练动态。

建议从简单的单估计器场景开始尝试,再逐步应用到 PipelineGridSearchCV 等更复杂的场景中。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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