Streamlit을 사용하여 웹앱으로 기계 학습 모델 배포

WBOY
풀어 주다: 2024-08-28 18:31:21
원래의
470명이 탐색했습니다.

소개

머신러닝 모델은 본질적으로 데이터에서 예측을 하거나 패턴을 찾는 데 사용되는 규칙 또는 메커니즘의 집합입니다. 매우 간단하게 말하면(과도하게 단순화할 염려 없이) Excel에서 최소 제곱법을 사용하여 계산된 추세선도 모델입니다. 그러나 실제 응용 프로그램에 사용되는 모델은 그렇게 단순하지 않습니다. 단순한 방정식뿐만 아니라 더 복잡한 방정식과 알고리즘이 포함되는 경우가 많습니다.

이번 게시물에서는 매우 간단한 머신러닝 모델을 구축하고 이를 매우 간단한 웹 앱으로 출시하여 프로세스를 살펴보는 것부터 시작하겠습니다.

여기에서는 ML 모델 자체가 아닌 프로세스에만 중점을 두겠습니다. 또한 Streamlit 및 Streamlit Community Cloud를 사용하여 Python 웹 애플리케이션을 쉽게 출시하겠습니다.

요약:

머신러닝에 널리 사용되는 Python 라이브러리인 scikit-learn을 사용하면 단 몇 줄의 코드만으로 데이터를 빠르게 학습하고 모델을 생성하여 간단한 작업을 수행할 수 있습니다. 그런 다음 모델을 joblib를 사용하여 재사용 가능한 파일로 저장할 수 있습니다. 이 저장된 모델은 웹 애플리케이션에서 일반 Python 라이브러리처럼 가져오거나 로드할 수 있으므로 앱이 훈련된 모델을 사용하여 예측을 할 수 있습니다!

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

기술 스택

  • 파이썬
  • Streamlit: 웹 애플리케이션 인터페이스 생성용.
  • scikit-learn: 사전 훈련된 Random Forest 모델을 로드하고 사용합니다.
  • NumPy 및 Pandas: 데이터 조작 및 처리용.
  • Matplotlib & Seaborn: 시각화 생성용.

내가 만든 것

이 앱을 사용하면 Palmer Penguins 데이터세트에서 훈련된 Random Forest 모델의 예측을 검사할 수 있습니다. (훈련 데이터에 대한 자세한 내용은 이 글의 끝 부분을 참조하세요.)

구체적으로 모델은 종, 섬, 부리 길이, 지느러미 길이, 몸 크기, 성별 등 다양한 특징을 기반으로 펭귄 종을 예측합니다. 사용자는 앱을 탐색하여 다양한 기능이 모델 예측에 어떤 영향을 미치는지 확인할 수 있습니다.

  • 예측화면
    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 라이브러리입니다. DataFrames를 사용하여 데이터 로딩, 전처리 및 구조화를 지원하고 머신러닝 모델용 데이터를 준비합니다.
sklearn은 훈련 및 평가 도구를 제공하는 기계 학습용 종합 Python 라이브러리입니다. 이번 포스팅에서는 Random Forest라는 학습방법을 이용하여 모델을 구축해보겠습니다.
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])
로그인 후 복사

범주형 변수는 원-핫 인코딩(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 객체를 바이너리 형식으로 저장하는 함수입니다. 모델을 이 형식으로 저장하면 모델을 파일에서 로드하여 다시 학습할 필요 없이 그대로 사용할 수 있습니다.

샘플 코드

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.

위 내용은 Streamlit을 사용하여 웹앱으로 기계 학습 모델 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!