部署你的第一个机器学习模型
打造你的第一个机器学习模型的步骤' (Steps to Build Your First Machine Learning Model)
介绍
在本教程中,我们将学习如何使用“玻璃分类”数据集构建一个简单的多分类模型。我们的目标是开发并部署一个可以预测各种类型玻璃的Web应用程序,例如:
- 使用ZenML和Streamlit进行员工流失率预测
- VoAGI新闻,9月27日:ChatGPT项目备忘单•PyTorch和Lightning AI介绍
- 这篇AI论文介绍了RMT:RetNet和Transformer的融合,开创了计算机视觉效率和准确性的新时代
- 建筑窗户浮法加工
- 建筑窗户非浮法加工
- 车辆窗户浮法加工
- 车辆窗户非浮法加工(数据集中缺失)
- 容器
- 餐具
- 车灯
此外,我们还将了解:
- Skops:分享基于scikit-learn的模型并投入生产。
- Gradio:机器学习Web应用程序框架。
- HuggingFace Spaces:免费的机器学习模型和应用程序托管平台。
通过本教程结束时,您将具有构建、训练和部署基本机器学习模型作为Web应用程序的实际经验。
模型训练与保存
在这部分中,我们将导入数据集,将其分割为训练和测试子集,构建机器学习流水线,训练模型,评估模型性能,并保存模型。
数据集
我们已加载数据集并对标签进行了洗牌,以保证标签的平等分布。
import pandas as pdglass_df = pd.read_csv("glass.csv")glass_df = glass_df.sample(frac = 1)glass_df.head(3)
我们的数据集 随后,我们使用数据集选择模型特征和目标变量,并将其分割为训练和测试数据集。
from sklearn.model_selection import train_test_splitX = glass_df.drop("Type",axis=1)y = glass_df.TypeX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=125)
机器学习流水线
我们的模型流水线很简单。首先,我们通过填充器对特征进行处理,然后使用标准缩放器进行归一化。最后,将处理后的数据输入随机森林分类器。
在将流水线拟合到训练集之后,我们使用`.score()`方法在测试集上生成准确率。
准确率是平均值,我对模型的表现感到满意。虽然我们可以通过集成或使用各种优化方法来改进模型,但我们的目标不同。
from sklearn.ensemble import RandomForestClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.impute import SimpleImputerfrom sklearn.pipeline import Pipelinepipe = Pipeline( steps=[ ("imputer", SimpleImputer()), ("scaler", StandardScaler()), ("model", RandomForestClassifier(n_estimators=100, random_state=125)), ])pipe.fit(X_train, y_train)pipe.score(X_test, y_test) >>> 0.7538461538461538
分类报告看起来也不错。
from sklearn.metrics import classification_reporty_pred = pipe.predict(X_test)print(classification_report(y_test,y_pred))
precision recall f1-score support 1 0.65 0.73 0.69 15 2 0.82 0.79 0.81 29 3 0.40 0.50 0.44 4 5 1.00 0.80 0.89 5 6 1.00 0.67 0.80 3 7 0.78 0.78 0.78 9 accuracy 0.75 65 macro avg 0.77 0.71 0.73 65weighted avg 0.77 0.75 0.76 65
保存模型
Skops是一个将scikit-learn模型部署到产品中的优秀库。我们将使用它来保存模型,并在将来加载到生产环境中。
import skops.io as sio
sio.dump(pipe, "glass_pipeline.skops")
正如我们所看到的,只需一行代码,我们就可以加载整个流程。
sio.load("glass_pipeline.skops", trusted=True)
构建网络应用
在本部分中,我们将学习如何使用Gradio构建一个简单的分类用户界面。
- 使用skops加载模型。
- 创建一个包含类名的数组,并将第一个设置为空或为“None”,作为数值类别的起始值。
- 编写一个分类Python函数,接受用户的输入并使用流程预测类别。
- 使用滑块创建每个特征的输入。用户可以使用鼠标选择数值。
- 使用标签创建输出。它将以粗体文本显示标签在顶部。
- 添加应用的标题和描述。
- 最后,使用`gradio.Interface`将所有内容结合。
import gradio as gr
import skops.io as sio
pipe = sio.load("glass_pipeline.skops", trusted=True)
classes = ["None", "Building Windows Float Processed", "Building Windows Non Float Processed", "Vehicle Windows Float Processed", "Vehicle Windows Non Float Processed", "Containers", "Tableware", "Headlamps"]
def classifier(RI, Na, Mg, Al, Si, K, Ca, Ba, Fe):
pred_glass = pipe.predict([[RI, Na, Mg, Al, Si, K, Ca, Ba, Fe]])[0]
label = f"预测的玻璃标签:**{classes[pred_glass]}**"
return label
inputs = [
gr.Slider(1.51, 1.54, step=0.01, label="折射率"),
gr.Slider(10, 17, step=1, label="钠"),
gr.Slider(0, 4.5, step=0.5, label="镁"),
gr.Slider(0.3, 3.5, step=0.1, label="铝"),
gr.Slider(69.8, 75.4, step=0.1, label="硅"),
gr.Slider(0, 6.2, step=0.1, label="钾"),
gr.Slider(5.4, 16.19, step=0.1, label="钙"),
gr.Slider(0, 3, step=0.1, label="钡"),
gr.Slider(0, 0.5, step=0.1, label="铁"),
]
outputs = [gr.Label(num_top_classes=7)]
title = "玻璃分类"
description = "输入详细信息以正确识别玻璃类型"
gr.Interface(fn=classifier, inputs=inputs, outputs=outputs, title=title, description=description).launch()
部署机器学习模型
在最后一部分中,我们将在Hugging Face上创建空间并添加我们的模型和应用文件。
要创建空间,您必须登录https://huggingface.co。然后,点击右上角的个人资料图片,然后选择“+新建空间”。
填写您的应用名称,选择SDK,然后点击“创建空间”按钮。
然后,创建一个`requirements.txt`文件。您可以通过转到“文件”选项卡并选择“+添加文件”按钮来添加或创建文件。
在 `requirements.txt` 文件中,您需要添加 skops 和 scikit-learn。
此后,通过将它们从您的本地文件夹拖放到该空间中,添加模型和文件。然后提交。
空间将需要一些时间来安装所需的软件包并构建容器。
来自 Spaces 的图片
最后,您将拥有一个无错的应用程序,可以与家人和同事共享。您甚至可以通过点击链接查看实时演示:玻璃分类。
来自 玻璃分类 的图片
结论
在本教程中,我们走过了建立、训练和部署机器学习模型作为Web应用的端到端过程。我们使用了玻璃分类数据集来训练一个简单的多类别分类模型。在使用scikit-learn训练模型后,我们利用skops和Gradio将模型打包并部署为HuggingFace Spaces上的Web应用程序。
这个初始项目有很多可能性可供拓展。您可以将更多特性加入模型中,尝试不同的算法,或在其他平台上部署Web应用程序。重要的是,现在您已经亲身体验了一个端到端的机器学习工作流程。您已经接触到了训练模型、将它们打包用于生产以及构建与模型预测交互的Web界面。
感谢您的关注!如果您在继续机器学习之旅时有任何其他问题,请告诉我。 Abid Ali Awan(@1abidaliawan)是一位持有认证的数据科学家专业人士,热衷于构建机器学习模型。目前,他专注于内容创作,并在机器学习和数据科学技术方面撰写技术博客。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为精神疾病患者提供学习支持和帮助构建一个AI产品。