Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >明月机器学习系列025:机器学习建模实验的最佳实践

明月机器学习系列025:机器学习建模实验的最佳实践

作者头像
明月AI
发布于 2021-10-28 02:36:14
发布于 2021-10-28 02:36:14
97800
代码可运行
举报
文章被收录于专栏:野生AI架构师野生AI架构师
运行总次数:0
代码可运行

我们平时使用scikit-learn做机器学习建模,主要是实验环境是notebook(jupyter),有些问题就像牛皮癣一样,很难去除,例如:

1.很难跟踪实验

机器学习算法有几十个可配置参数,无论您是单独工作还是团队工作,都很难跟踪哪些参数,代码和数据进入每个实验以生成模型。

2.很难重现结果

如果没有详细的跟踪,团队往往难以获得相同的代码再次工作。无论您是要回想自己之前的工作,还是需要向客户展示你的工作,都是一个麻烦事情。

3. 管理混乱

无论是参数,还是模型,过段时间就会忘记哪个跟哪个对应了。别的同事如果想接手你的工作,也很难理解你的工作。

这些问题如果完全使用在线的可视化建模工具其实可以解决,但是可视化的建模工具又有一个大麻烦,就是很不灵活,如果我们在建模的过程中使用了别的算法包怎么办,另外数据清洗也很难集成。其实我们需要一个能方便进行参数和指标管理的工具,而数据清洗和训练过程又依然是能自由进行的工具。

没错,我们需要的是Mlflow,而且是和Notebook结合使用。

启动Mlflow跟踪界面


我们先安装Mlflow,先新建一个Notebook文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装mlflow
!pip install mlflow

成功之后,我们就可以启动一个跟踪界面了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 只是本机访问
!mlflow ui

# 需要给其他人访问
!mlflow ui --host 0.0.0.0

是否需要增加host参数,就看自己的需要,启动之后,默认的端口是5000。这样你就能通过浏览器进行访问:http://localhost:5000/

你看到的界面大概如下:

第一次进来是空白的,当你训练模型时进行记录之后,刷新页面才能看到数据。

新建实验


一次实验你可以理解为一个待建模解决的问题等,创建很简单,只需要一个名字:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import mlflow

mlflow.create_experiment('Boston_Housing_Price')

注意:如果该实验名字已经存在,则会报错,不过并不会影响。

执行完之后,在当前目录下会自动创建一个目录“mlruns”。

训练模型


我们新建一个Notebook文件来做模型训练。

每训练一次模型对应一个Mlflow中的一次run(运行),而在run的过程中,我们就能根据需要记录相应的环境参数或者训练参数等,训练完成之后,再将模型指标记录起来,以后跟踪就简单了。

一个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.linear_model import LinearRegression as lr
from sklearn.metrics import mean_squared_error

# 开始一次运行
with mlflow.start_run():
    # 训练模型
    mlflow.log_param("algo", 'lr')        # 使用的算法
    mlflow.log_param("normalize", True)   # 训练参数

    model = lr(normalize=True)
    model.fit(train_x, train_y)
    
    pred_y = model.predict(train_x)
    print("训练误差:", mean_squared_error(train_y, pred_y))
    mlflow.log_metric("train_mse", mean_squared_error(train_y, pred_y))

    pred_y = model.predict(test_x)
    print("测试误差:", mean_squared_error(test_y, pred_y))
    mlflow.log_metric("test_mse", mean_squared_error(test_y, pred_y))

注意:上面的代码省略了数据清洗和划分的步骤。

上面将算法名称也作为一个参数进行记录,这样方便以后对比不同算法的效果。用于记录的函数就两个:

  • log_param: 记录需要追踪的参数
  • log_metric: 记录需要追踪的指标

而使用不同的参数和算法,只需要不断重复上面的步骤即可,mlflow会自动帮我们追踪对应的参数和指标。只要刷新mlflow的追踪界面:

我们可以看到,每一次训练时所使用的参数和相应的指标,妈妈再也不用担心你会忘记了,和数据清洗及建模过程几乎无痛对接。而且还能对指标进行排序,能根据参数值进行筛选,非常的人性化。

保存与加载模型


在一次run的过程中,调用接口保存模型即可,如果是sklearn可以如此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import mlflow.sklearn

# 第二个参数是相对路径:models
# 实际存储路径类似这样的:./mlruns/1/dfb212c414fc487d886803d84b1f1ba8/artifacts/models/model.pkl
mlflow.sklearn.log_model(model, "models")

模型保存了之后,在需要的时候,加载出来即可,不过加载模型需要先找到运行ID:

上面红色圈住的即是运行ID。有ID即可加载模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# API:https://mlflow.org/docs/latest/python_api/mlflow.sklearn.html#mlflow.sklearn.load_model
# runs:/<mlflow_run_id>/run-relative/path/to/model
model = mlflow.sklearn.load_model('runs:/429083d2e8b34b0585b2e2fff30be28d/models')

uri的语法,可以看接口文档,有比较详细的说明。

团队MLflow


在一个团队中实践MLflow,其实也是很简单,先在服务器端启动mlflow ui,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 对应的Dockerfile:
# https://github.com/IBBD/dockerfile-python/blob/master/python3/mlflow.Dockerfile
mlflow ui --host 0.0.0.0

然后只需要在开始创建或者设置实验之前,执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mlflow.set_tracking_uri("http://192.168.0.5:5000/")

后面的就一样了,不过保存模型的时候,只会保存在本地,而不会保存到服务器上。

基于MLflow的最佳实践流程


把上面梳理一下,整理成一个流程:

在模型指标能满足客户的需求,这时应该将实验的过程数据下载下来,并最优的模型交付给客户,我们自然也是需要做好备份的。

我们将MLflow作为团队公共的机器学习实验的参数与指标的追踪与管理平台,方便追踪和重现实验结果。而基于统一的平台,也方便大家进行交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习之线性回归(最小二乘法手写+sklearn实现)
这部分内容在我的CSDN博客中已经有提到,算是比较基础的部分。现在搬到公众号上,不能再像CSDN上那样简略,我尽量把它解释得通俗易懂一点。
Cyril-KI
2022/07/29
5060
机器学习之线性回归(最小二乘法手写+sklearn实现)
Python机器学习教程—回归模型的评估与封装
在之前已介绍了线性回归的模型算法,那么有了模型之后,如何去评估这个模型的效果究竟是好还是差呢?而如果得到一个效果较好的模型又如何去将其封装,方便他人使用呢?这需要具备回归模型的评估与封装的知识。
丹牛Daniel
2022/11/18
7350
Python机器学习教程—回归模型的评估与封装
【玩转 Cloud Studio】12行代码,入门机器学习
很多人问过我:“你一个文科生,究竟是怎么自学入门‘机器学习、深度学习’这种高深莫测的东西的?并且拿到2次全国数据分析大赛亚军的?”
向瑶函
2022/08/19
1.5K3
【玩转  Cloud Studio】12行代码,入门机器学习
一个完整的销售预测数据挖掘实战案例
沃尔玛是美国领先的零售商之一,他们希望能够准确预测销售和需求,因为一些事件和节假日可能会影响每天的销售额。目前,他们有 45 家商店的销售数据,但由于机器学习算法的不适用,他们面临着不可预见的需求和库存短缺的挑战。理想情况下,一种合适的机器学习算法应该能够准确预测需求,并考虑到包括 CPI、失业指数等在内的经济状况因素。
数据STUDIO
2024/07/24
5210
一个完整的销售预测数据挖掘实战案例
机器学习—— 机器学习运维(MLOps)
随着机器学习技术的日益成熟,如何高效地将模型部署到生产环境并持续维护,成为许多企业关注的核心问题。MLOps(机器学习运维) 应运而生,它结合了传统的DevOps理念和机器学习的独特需求,旨在通过自动化和协作提高模型的开发、部署和监控效率。
六点半就起.
2024/10/18
3500
机器学习—— 机器学习运维(MLOps)
机器学习常用算法-线性回归算法
概述 有时候我们需要预测连续值的映射关系,比如房价预测问题。不想之前的是几个类别,它的输出值是实数。这个时候一般通过线性回归算法进行拟合。 线性回归 h_\theta(x)=\theta_0+\theta_1x 上面这个例子是针对数据集x和y,预测函数根据数据输入x会预测出h(x),我们的目的是找出一个合适θ参数值,是的预测值h(x)和y值的整体误差最小。我们一般通过均方差成本函数来衡量模型对训练样本拟合的好坏程度。如下: J(\theta)=J(\theta_0,\theta_1)=\frac 1{2
吕海峰
2018/06/13
7090
【机器学习】使用MLflow管理机器学习模型版本
在机器学习项目中工作通常需要大量的实验,例如尝试不同的模型、特征、不同的编码方法等。
黄博的机器学习圈子
2021/02/12
3.1K0
【机器学习】使用MLflow管理机器学习模型版本
Scikit-learn机器学习建模的万能模板!
【导读】大家好,我是泳鱼。一个乐于探索和分享AI知识的码农!今天的这篇文章带大家轻松get机器学习建模方法~
算法进阶
2023/09/15
2780
Scikit-learn机器学习建模的万能模板!
使用Python实现深度学习模型进行智能可再生能源优化
在现代能源管理中,优化可再生能源的利用是至关重要的。本文将介绍如何使用Python和深度学习技术构建一个智能可再生能源优化模型,并通过代码示例详细说明该过程。
Echo_Wish
2024/10/22
1510
使用Python实现深度学习模型进行智能可再生能源优化
波士顿房价预测案例---多元线性回归【机器学习】
我们采用波士顿房价预测数据集进行回归任务分析。数据集分为训练集和测试集,训练集可用于训练回归模型,测试集需要进行预测。
来杯Sherry
2023/05/25
6290
python 超全sklearn教程,数据挖掘从入门到入坑
参考链接: 使用Scikit-Learn在Python中进行embedding/投票分类
用户7886150
2021/01/17
1.7K0
[机器学习|理论&实践] 机器学习在体育训练优化中的应用
体育训练一直是追求优秀运动表现的关键。随着机器学习技术的迅速发展,它在体育训练中的应用为教练员和运动员提供了新的工具,以更科学、更精准地制定训练计划、优化表现,甚至预防运动损伤。本项目旨在深入探讨机器学习在体育训练中的应用,结合实例详细介绍部署过程,同时展望未来发展方向。
数字扫地僧
2024/02/12
3740
一个完美的单细胞亚群随机森林分离器是如何炼成的
虽然两个CD4的T细胞其实大量共享高表达量基因,两个单核细胞也是如此,而CD8和NK也是如此,所以它们的AddModuleScore打分也是有些微混杂,不过最重要的问题是我们的可视化并没有体现出来AddModuleScore打分是否是足够好的分类器。
生信技能树
2022/12/16
5990
一个完美的单细胞亚群随机森林分离器是如何炼成的
机器学习实战之风功率预测
目前机器学习与气象数据的结合已经在实际生产中有了应用,比如风电场风功率预测、光伏功率预测和负荷预测。本文以风功率预测作为一个小栗子: 风功率预测是指以风电场的历史功率、历史风速、地形地貌、数值天气预报、风电机组运行状态等数据建立风电场输出功率的预测模型,以风速、功率或数值天气预报数据作为模型的输入,结合风电场机组的运行状态及运行工况,得到风电场未来的输出功率,预测时间尺度包括短期预测和超短期预测,目的是上报国家电网,利于国家电网调度。目前主流方案是结合数值天气预报和机器学习算法(LSTM、SVM等)对风功率进行时序预测,包含超短期预报(未来4个小时共16个时刻)和短期预报(未来三天共288个时刻)。 本文主要利用WRF的气象要素预报数据和LSTM算法进行风功率预测。
MeteoAI
2019/07/22
6.2K8
机器学习速成第二集——监督学习之回归+数据处理(实践部分)!
现在我们有了清理过后的数据,可以开始构建机器学习模型了。这里我们将使用线性回归模型作为示例。
用户11315985
2024/10/16
1610
机器学习速成第二集——监督学习之回归+数据处理(实践部分)!
MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
本来按照这个MLFlow教程(MLflow系列1:MLflow入门教程(Python)),找台机器跑起来没啥问题; 不过,看到项目的github有Dockerfile那必须上啊! 然后就被各类报错虐了一下午。。
悟乙己
2021/12/07
2.1K0
MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
【机器学习】机器学习与时间序列分析的融合应用与性能优化新探索
时间序列分析是统计学和机器学习中的一个重要领域,旨在对时间序列数据进行建模和预测。时间序列数据在金融市场预测、气象预报、经济指标分析和工业设备监测等领域广泛存在。随着深度学习技术的发展,机器学习在时间序列分析中的应用越来越广泛。本文将详细介绍机器学习在时间序列分析中的应用,包括数据预处理、模型选择、模型训练和性能优化。通过具体的案例分析,展示机器学习技术在时间序列分析中的实际应用,并提供相应的代码示例。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwD2I0rO-1720755496490)(https://i-blog.csdnimg.cn/direct/d229ab472d8148b1b1725b178cbe25a0.png =700x)]
哈__
2024/07/15
4160
神经网络学习到的是什么?(Python)
神经网络(深度学习)学习到的是什么?一个含糊的回答是,学习到的是数据的本质规律。但具体这本质规律究竟是什么呢?要回答这个问题,我们可以从神经网络的原理开始了解。
算法进阶
2022/06/02
4700
神经网络学习到的是什么?(Python)
【机器学习】在【PyCharm中的学习】:从【基础到进阶的全面指南】
机器学习中的监督学习方法种类繁多,适用于不同类型的任务和数据集。下面详细介绍几种常见的监督学习方法,包括它们的基本原理、适用场景以及优缺点。
小李很执着
2024/07/02
4840
【机器学习】在【PyCharm中的学习】:从【基础到进阶的全面指南】
Feature selection on L1 norms在L1范数下的特征选择
We're going to work with some ideas similar to those we saw in the recipe on Lasso Regression.In that recipe, we looked at the number of features that had zero coefficients.Now we're going to take this a step further and use the spareness associated with L1 norms to preprocess the features.
到不了的都叫做远方
2019/12/19
9510
推荐阅读
相关推荐
机器学习之线性回归(最小二乘法手写+sklearn实现)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验