
机器学习操作(MLOps)越来越成为成功的商业数据科学项目实施的关键。它是一种协助公司和业务主管产生长期价值并降低与数据科学、机器学习和人工智能工作相关的风险的方法。MLOps是指一套在生产中部署ML模型的方法和工具。本文将重点介绍用COMET执行ML操作。以下是将要涉及的主题。
内容表
- 关于MLOps的小插曲
- 使用COMET的ML操作
- 安装COME
- 连接到服务器
- 导入库
- 读取和预处理数据
- 构建和测试模型
- 注册模型
MLOps指的是机器学习生命周期管理的标准化和简单化。让我们对MLOps有一个高层次的概述。
关于MLOps的小插曲
MLOps是DevOps和机器学习的混合体。DevOps指的是一系列程序,旨在降低产品交付所需的时间,缩小软件开发和运营之间的差距。持续集成(CI)和持续交付(CD)是两个主要的DevOps概念。
-
持续集成是软件开发公司试图定期整合开发者团队创建的代码的做法。因此,他们定期测试他们的代码,并根据测试中发现的故障和漏洞做出微小的调整。因此,软件开发过程的周期被缩短。
-
持续交付是一种方法,在这种方法中,正在开发的软件的新版本被不断安装,用于测试、评估,并最终用于生产。通过这种方法,由持续集成产生的软件更新与升级和新功能可以相当快地到达终端用户。
MLOps使用DevOps概念和方法来实现机器学习操作的自动化。虽然它看起来很容易,但它并不容易。这是因为机器学习模型不是独立的,而是一个更大的软件系统的一部分,不仅包括代码,还包括数据。因为数据总是在变化,模型不断地被要求从新的数据中重新训练。
因此,MLOps除了CI和CD之外,还提供了一种新的方法--持续训练(CT),以根据需要自动重新训练模型。从上述内容可以看出,MLOps远比DevOps涉及更多,包括涉及数据和模型的额外操作。
这里有一份关于MLOps和DevOps的详细比较分析,可以阅读。
这里有一份关于MLOps开始的详细指南,以及理解它对数据科学生命周期的影响,可以在这里阅读。
使用COMET的ML操作
Comet是一个MLOps平台,它为机器学习模型提供了全堆栈的可观察性,并能根据模型性能设置生产性能基线。Comet连接器连接机器学习指标,可以在整个机器学习生命周期内对数据进行持续监控。这确保了最佳的模型性能,让你获得卓越的商业成果。
在这篇文章中,我们将训练、测试和注册一个机器学习模型,该模型将根据各种特征对病人的偏头痛类型进行分类。
一旦你在彗星网站注册,就可以连接到彗星服务器了。注册完成后,重定向的页面会是这样的。

印度分析杂志
一个新的项目可以通过点击 "新项目 "按钮来创建,只需定义项目的名称和项目的描述。这个项目也可以在py笔记本的帮助下创建。这个过程将在文章中进一步演示。
安装彗星
! pip install comet_ml
连接到服务器
为了连接到服务器,在comet网页上的profile下的设置中生成一个API密钥。在账户设置的第二块,有一个选项可以生成一个API密钥并将其复制到剪贴板上。
from comet_ml import Experiment
experiment = Experiment(
api_key="Paste-you-own-api-key",
project_name="migraine",
workspace="Write-your-own-username",
auto_metric_logging=True,
auto_param_logging=True,
log_graph=True,
auto_metric_step_rate=True,
parse_args=True,
)

印度分析杂志
项目所需的日志可以在连接到服务器时打开,只需在 "实验 "中提到它们。
导入必要的库
import numpy as np
import pandas as pd
import plotly.express as px
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score, precision_score, recall_score, confusion_matrix
读取和预处理数据
data=pd.read_csv('migraine.csv')
data[:5]

印度分析杂志
数据中没有缺失值,而且除了目标变量 "类型 "之外,它已经被标记为编码了。在进入预处理之前,让我们先看看目标变量和它的分类。
def pie_chart (data_val,title):
fig = px.pie(data, values=data_val, names='Type',
title=title,
hole=0.5,
color_discrete_sequence=px.colors.sequential.RdBu)
return fig.show()
pie_chart('Vomit','Patients with vomiting problem categorized by the type of migraine')

印度分析杂志
数据显示,几乎47%的患者在偏头痛期间会呕吐。该类型被归类为有先兆的偏头痛。同样的,还可以找到更多有趣的事实,把这些留给你。
需要对目标变量进行编码,这里应该使用标签编码器,而不是单热编码或虚拟变量,因为这是一个多类问题。
encoder=LabelEncoder()
data['Type_encode']=encoder.fit_transform(data['Type'])
将训练用的数据分成70:30的比例。
X=data.drop(['Type','Type_encode'],axis=1)
y=data['Type_encode']
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.30, random_state=42)
建立模型
对于这篇文章,一个随机森林分类器会做这个工作。
rf = RandomForestClassifier()
rf.fit(X_train,y_train)
prediction=rf.predict(X_test)
f1 = f1_score(y_test, prediction,average='weighted')
precision = precision_score(y_test, prediction,average='weighted')
recall = recall_score(y_test, prediction,average='weighted')
我们现在将把这些指标记录到彗星服务器上
params={"random_state":42,
"model_type":"random forest classifier",
"stratify":True
}
metrics = {"f1":f1,
"recall":recall,
"precision":precision
}
experiment.log_dataset_hash(X_train)
experiment.log_parameters(params)
experiment.log_metrics(metrics)
experiment.log_confusion_matrix(convert_y_test,convert_prediction)
有两种方法可以记录这些度量。
- 通过将数值存储在一个变量中,然后创建一个字典,将该字典作为输入给'experiment.log_meterics()'。
- 另一种是直接在实验记录函数中给出数值
这两种方法都已经说明了。指标f1_score、精度和召回率是用第一种方法记录的,混淆矩阵是用第二种方法记录的。
一旦数值被记录下来,就可以通过访问网页来查看这些过程。进入实验面板下的项目,可以查看所有当前运行的实验。

印度分析杂志

印度分析杂志
只要使用下面的代码,就可以在笔记本中查看仪表板。
experiment.display()
人们也可以在服务器上保存图表。让我们来看看根据随机森林分类器来描述特征重要性的图表。
imp_feature = pd.Series(rf.feature_importances_, index=X.columns)
plt.figure(figsize=(15, 8))
plt.title('Feature Importance of Random Forest')
imp_feature.sort_values(ascending=False).plot(kind='barh')
plt.savefig('/content/drive/MyDrive/Datasets/feature_importance.jpeg')
plt.show()

印度分析杂志
该图表需要保存在驱动器上,然后通过使用记录方法上传到服务器上。它可以在仪表盘的图形部分下查看。
experiment.log_image('/content/drive/MyDrive/Datasets/feature_importance.jpeg')
注册模型
保存训练好的模型,并在注册表部分下注册该模型。本文将使用pickle包来保存模型。
import pickle
filename = 'random_forest_model.sav'
pickle.dump(rf, open(filename, 'wb'))
转储功能将根据描述的名称和描述的位置保存模型。
一旦模型被保存,将其上传到彗星服务器。
experiment.log_model('Random forest classifier v1',"/content/random_forest_model.sav")
然后到实验面板的 "资产和工件 "部分。在模型的资产部分,保存的模型会出现。要注册该模型,点击加号图标并注册该模型。现在,该模型可以被监控。

印度分析杂志

印度分析》杂志
最后,通过使用这段代码,存在服务器结束所有的任务。
experiment.end()

印度分析》杂志
结论
MLOps是将ML模型纳入生产的最有效方法。一个完全成熟的MLOps系统,除了在生产中使用ML模型外,还可以通过持续的训练来获得更有效和更真实的ML模型。通过这篇文章,我们已经了解了如何用Comet构建和监控ML操作。