趋近智
这个实践练习将引导你配置一个基础的机器学习训练脚本,使用 MLflow Python API 来记录参数、指标和模型工件。它说明了 MLflow 追踪的应用。一个来自 scikit-learn 的常见示例有助于将重心保持在追踪过程上。
请确保你已安装 MLflow 和 scikit-learn (pip install mlflow scikit-learn)。
首先,我们来看看一个在 Iris 数据集上训练逻辑回归模型,但没有使用 MLflow 追踪的简单脚本。这作为我们的起点。
# baseline_train.py
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义模型参数(这些是我们将来会追踪的)
solver = 'liblinear'
C = 1.0 # 正则化强度的倒数
random_state = 42
# 训练模型
model = LogisticRegression(solver=solver, C=C, random_state=random_state)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Parameters:")
print(f" solver: {solver}")
print(f" C: {C}")
print(f" random_state: {random_state}")
print(f"Metrics:")
print(f" Accuracy: {accuracy:.4f}")
# 在实际情况中,你可能会在此处保存模型
# joblib.dump(model, 'model.joblib')
运行这个脚本 (python baseline_train.py) 只是将参数和最终准确率打印到控制台。如果你用不同的参数再次运行它,除非你手动记录它们,否则之前的结果会丢失。这正是 MLflow 要解决的问题。
现在,我们来修改脚本以使用 MLflow 追踪。
import mlflow 和 import mlflow.sklearn。with mlflow.start_run(): 块来封装训练和评估逻辑。在此块中记录的所有内容都将属于一个 MLflow 运行。mlflow.log_param() 来记录此次特定运行所用的超参数(例如 solver、C、random_state)。mlflow.log_metric() 来记录评估结果(例如 accuracy)。mlflow.sklearn.log_model() 将训练好的 scikit-learn 模型保存为与该运行相关的工件。此函数处理序列化并保存必要的元数据。以下是修改后的脚本:
# mlflow_train.py
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 导入 MLflow
import mlflow
import mlflow.sklearn
# 可选:设置实验名称。如果不存在,则会创建。
# 如果不设置,运行将进入“默认”实验。
mlflow.set_experiment("Iris Classification")
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义模型参数
solver = 'liblinear'
C = 1.0
random_state = 42
# 开始一个 MLflow 运行
with mlflow.start_run():
print("开始 MLflow 运行...")
# 记录参数
mlflow.log_param("solver", solver)
mlflow.log_param("C", C)
mlflow.log_param("random_state", random_state)
print(f" 已记录参数:solver={solver}, C={C}, random_state={random_state}")
# 训练模型
model = LogisticRegression(solver=solver, C=C, random_state=random_state)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
# 记录指标
mlflow.log_metric("accuracy", accuracy)
print(f" 已记录指标:accuracy={accuracy:.4f}")
# 记录训练好的模型工件
# 'model' 是运行工件存储中的目录名称
# 'iris_logistic_regression' 是注册模型的名称(可选,用于模型注册表)
mlflow.sklearn.log_model(model, "model", registered_model_name="iris_logistic_regression")
print(" 已记录模型工件")
print("MLflow 运行完成。")
print("脚本执行完成。")
现在,从终端执行配置好的脚本:
python mlflow_train.py
你将看到与基准脚本相似的输出,但会附带额外的消息,表明 MLflow 正在记录。请注意,默认情况下,MLflow 会在你运行脚本的同一位置创建一个本地 mlruns 目录。这个目录保存了你运行的元数据和工件。
为了直观地查看和比较你的运行,启动 MLflow 追踪 UI。在终端中进入包含 mlruns 文件夹的目录,然后运行:
mlflow ui
这个命令会启动一个本地 Web 服务器,通常在 http://127.0.0.1:5000。在你的 Web 浏览器中打开此 URL。
在 UI 中,你应该看到:
mlflow.set_experiment,则为“Default”)。solver、C 和 random_state 值。accuracy 分数将显示出来。如果你记录了随时间变化的指标(例如,每个周期的损失),你还可以查看图表。model.pkl、conda.yaml、python_env.yaml 和 MLmodel)。追踪多次运行会带来真正的益处。尝试修改 mlflow_train.py 脚本:
C 的值(例如 C = 0.5)。solver(例如 solver = 'saga',但请注意,你可能需要更多的 max_iter 才能收敛)。每次更改后再次运行脚本。然后,刷新 MLflow UI。你将看到表格中列出了新的运行。你现在可以:
params.C = "0.5" 或 metrics.accuracy > 0.95)。这个实践练习展示了 MLflow 追踪的核心流程:配置你的训练代码以记录参数、指标和工件,然后使用 UI 来查看和比较你的实验。采纳这种做法,你就能创建了一个系统化的模型工作记录,显著提高了可复现性,并让有效地迭代模型变得更简单。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造