머신러닝 모델은 본질적으로 데이터에서 예측을 하거나 패턴을 찾는 데 사용되는 규칙 또는 메커니즘의 집합입니다. 매우 간단하게 말하면(과도하게 단순화할 염려 없이) 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
이 앱을 사용하면 Palmer Penguins 데이터세트에서 훈련된 Random Forest 모델의 예측을 검사할 수 있습니다. (훈련 데이터에 대한 자세한 내용은 이 글의 끝 부분을 참조하세요.)
구체적으로 모델은 종, 섬, 부리 길이, 지느러미 길이, 몸 크기, 성별 등 다양한 특징을 기반으로 펭귄 종을 예측합니다. 사용자는 앱을 탐색하여 다양한 기능이 모델 예측에 어떤 영향을 미치는지 확인할 수 있습니다.
예측화면
학습 데이터/시각화 화면
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 라이브러리입니다.
df = pd.read_csv("./dataset/penguins_cleaned.csv") X_raw = df.drop("species", axis=1) y_raw = df.species
데이터세트(훈련 데이터)를 로드하고 특성(X)과 대상 변수(y)로 분리합니다.
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)으로 매핑됩니다.
x_train, x_test, y_train, y_test = train_test_split( X_encoded, y_encoded, test_size=0.3, random_state=1 )
모델을 평가하려면 훈련에 사용되지 않는 데이터에 대한 모델 성능을 측정해야 합니다. 7:3은 머신러닝의 일반적인 관행으로 널리 사용됩니다.
clf = RandomForestClassifier() clf.fit(x_train, y_train)
모델 학습에는 적합 방법이 사용됩니다.
x_train은 설명변수에 대한 학습 데이터를 나타내고, y_train은 목표 변수를 나타냅니다.
이 메소드를 호출하면 훈련 데이터를 기반으로 훈련된 모델이 clf에 저장됩니다.
joblib.dump(clf, "penguin_classifier_model.pkl")
joblib.dump()는 Python 객체를 바이너리 형식으로 저장하는 함수입니다. 모델을 이 형식으로 저장하면 모델을 파일에서 로드하여 다시 학습할 필요 없이 그대로 사용할 수 있습니다.
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.
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.
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.
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.
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.
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:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!