开发步骤 2 - 构建 Web 应用程序并集成模型

Step2.1 导入库

import streamlit as stimport numpy as npimport pandas as pdimport joblib

stremlit 是一个 Python 库,可以轻松地为机器学习和数据科学项目创建和共享自定义 Web 应用程序。
numpy 是用于数值计算的基本 Python 库。它提供对大型多维数组和矩阵的支持,以及一组数学函数来有效地对这些数组进行操作。

Step2.2 检索并编码输入数据

data = {    \\\"island\\\": island,    \\\"bill_length_mm\\\": bill_length_mm,    \\\"bill_depth_mm\\\": bill_depth_mm,    \\\"flipper_length_mm\\\": flipper_length_mm,    \\\"body_mass_g\\\": body_mass_g,    \\\"sex\\\": sex,}input_df = pd.DataFrame(data, index=[0])encode = [\\\"island\\\", \\\"sex\\\"]input_encoded_df = pd.get_dummies(input_df, prefix=encode)

输入值是从 Stremlit 创建的输入表单中检索的,分类变量使用与创建模型时相同的规则进行编码。请注意,每个数据的顺序也必须与创建模型时的顺序相同。如果顺序不同,使用模型执行预测时将会出现错误。

Step2.3 加载模型

clf = joblib.load(\\\"penguin_classifier_model.pkl\\\")

“penguin_classifier_model.pkl”是存储之前保存的模型的文件。该文件包含经过训练的二进制格式的 RandomForestClassifier。运行此代码会将模型加载到 clf 中,允许您使用它对新数据进行预测和评估。

Step2.4 进行预测

prediction = clf.predict(input_encoded_df)prediction_proba = clf.predict_proba(input_encoded_df)

clf.predict(input_encoded_df):使用训练好的模型来预测新编码输入数据的类别,并将结果存储在预测中。
clf.predict_proba(input_encoded_df):计算每个类的概率,将结果存储在prediction_proba.

示例代码

步骤3.部署

\\\"Machine

您可以通过访问 Stremlit 社区云 (https://streamlit.io/cloud) 并指定 GitHub 存储库的 URL 在 Internet 上发布您开发的应用程序。

关于数据集

\\\"Machine

@allison_horst 的作品 (https://github.com/allisonhorst)

该模型使用 Palmer Penguins 数据集进行训练,这是一个广泛认可的用于练习机器学习技术的数据集。该数据集提供了来自南极洲帕尔默群岛的三种企鹅(阿德利企鹅、帽带企鹅和巴布亚企鹅)的信息。主要功能包括:

该数据集源自 Kaggle,可以在此处访问。特征的多样性使其成为构建分类模型和了解每个特征在物种预测中的重要性的绝佳选择。

","image":"http://www.luping.net/uploads/20241006/17282217676702924713227.png","datePublished":"2024-11-02T21:56:21+08:00","dateModified":"2024-11-02T21:56:21+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Streamlit 将机器学习模型部署为 Web 应用程序

使用 Streamlit 将机器学习模型部署为 Web 应用程序

发布于2024-11-02
浏览:276

介绍

机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 Excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们通常涉及更复杂的方程和算法,而不仅仅是简单的方程。

在这篇文章中,我将首先构建一个非常简单的机器学习模型,并将其作为一个非常简单的 Web 应用程序发布,以了解该过程。

在这里,我将只关注流程,而不是 ML 模型本身。另外,我将使用 Streamlit 和 Streamlit Community Cloud 轻松发布 Python Web 应用程序。

长话短说:

使用 scikit-learn(一种流行的机器学习 Python 库),您可以快速训练数据并创建模型,只需几行代码即可完成简单任务。然后可以使用 joblib 将模型保存为可重用文件。这个保存的模型可以像 Web 应用程序中的常规 Python 库一样导入/加载,从而允许应用程序使用经过训练的模型进行预测!

应用程序网址:https://yh-machine-learning.streamlit.app/
GitHub:https://github.com/yoshan0921/yh-machine-learning.git

技术栈

  • Python
  • Streamlit:用于创建 Web 应用程序界面。
  • scikit-learn:用于加载和使用预先训练的随机森林模型。
  • NumPy 和 Pandas:用于数据操作和处理。
  • Matplotlib 和 Seaborn:用于生成可视化。

我做了什么

此应用程序允许您检查在帕尔默企鹅数据集上训练的随机森林模型所做的预测。 (有关训练数据的更多详细信息,请参阅本文末尾。)

具体来说,该模型根据各种特征预测企鹅物种,包括物种、岛屿、喙长、鳍状肢长度、体型和性别。用户可以导航应用程序以查看不同的功能如何影响模型的预测。

  • 预测屏幕
    Machine Learning Model Deployment as a Web App using Streamlit

  • 学习数据/可视化屏幕
    Machine Learning Model Deployment as a Web App using Streamlit

开发步骤1 - 创建模型

Step1.1 导入库

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import joblib

pandas是一个专门用于数据操作和分析的Python库。它支持使用 DataFrame 进行数据加载、预处理和结构化,为机器学习模型准备数据。
sklearn 是一个用于机器学习的综合 Python 库,提供训练和评估工具。在这篇文章中,我将使用称为随机森林的学习方法构建一个模型。
joblib 是一个 Python 库,可帮助以非常有效的方式保存和加载 Python 对象,例如机器学习模型。

Step1.2 读取数据

df = pd.read_csv("./dataset/penguins_cleaned.csv")
X_raw = df.drop("species", axis=1)
y_raw = df.species

加载数据集(训练数据)并将其分成特征(X)和目标变量(y)。

Step1.3 对类别变量进行编码

encode = ["island", "sex"]
X_encoded = pd.get_dummies(X_raw, columns=encode)

target_mapper = {"Adelie": 0, "Chinstrap": 1, "Gentoo": 2}
y_encoded = y_raw.apply(lambda x: target_mapper[x])

使用 one-hot 编码(X_encoded)将分类变量转换为数字格式。例如,如果“island”包含类别“Biscoe”、“Dream”和“Torgersen”,则会为每个类别创建一个新列(island_Biscoe、island_Dream、island_Torgersen)。对于性也是如此。如果原始数据是“Biscoe”,则 island_Biscoe 列将设置为 1,其他列将设置为 0。
目标变量物种映射到数值(y_encoded)。

Step1.4 分割数据集

x_train, x_test, y_train, y_test = train_test_split(
    X_encoded, y_encoded, test_size=0.3, random_state=1
)

为了评估模型,有必要衡量模型在未用于训练的数据上的性能。 7:3 被广泛用作机器学习中的一般实践。

Step1.5 训练随机森林模型

clf = RandomForestClassifier()
clf.fit(x_train, y_train)

拟合方法用于训练模型。
x_train 表示解释变量的训练数据,y_train 表示目标变量。
通过调用该方法,根据训练数据训练出来的模型存储在clf.

Step1.6 保存模型

joblib.dump(clf, "penguin_classifier_model.pkl")

joblib.dump()是以二进制格式保存Python对象的函数。通过以此格式保存模型,可以从文件加载模型并按原样使用,而无需再次训练。

示例代码

开发步骤 2 - 构建 Web 应用程序并集成模型

Step2.1 导入库

import streamlit as st
import numpy as np
import pandas as pd
import joblib

stremlit 是一个 Python 库,可以轻松地为机器学习和数据科学项目创建和共享自定义 Web 应用程序。
numpy 是用于数值计算的基本 Python 库。它提供对大型多维数组和矩阵的支持,以及一组数学函数来有效地对这些数组进行操作。

Step2.2 检索并编码输入数据

data = {
    "island": island,
    "bill_length_mm": bill_length_mm,
    "bill_depth_mm": bill_depth_mm,
    "flipper_length_mm": flipper_length_mm,
    "body_mass_g": body_mass_g,
    "sex": sex,
}
input_df = pd.DataFrame(data, index=[0])

encode = ["island", "sex"]
input_encoded_df = pd.get_dummies(input_df, prefix=encode)

输入值是从 Stremlit 创建的输入表单中检索的,分类变量使用与创建模型时相同的规则进行编码。请注意,每个数据的顺序也必须与创建模型时的顺序相同。如果顺序不同,使用模型执行预测时将会出现错误。

Step2.3 加载模型

clf = joblib.load("penguin_classifier_model.pkl")

“penguin_classifier_model.pkl”是存储之前保存的模型的文件。该文件包含经过训练的二进制格式的 RandomForestClassifier。运行此代码会将模型加载到 clf 中,允许您使用它对新数据进行预测和评估。

Step2.4 进行预测

prediction = clf.predict(input_encoded_df)
prediction_proba = clf.predict_proba(input_encoded_df)

clf.predict(input_encoded_df):使用训练好的模型来预测新编码输入数据的类别,并将结果存储在预测中。
clf.predict_proba(input_encoded_df):计算每个类的概率,将结果存储在prediction_proba.

示例代码

步骤3.部署

Machine Learning Model Deployment as a Web App using Streamlit

您可以通过访问 Stremlit 社区云 (https://streamlit.io/cloud) 并指定 GitHub 存储库的 URL 在 Internet 上发布您开发的应用程序。

关于数据集

Machine Learning Model Deployment as a Web App using Streamlit

@allison_horst 的作品 (https://github.com/allisonhorst)

该模型使用 Palmer Penguins 数据集进行训练,这是一个广泛认可的用于练习机器学习技术的数据集。该数据集提供了来自南极洲帕尔默群岛的三种企鹅(阿德利企鹅、帽带企鹅和巴布亚企鹅)的信息。主要功能包括:

  • 物种:企鹅的物种(Adelie、Chinstrap、Gentoo)。
  • 岛屿:观察到企鹅的特定岛屿(Biscoe、Dream、Torgersen)。
  • Bill Length:企鹅的嘴的长度(毫米)。
  • Bill Depth:企鹅喙的深度(毫米)。
  • Flipper Length:企鹅的鳍状肢的长度(毫米)。
  • Body Mass:企鹅的质量(g)。
  • 性别:企鹅的性别(雄性或雌性)。

该数据集源自 Kaggle,可以在此处访问。特征的多样性使其成为构建分类模型和了解每个特征在物种预测中的重要性的绝佳选择。

版本声明 本文转载于:https://dev.to/yoshan0921/machine-learning-model-deployment-as-a-web-app-using-streamlit-2c5p?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python 射线tracing方法 matplotlib路径对象表示多边形。它检查给定点是否位于定义路径内。 This function is often faster than the ray tracing approach, as seen in the code snippet pr...
    编程 发布于2025-02-19
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    如何为JavaScript对象变量创建动态键,尝试为JavaScript对象创建动态键,使用此Syntax jsObj['key' i] = 'example' 1;将不起作用。正确的方法采用方括号:他们维持一个长度属性,该属性反映了数字属性(索引)和一个数字属性的数量。标准对象没有模仿这...
    编程 发布于2025-02-19
  • 如何可靠地检查MySQL表中的列存在?
    如何可靠地检查MySQL表中的列存在?
    在mySQL中确定列中的列存在,验证表中的列存在与与之相比有点困惑其他数据库系统。常用的方法:如果存在(从信息_schema.columns select * * where table_name ='prefix_topic'和column_name =&...
    编程 发布于2025-02-19
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    [2最后一行与数据集中的每个不同标识符关联。考虑以下数据: 1 2014-02-01 kjkj 1 2014-03-11 ajskj 3 2014-02-01 sfdg 3 2014-06-12 fdsa 为了检索数据集中每个唯一ID的最后一行信息,您可以在操作员上使用Postgres的有效效...
    编程 发布于2025-02-19
  • 如何使用char_length()在mySQL中按字符串长度对数据进行排序?
    如何使用char_length()在mySQL中按字符串长度对数据进行排序?
    [2使用内置的char_length()函数。:返回字符串中的字符数,考虑多BYTE字符encoding(例如UTF-8)。 ] :返回字符串占用的字节数,该字符的数量可能无法准确反映字符计数多字节编码。 [&& && && && && && &&华从指定的表格中的所有行,并根据指定列的字符长度按升...
    编程 发布于2025-02-19
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError:SomeClass实...
    编程 发布于2025-02-19
  • 在映射到MySQL枚举列时,如何确保冬眠保留值?
    在映射到MySQL枚举列时,如何确保冬眠保留值?
    在hibernate中保存枚举值:故障排除错误的列type ,他们各自的映射至关重要。在Java中使用枚举类型时,至关重要的是,建立冬眠的方式如何映射到基础数据库。在您的情况下,您已将MySQL列定义为枚举,并在Java中创建了相应的枚举代码。但是,您遇到以下错误:“ MyApp中的错误列类型。...
    编程 发布于2025-02-19
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    克服go mod中的模块路径差异 github.com/coreos/etcd/integration imports :解析GO.mod:模块将其路径声明为: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&&&&&&&&&&&&& github.com/coreos/b...
    编程 发布于2025-02-19
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php 您的目标可能是检索“ varnum”属性值,其中提取数据的传统方法可能会使您感到困惑。 - > attributes()为$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ at...
    编程 发布于2025-02-19
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在java中的多个返回类型:一个误解介绍,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但是,情况确实如此吗?通用方法:拆开神秘 [方法仅具有单一的返回类型。相反,它采用机制,如钻石符号“ ”。分解方法签名: :本节定义了一个通用类型参数,E。它表示该方法接受扩展FOO类的任何...
    编程 发布于2025-02-19
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-02-19
  • 在没有密码提示的情况下,如何在Ubuntu上安装MySQL?
    在没有密码提示的情况下,如何在Ubuntu上安装MySQL?
    在ubuntu 使用debconf-set-selections 在安装过程中避免密码提示mysql root用户。这需要以下步骤: sudo debconf-set-selections
    编程 发布于2025-02-19
  • 如何以不同的频率控制Android设备振动?
    如何以不同的频率控制Android设备振动?
    控制使用频率变化的Android设备振动是否想为您的Android应用程序添加触觉元素?了解如何触发设备的振动器至关重要。您可以做到这一点:生成基本振动以生成简单的振动,使用振动器对象:这将导致设备在指定的持续时间内振动。许可要求通过上述技术,您可以创建在您的Android应用程序中自定义振动,以增...
    编程 发布于2025-02-19
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 //错误:“ cance redeclare foo()” 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义...
    编程 发布于2025-02-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3