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
相关产品推荐
相关产品推荐

