OpenMLOps实战:用Jupyter、MLFlow和Prefect训练你的第一个葡萄酒质量预测模型
【免费下载链接】OpenMLOps项目地址: https://gitcode.com/gh_mirrors/op/OpenMLOps
OpenMLOps是一个强大的开源机器学习运维平台,它集成了Jupyter、MLFlow和Prefect等工具,帮助数据科学家和开发者轻松构建、训练和部署机器学习模型。本文将带你一步步使用OpenMLOps平台,通过Jupyter进行数据处理和模型训练,利用MLFlow跟踪实验结果,并借助Prefect实现工作流自动化,最终完成一个葡萄酒质量预测模型的构建。
准备工作:获取OpenMLOps项目
首先,你需要将OpenMLOps项目克隆到本地环境。打开终端,执行以下命令:
git clone https://gitcode.com/gh_mirrors/op/OpenMLOps克隆完成后,你可以在项目目录中找到丰富的教程和示例资源,我们将在后续步骤中用到这些资源。
数据准备:探索葡萄酒数据集
在开始训练模型之前,我们需要获取并了解用于训练的数据。OpenMLOps的教程中提供了一个葡萄酒质量数据集,包含了多种葡萄酒的理化指标和对应的质量评分。
从图中可以看到,数据集包含了固定酸度、挥发性酸度、柠檬酸、残留糖分等多个特征,以及最后一列的质量评分。我们的目标是根据这些特征预测葡萄酒的质量。
你可以在项目的tutorials/wine-quality.ipynb文件中找到完整的数据分析和预处理代码。
模型训练:使用Jupyter构建预测模型
Jupyter是OpenMLOps平台中用于交互式开发的核心工具。通过Jupyter,你可以方便地编写代码、可视化数据并训练模型。
1. 启动Jupyter环境
按照项目文档中的说明启动Jupyter服务后,创建一个新的Python notebook。首先导入必要的库:
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score from sklearn.model_selection import train_test_split from sklearn.linear_model import ElasticNet import pandas as pd import numpy as np2. 数据获取与预处理
使用以下代码从UCI机器学习数据库获取葡萄酒质量数据:
def fetch_data(): csv_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv" data = pd.read_csv(csv_url, sep=";") return data data = fetch_data() data.head()3. 模型训练与评估
我们使用ElasticNet模型进行训练,并定义评估指标:
def eval_metrics(actual, pred): rmse = np.sqrt(mean_squared_error(actual, pred)) mae = mean_absolute_error(actual, pred) r2 = r2_score(actual, pred) return rmse, mae, r2 def train_model(data, alpha=0.5, l1_ratio=0.5): train, test = train_test_split(data) train_x = train.drop(["quality"], axis=1) test_x = test.drop(["quality"], axis=1) train_y = train[["quality"]] test_y = test[["quality"]] lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42) lr.fit(train_x, train_y) predicted_qualities = lr.predict(test_x) rmse, mae, r2 = eval_metrics(test_y, predicted_qualities) print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio)) print(" RMSE: %s" % rmse) print(" MAE: %s" % mae) print(" R2: %s" % r2)实验跟踪:用MLFlow管理模型训练过程
MLFlow是OpenMLOps中用于实验跟踪和模型管理的重要组件。它可以帮助你记录不同实验的参数、指标和模型结果,方便比较和复现。
1. 创建MLFlow实验
访问MLFlow界面,点击"Create Experiment"按钮,创建一个名为"Wine Quality Prediction"的实验。
2. 修改代码以集成MLFlow
在训练函数中添加MLFlow相关代码,用于记录实验参数、指标和模型:
import mlflow def train_model(data, mlflow_experiment_id, alpha=0.5, l1_ratio=0.5): mlflow.set_tracking_uri("http://mlflow.mlflow:5000") train, test = train_test_split(data) train_x = train.drop(["quality"], axis=1) test_x = test.drop(["quality"], axis=1) train_y = train[["quality"]] test_y = test[["quality"]] with mlflow.start_run(experiment_id=mlflow_experiment_id): lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42) lr.fit(train_x, train_y) predicted_qualities = lr.predict(test_x) (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities) print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio)) print(" RMSE: %s" % rmse) print(" MAE: %s" % mae) print(" R2: %s" % r2) mlflow.log_param("alpha", alpha) mlflow.log_param("l1_ratio", l1_ratio) mlflow.log_metric("rmse", rmse) mlflow.log_metric("r2", r2) mlflow.log_metric("mae", mae) mlflow.sklearn.log_model(lr, "model")3. 运行实验并查看结果
使用不同的参数运行多次实验,然后在MLFlow界面中查看结果:
train_model(data, mlflow_experiment_id=1, alpha=0.3, l1_ratio=0.3) train_model(data, mlflow_experiment_id=1, alpha=0.5, l1_ratio=0.5)从结果中可以清晰地看到不同参数组合下模型的性能指标,帮助你选择最佳模型。
工作流自动化:用Prefect实现模型训练流程
Prefect是OpenMLOps中的工作流管理工具,它可以帮助你自动化机器学习流程,实现定期数据获取、模型训练和评估。
1. 定义Prefect任务
将数据获取和模型训练函数转换为Prefect任务:
from prefect import task @task def fetch_data(): csv_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv" data = pd.read_csv(csv_url, sep=";") return data @task def train_model(data, mlflow_experiment_id, alpha=0.5, l1_ratio=0.5): # 训练模型的代码,同上2. 创建Prefect工作流
定义一个完整的工作流,包含数据获取和模型训练步骤,并设置调度间隔:
from prefect import Flow, Parameter from prefect.schedules import IntervalSchedule from datetime import timedelta schedule = IntervalSchedule(interval=timedelta(minutes=2)) with Flow("train-wine-quality-model", schedule) as flow: data = fetch_data() train_model(data=data, mlflow_experiment_id=1, alpha=0.3, l1_ratio=0.3)3. 部署和运行工作流
将工作流部署到Prefect服务器,它将按照设定的调度自动运行。在Prefect界面中,你可以查看工作流的执行情况和依赖关系。
这个简单的DAG(有向无环图)展示了我们的工作流:先执行数据获取任务,然后执行模型训练任务。
总结与下一步
通过本文的实战教程,你已经学会了如何使用OpenMLOps平台中的Jupyter、MLFlow和Prefect工具来构建一个葡萄酒质量预测模型。你可以在modules/目录中找到更多关于这些工具的配置和部署细节。
下一步,你可以尝试:
- 优化模型参数,提高预测 accuracy
- 探索其他机器学习算法,如随机森林或神经网络
- 学习如何将训练好的模型部署到生产环境,可参考tutorials/deploy-model-seldon.md
OpenMLOps提供了一个完整的机器学习运维生态系统,帮助你从数据探索到模型部署的全流程管理。开始你的机器学习之旅吧!
【免费下载链接】OpenMLOps项目地址: https://gitcode.com/gh_mirrors/op/OpenMLOps
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考