Heim  >  Artikel  >  Backend-Entwicklung  >  Bereitstellung eines Modells für maschinelles Lernen als Web-App mit Streamlit

Bereitstellung eines Modells für maschinelles Lernen als Web-App mit Streamlit

WBOY
WBOYOriginal
2024-08-28 18:31:21476Durchsuche

Einführung

Ein maschinelles Lernmodell ist im Wesentlichen eine Reihe von Regeln oder Mechanismen, die verwendet werden, um Vorhersagen zu treffen oder Muster in Daten zu finden. Um es ganz einfach auszudrücken (und ohne Angst vor einer zu starken Vereinfachung): Eine Trendlinie, die mithilfe der Methode der kleinsten Quadrate in Excel berechnet wird, ist ebenfalls ein Modell. In realen Anwendungen verwendete Modelle sind jedoch nicht so einfach – sie beinhalten oft komplexere Gleichungen und Algorithmen, nicht nur einfache Gleichungen.

In diesem Beitrag werde ich damit beginnen, ein sehr einfaches Modell für maschinelles Lernen zu erstellen und es als sehr einfache Web-App zu veröffentlichen, um ein Gefühl für den Prozess zu bekommen.

Hier konzentriere ich mich nur auf den Prozess, nicht auf das ML-Modell selbst. Außerdem werde ich Streamlit und Streamlit Community Cloud verwenden, um Python-Webanwendungen einfach zu veröffentlichen.

TL;DR:

Mit scikit-learn, einer beliebten Python-Bibliothek für maschinelles Lernen, können Sie schnell Daten trainieren und mit nur wenigen Codezeilen ein Modell für einfache Aufgaben erstellen. Das Modell kann dann mit joblib als wiederverwendbare Datei gespeichert werden. Dieses gespeicherte Modell kann wie eine normale Python-Bibliothek in eine Webanwendung importiert/geladen werden, sodass die App mithilfe des trainierten Modells Vorhersagen treffen kann!

App-URL: https://yh-machine-learning.streamlit.app/
GitHub: https://github.com/yoshan0921/yh-machine-learning.git

Technologie-Stack

  • Python
  • Streamlit: Zum Erstellen der Webanwendungsschnittstelle.
  • scikit-learn: Zum Laden und Verwenden des vorab trainierten Random Forest-Modells.
  • NumPy & Pandas: Zur Datenmanipulation und -verarbeitung.
  • Matplotlib & Seaborn: Zum Generieren von Visualisierungen.

Was ich gemacht habe

Mit dieser App können Sie Vorhersagen untersuchen, die von einem zufälligen Waldmodell erstellt wurden, das auf dem Palmer Penguins-Datensatz trainiert wurde. (Weitere Informationen zu den Trainingsdaten finden Sie am Ende dieses Artikels.)

Konkret sagt das Modell Pinguinarten basierend auf einer Vielzahl von Merkmalen voraus, darunter Art, Insel, Schnabellänge, Flossenlänge, Körpergröße und Geschlecht. Benutzer können durch die App navigieren, um zu sehen, wie sich verschiedene Funktionen auf die Vorhersagen des Modells auswirken.

  • Vorhersagebildschirm
    Machine Learning Model Deployment as a Web App using Streamlit

  • Lerndaten-/Visualisierungsbildschirm
    Machine Learning Model Deployment as a Web App using Streamlit

Entwicklungsschritt 1 – Erstellen des Modells

Schritt 1.1 Bibliotheken importieren

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 ist eine Python-Bibliothek, die auf Datenmanipulation und -analyse spezialisiert ist. Es unterstützt das Laden, Vorverarbeiten und Strukturieren von Daten mithilfe von DataFrames und bereitet Daten für Modelle für maschinelles Lernen vor.
sklearn ist eine umfassende Python-Bibliothek für maschinelles Lernen, die Tools zum Training und zur Bewertung bereitstellt. In diesem Beitrag werde ich ein Modell mithilfe einer Lernmethode namens Random Forest erstellen.
joblib ist eine Python-Bibliothek, die dabei hilft, Python-Objekte, wie z. B. Modelle für maschinelles Lernen, auf sehr effiziente Weise zu speichern und zu laden.

Schritt 1.2 Daten lesen

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

Laden Sie den Datensatz (Trainingsdaten) und teilen Sie ihn in Features (X) und Zielvariablen (y) auf.

Schritt 1.3 Kodieren Sie die Kategorievariablen

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])

Die kategorialen Variablen werden mittels One-Hot-Kodierung (X_encoded) in ein numerisches Format umgewandelt. Wenn „Insel“ beispielsweise die Kategorien „Biscoe“, „Dream“ und „Torgersen“ enthält, wird für jede eine neue Spalte erstellt (island_Biscoe, island_Dream, island_Torgersen). Das Gleiche gilt für Sex. Wenn die Originaldaten „Biscoe“ lauten, wird die Spalte island_Biscoe auf 1 und die anderen auf 0 gesetzt.
Die Zielvariable „Art“ wird auf numerische Werte abgebildet (y_encoded).

Schritt 1.4 Teilen Sie den Datensatz auf

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

Um ein Modell zu bewerten, ist es notwendig, die Leistung des Modells anhand von Daten zu messen, die nicht für das Training verwendet werden. 7:3 wird häufig als allgemeine Praxis beim maschinellen Lernen verwendet.

Schritt 1.5 Trainieren Sie ein Random Forest-Modell

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

Die Fit-Methode wird zum Trainieren des Modells verwendet.
Der x_train repräsentiert die Trainingsdaten für die erklärenden Variablen und der y_train repräsentiert die Zielvariablen.
Durch den Aufruf dieser Methode wird das auf Basis der Trainingsdaten trainierte Modell in clf.

gespeichert

Schritt 1.6 Speichern Sie das Modell

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

joblib.dump() ist eine Funktion zum Speichern von Python-Objekten im Binärformat. Durch das Speichern des Modells in diesem Format kann das Modell aus einer Datei geladen und unverändert verwendet werden, ohne dass ein erneutes Training erforderlich ist.

Beispielcode

Development Step2 - Building the Web App and Integrating the Model

Step2.1 Import Libraries

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

stremlit is a Python library that makes it easy to create and share custom web applications for machine learning and data science projects.
numpy is a fundamental Python library for numerical computing. It provides support for large, multi-dimensional arrays and matrices, along with a collection of mathematical functions to operate on these arrays efficiently.

Step2.2 Retrieve and encode input data

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)

Input values are retrieved from the input form created by Stremlit, and categorical variables are encoded using the same rules as when the model was created. Note that the order of each data must also be the same as when the model was created. If the order is different, an error will occur when executing a forecast using the model.

Step2.3 Load the Model

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

"penguin_classifier_model.pkl" is the file where the previously saved model is stored. This file contains a trained RandomForestClassifier in binary format. Running this code loads the model into clf, allowing you to use it for predictions and evaluations on new data.

Step2.4 Perform prediction

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

clf.predict(input_encoded_df): Uses the trained model to predict the class for the new encoded input data, storing the result in prediction.
clf.predict_proba(input_encoded_df): Calculates the probability for each class, storing the results in prediction_proba.

Sample Code

Step3. Deploy

Machine Learning Model Deployment as a Web App using Streamlit

You can publish your developed application on the Internet by accessing the Stremlit Community Cloud (https://streamlit.io/cloud) and specifying the URL of the GitHub repository.

About Data Set

Machine Learning Model Deployment as a Web App using Streamlit

Artwork by @allison_horst (https://github.com/allisonhorst)

The model is trained using the Palmer Penguins dataset, a widely recognized dataset for practicing machine learning techniques. This dataset provides information on three penguin species (Adelie, Chinstrap, and Gentoo) from the Palmer Archipelago in Antarctica. Key features include:

  • Species: The species of the penguin (Adelie, Chinstrap, Gentoo).
  • Island: The specific island where the penguin was observed (Biscoe, Dream, Torgersen).
  • Bill Length: The length of the penguin's bill (mm).
  • Bill Depth: The depth of the penguin's bill (mm).
  • Flipper Length: The length of the penguin's flipper (mm).
  • Body Mass: The mass of the penguin (g).
  • Sex: The sex of the penguin (male or female).

This dataset is sourced from Kaggle, and it can be accessed here. The diversity in features makes it an excellent choice for building a classification model and understanding the importance of each feature in species prediction.

Das obige ist der detaillierte Inhalt vonBereitstellung eines Modells für maschinelles Lernen als Web-App mit Streamlit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn