开发步骤 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
瀏覽:486

介绍

机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 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]刪除
最新教學 更多>
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    程式設計 發佈於2025-07-21
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-07-21
  • Python中嵌套函數與閉包的區別是什麼
    Python中嵌套函數與閉包的區別是什麼
    嵌套函數與python 在python中的嵌套函數不被考慮閉合,因為它們不符合以下要求:不訪問局部範圍scliables to incling scliables在封裝範圍外執行範圍的局部範圍。 make_printer(msg): DEF打印機(): 打印(味精) ...
    程式設計 發佈於2025-07-21
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    在Microsoft Visual C 中,Microsoft consions用戶strate strate strate strate strate strate strate strate strate strate strate strate strate strate strate st...
    程式設計 發佈於2025-07-21
  • 表單刷新後如何防止重複提交?
    表單刷新後如何防止重複提交?
    在Web開發中預防重複提交 在表格提交後刷新頁面時,遇到重複提交的問題是常見的。要解決這個問題,請考慮以下方法: 想像一下具有這樣的代碼段,看起來像這樣的代碼段:)){ //數據庫操作... 迴聲“操作完成”; 死(); } ? > ...
    程式設計 發佈於2025-07-21
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-07-21
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-07-21
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-07-21
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-21
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-07-21
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-07-21
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-07-21
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-07-21
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-21
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-07-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3