
MLflow 官方示例精读用 statsmodels 训练 OLS 模型并完成自动日志记录【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow本篇技术指南以 examples/statsmodels/README.md 为主线完整讲解如何在 MLflow 中使用 statsmodels 训练一个 OLSOrdinary Least Squares普通最小二乘回归模型并借助 MLflow Tracking 自动记录超参数、MSE 指标与训练好的模型。读完本文你将掌握两种运行方式直接运行 Python 脚本、以 MLflow Project 方式运行、--inverse-method参数的底层含义QR 分解 vs Moore-Penrose 伪逆以及mlflow.statsmodelsflavor 自动日志autolog背后真正记录了哪些内容。示例概览一个 4 文件的完整可运行示例该示例位于仓库的 examples/statsmodels 目录共包含 4 个文件文件作用train.py示例主程序生成合成数据、训练 OLS 模型、启用 autolog 并记录 MSE 指标MLproject将示例包装为 MLflow Project 的元数据文件声明参数与入口命令python_env.yaml项目运行时依赖mlflow、statsmodels、scikit-learnREADME.md官方使用说明本文的骨架python_env.yaml只声明了三项 pip 依赖其中scikit-learn是为了计算mean_squared_error指标statsmodels是训练主依赖mlflow提供 Tracking 与 autolog 能力。合成数据生成OLS 的最小可行实验在 train.py 中示例用 numpy 构造了一个带二次项和噪声的回归问题np.random.seed(9876789) nsamples 100 x np.linspace(0, 10, 100) X np.column_stack((x, x**2)) beta np.array([1, 0.1, 10]) e np.random.normal(sizensamples) X sm.add_constant(X) y np.dot(X, beta) e自变量矩阵X由线性项x、二次项x**2和一列常数项截距构成形状为(100, 3)真实系数beta [1, 0.1, 10]分别对应截距、一次项与二次项因变量y X · beta e其中e为标准正态噪声固定随机种子9876789保证结果可复现——这一数据生成逻辑与仓库测试夹具 tests/statsmodels/model_fixtures.py 中的ols_model()完全一致测试与示例共用同一套数据便于对照验证。随后执行ols sm.OLS(y, X) model ols.fit(methodargs.inverse_method)即用 statsmodels 的sm.OLS拟合最小二乘模型method参数由命令行传入。直接运行--inverse-method参数的两种求逆策略README 给出的第一种运行方式是直接执行脚本python train.py --inverse-method qr--inverse-method控制的是求解最小二乘问题时逆矩阵的计算方式可选值为qr或pinv默认其参数定义见 train.py取值默认值求解原理pinv✅使用 Moore-Penrose 伪逆np.linalg.pinv求解最小二乘问题qr❌使用 QR 分解np.linalg.qr求解两种方法的取舍要点pinv伪逆法数值上更稳健尤其适合矩阵接近奇异病态的情况因为它基于奇异值分解能自动处理秩亏矩阵代价是计算开销略高qrQR 分解法计算效率更高、内存占用更少适合数据规模较大且矩阵良态的场景但在处理近乎奇异的矩阵时数值稳定性不如伪逆。README 明确建议读者两种方法都试一遍甚至可以省略--inverse-method参数此时自动回落到默认值pinv。这正是 MLflow 实验跟踪的典型使用场景通过多次运行对比不同求解策略下模型的指标表现。由于超参数与指标都会被自动记录你可以在 MLflow UI 中直接横向对比qr与pinv两批运行的结果。以 MLflow Project 方式运行README 提供的第二种运行方式是利用 MLproject 将示例作为 MLflow Project 执行mlflow run . -P inverse_methodqrMLproject 中的入口定义如下name: statsmodels-example python_env: python_env.yaml entry_points: main: parameters: inverse_method: {type: str, default: pinv} command: | python train.py \ --inverse-method{inverse_method}与直接运行相比Project 方式有两处差异参数以-P形式传入且使用下划线风格inverse_method与命令行脚本中的连字符风格--inverse-method由入口定义自动映射环境自动管理MLflow 会读取python_env.yaml创建或复用Python 环境并安装mlflow、statsmodels、scikit-learn再执行命令因此无需预先手动装好全部依赖。用 MLflow UI 查看实验对比无论以哪种方式运行都可以启动 MLflow 追踪服务器查看实验mlflow server随后在浏览器中打开默认地址即可看到每次运行自动记录的超参数fit的入参如inverse_method、method等由 autolog 的log_fn_args_as_params机制自动写入指标autolog 记录的统计指标集合以及示例代码手动记录的mse模型工件以statsmodelsflavor 保存的训练模型。源码视角mlflow.statsmodelsautolog 究竟记录了什么示例的核心是 train.py 中这一行mlflow.statsmodels.autolog()其实现位于 mlflow/statsmodels/init.py从源码可以确认调用autolog()后每次fit会自动记录三类内容1. 白名单统计指标。源码中的_autolog_metric_allowlist见 mlflow/statsmodels/init.py列出了一组回归诊断指标凡是拟合结果对象上存在且为数值的都会被记录包括aic、bic、rsquared、rsquared_adj、fvalue、f_pvalue、ssr、ess、mse_model、mse_resid、mse_total、df_model、df_resid、llf、scale、condition_number、centered_tss、uncentered_tss等共 18 项。测试 tests/statsmodels/test_statsmodels_autolog.py 验证了记录指标集合与白名单完全一致若个别指标求值抛异常autolog 会记录一条Failed to autolog metrics警告而不会中断训练。2. 训练好的模型。每次fit结束后模型会被自动以mlflow.statsmodels.log_model记录为模型工件同时附带model_summary.txt由model.summary().as_text()生成的文本摘要工件。3. 运行管理。autolog 会自动创建/管理 MLflow run并支持registered_model_name自动注册模型版本。示例中mse是手动通过mlflow.log_metrics({mse: mse})记录的——它不在 autolog 白名单内需要自行用sklearn.metrics.mean_squared_error计算并记录这正好演示了「autolog 自动记录 手动补充业务指标」的典型组合写法。进阶模型的保存、加载与 pyfunc 推理示例止步于训练与记录但mlflow.statsmodelsflavor模块文档见 mlflow/statsmodels/init.py还提供完整的模型生命周期 API可直接沿用到你的生产流程保存mlflow.statsmodels.save_model(model, path)将模型序列化为model.statsmodels文件同时生成MLmodel元数据与requirements.txt、conda.yaml等环境文件见 mlflow/statsmodels/init.py。remove_dataTrue可在保存前清空长度为nobs的原始数据数组以缩小体积——当模型工件超过 100 MB 时autolog 会提示改用remove_dataTrue手动记录以降低存储开销加载mlflow.statsmodels.load_model(runs:/run_id/model)支持本地路径、s3://、runs:/等 URI 直接加载回 statsmodels 的Results对象pyfunc 推理flavor 同时注册了mlflow.pyfunc加载入口可通过通用 pyfunc 接口做批量推理与部署。需要说明的是该 flavor 依赖 pickle 反序列化因此默认受安全限制若未处于受信任的 Databricks 环境中加载时会要求显式设置环境变量MLFLOW_ALLOW_PICKLE_DESERIALIZATIONtrue才允许反序列化见 mlflow/statsmodels/init.py。可验证性与测试佐证本示例的正确性由仓库测试体系背书相关测试文件可直接对照学习tests/statsmodels/model_fixtures.py 提供 13 种 statsmodels 模型夹具OLS、GLS、WLS、GLM、ARIMA、GEE 等ols_model()与示例共享相同的合成数据生成逻辑tests/statsmodels/test_statsmodels_autolog.py 覆盖 autolog 的指标白名单、参数记录、摘要工件、模型注册、异常恢复test_statsmodels_autolog_works_after_exception等行为tests/statsmodels/test_statsmodels_model_export.py 验证save_model/load_model的保存加载往返一致性。快速上手小结进入示例目录后先以默认方式运行一次python train.py等价于--inverse-method pinv再用 QR 分解运行一次python train.py --inverse-method qr或以 Project 方式运行mlflow run . -P inverse_methodqr启动mlflow server打开 UI对比两次运行的rsquared、aic、mse等指标直观体会求解策略对拟合结果的影响需要复用模型时用mlflow.statsmodels.load_model加载或借助 pyfunc 接口接入部署流程。通过这个示例你可以将「statsmodels 建模 MLflow 跟踪 自动日志」的组合模式直接迁移到自己的回归、时间序列或广义线性模型项目中。【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考