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

mlflow autolog如何自动记录sklearn测试集ConfusionMatrixDisplay?

核心原因

mlflow.sklearn.autolog()的自动捕获逻辑是绑定在scikit-learn模型fit()执行链路上的:

  • 自动保存的训练集混淆矩阵,是fit流程内部做训练集自校验时生成的产物,属于autolog默认拦截范围
  • fit结束后单独调用ConfusionMatrixDisplay.from_predictions计算测试集结果的代码,完全在autolog的监听链路之外,自然不会被自动上传
  • 代码注释里提到的ConfusionMatrixDisplay导入位置不影响最终结果,不管放在autolog调用前还是后,都无法改变这个捕获逻辑

不要尝试通过给autolog加自定义钩子、打猴子补丁的方式强行监听fit流程外的计算,这类写法不在MLflow官方兼容承诺范围内,版本迭代后很容易失效。

符合官方规范的惯用实现

MLflow官方设计了专门的mlflow.evaluate()接口处理训练后评估的自动日志需求,不需要手动写图片保存、artifact上传的冗余代码,是官方推荐的标准实现方式,完全兼容Databricks托管MLflow环境。

核心修改逻辑如下,原有数据集加载、pipeline定义、autolog开启的代码都可以保留:

# 原有初始化、数据集拆分、pipeline定义、mlflow.sklearn.autolog() 代码保持不变
with mlflow.start_run():
    my_pipeline.fit(train['text'].values, train['class'].values)
    
    # 调用官方评估接口自动记录测试集所有评估产物
    model_uri = mlflow.get_artifact_uri("model")
    mlflow.evaluate(
        model_uri,
        data=test,
        targets="class",
        model_type="classifier",
        evaluator_config={
            "log_model_explainability": False,
            "metric_prefix": "test_",
            "log_confusion_matrix": True
        }
    )

这个实现的优势:

  • 完全符合MLflow设计规范,不需要手动调用savefig、mlflow.log_artifact处理文件
  • 除了测试集混淆矩阵,还会自动记录测试集准确率、精确率、召回率、ROC曲线、PR曲线等所有分类任务常用指标和可视化产物
  • 所有自动记录的产物会和训练集指标统一展示在MLflow前端的评估板块,不需要单独在工件目录翻找文件
  • 和你当前使用的sklearn==1.0.1版本完全兼容

注意:使用该能力需要保证MLflow版本不低于1.23.0,Databricks Runtime 11.x及以上版本预装的MLflow默认满足该版本要求,低版本Runtime手动升级MLflow包即可使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:36:25