Streamlit을 사용하여 ML 모델 배포

신용 카드 거래에서 사기를 감지했는지 여부를 결정하기 위해 감독 머신 러닝 ML 모델을 구축한다고 상상해 보십시오. 성공적인 애플리케이션의 모델 신뢰 수준을 통해 위험이 없는 신용 카드 거래를 평가할 수 있습니다. 신용 카드 사기를 감지할 수 있는 모델을 구축했습니다. 이제 어떻게 해야 할까요? 이러한 ML 모델의 배포는 프로젝트의 주요 목표입니다.
ML 모델을 배포한다는 것은 단순히 실제 비즈니스 의사 결정에 사용할 수 있는 입력을 받고 출력을 반환할 수 있는 기존 프로덕션 환경에 모델을 통합하는 것을 의미합니다. 여기가 바로 Streamlit이 플레이하는 곳입니다!

Streamlit is a open-source app framework is the easiest way for data scientists and machine learning engineers to create beautiful, performant apps in only a few hours! All in pure Python. All for free.



이 튜토리얼의 1부에서는 Abalone의 나이를 예측하기 위해 감독 머신 러닝 모델을 배포하고 다음 파트에서는 ​​Heroku에서 이 웹 앱을 호스팅할 것입니다. 전복은 독특한 귀 모양의 껍질에 진주층이 있는 연체 동물입니다. 전복의 나이는 물리적 측정을 통해 얻을 수 있습니다. 모델을 배포해 보겠습니다.



모델에 대한 pickle 파일을 생성하고 기계 학습 모델에 대한 내 kaggle 노트북을 참조하십시오. 이 자습서에서는 배포에 중점을 둘 것입니다. 필요한 패키지를 가져옵니다. streamlit 및 pickle을 가져와 피클된 파일을 언피클합니다.

import streamlit as st
import pickle
import numpy as np
model = pickle.load(open('final_model.pkl','rb'))


절인 모델을 사용하는 함수를 만듭니다. 모든 입력 값을 Numpy 배열로 변환하고 입력 배열의 데이터 유형을 float로 변경합니다. model.predict(input)를 사용하여 예측 값을 만듭니다. 예측 값을 반환합니다.

def predict_age(Length,Diameter,Height,Whole_weight,Shucked_weight,
                Viscera_weight,Shell_weight):
    input=np.array([[Length,Diameter,Height,Whole_weight,Shucked_weight,
                     Viscera_weight,Shell_weight]]).astype(np.float64)
    prediction = model.predict(input)

    return int(prediction)


주요 기능을 만듭니다.
def main()
이제 메인 함수의 구성 요소를 빌드해 보겠습니다.
  • 페이지의 제목을 만듭니다. st.markdown을 사용하여 html 제목 텍스트를 만듭니다.

  •     st.title("Abalone Age Prediction")
        html_temp = """
        <div style="background:#025246 ;padding:10px">
        <h2 style="color:white;text-align:center;"> Abalone Age Prediction ML App </h2>
        </div>
        """
        st.markdown(html_temp, unsafe_allow_html = True)
    


  • Streamlit은 사용자 입력을 받기 위해 입력 필드와 같은 HTML 양식 구성 요소를 직접 생성하는 API를 제공합니다. st.text_input()을 사용하여 앱에 대한 입력 값을 가져옵니다.

  •     Length = st.text_input("Length","Type Here")
        Diameter = st.text_input("Diameter","Type Here")
        Height = st.text_input("Height","Type Here")
        Whole_weight = st.text_input("Whole weight","Type Here")
        Shucked_weight = st.text_input("Shucked weight","Type Here")
        Viscera_weight = st.text_input("Viscera weight","Type Here")
        Shell_weight = st.text_input("Shell weight","Type Here")
    
    


  • 출력 필드를 정의합니다. safe_html과 같은 출력에 대해 표시할 html 텍스트를 생성하고 유사하게 warn_html 및 danger_html을 정의합니다. st.button()을 사용하여 버튼 위젯을 빌드하고 st.success()를 사용하여 모델이 값을 성공적으로 예측할 때 메시지를 표시합니다.

  •         safe_html ="""  
            <div style="background-color:#80ff80; padding:10px >
            <h2 style="color:white;text-align:center;"> The Abalone is young</h2>
            </div>
            """
            if st.button("Predict the age"):
            output = predict_age(Length,Diameter,Height,Whole_weight,
                                 Shucked_weight,Viscera_weight,Shell_weight)
            st.success('The age is {}'.format(output))
    
            if output == 1:
                st.markdown(safe_html,unsafe_allow_html=True)
            elif output == 2:
                st.markdown(warn_html,unsafe_allow_html=True)
            elif output == 3:
                st.markdown(danger_html,unsafe_allow_html=True)
    


    파이썬의 모든 모듈에는 이름이라는 특별한 속성이 있습니다. name 속성의 값은 모듈이 메인 프로그램으로 실행될 때 'main'으로 설정됩니다. 따라서 name = 'main' 인 경우 main() 함수를 호출하십시오.

    if __name__=='__main__':
        main()
    


    이제 배포를 시작하겠습니다.
    i) 로컬 컴퓨터에 streamlit을 설치합니다.
    pip install Flask
    pip install streamlit
    ii) 파일을 filename.py로 저장하고 같은 디렉터리에 final_model.pkl 파일을 추가합니다. 또는 컴퓨터에서 GitHub 리포지토리를 복제하면 됩니다.
    git clone https://github.com/Apurva-tech/abalone-age-app.git
    iii) 명령 프롬프트/터미널을 열고 파일 디렉토리로 이동합니다. 그리고 다음 명령을 실행합니다. 이렇게 하면 웹 앱이 시작됩니다.
    localhost:8501streamlit run filename.py
    값을 입력하고 예측 aaaannndd Voila를 클릭합니다!
    이로써 이 튜토리얼의 1부가 끝났습니다. 웹 앱에 대한 링크인 Heroku에서 이 웹 앱을 호스팅할 다음 부분을 기대해 주십시오. - https://abalone-age-app.herokuapp.com/ .
    거기서 보자!
    즐거운 배움 😄

    좋은 웹페이지 즐겨찾기