플라스크를 사용하여 기계 학습 모델 배포
기계 학습 초보자로서 기계 학습 및 딥 러닝을 위한 모든 알고리즘에 대한 충분한 리소스를 누구나 쉽게 얻을 수 있지만 ML 모델을 프로덕션에 배포하기 위한 참조를 찾기 시작했을 때 좋은 리소스를 찾지 못했습니다. 내가 이 분야에 아주 익숙하기 때문에 내 모델을 배포하는 데 도움이 될 수 있습니다. 그래서 Heroku에서 Flask를 사용하여 내 모델을 배포하는 데 성공했을 때 다른 사람들이 모델을 간단하게 배포할 수 있도록 돕기 위해 기사를 작성하기로 결정했습니다. 나는 그것이 도움이되기를 바랍니다 :)
Live Demo
이 기사에서는 단순화를 위해 scikit-learn과 함께 간단한 로지스틱 회귀 알고리즘을 사용하고 매우 가벼운 웹 프레임워크인 Flask를 사용합니다. 우리는 두 개의 파일을 만들 것입니다.
model.py 파일에서 우리는 모델을 개발하고 훈련할 것이고, app.py에서는 POST 요청을 처리하고 결과를 반환하도록 코딩할 것입니다.
이 파일에서 ML 모델을 개발하고 훈련합니다. 증상을 바탕으로 사람의 심장병을 예측합니다. 데이터 세트here를 찾을 수 있습니다.
import pandas as pd
import sys
import numpy as np
import pickle
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
모델을 개발하는 데 사용할 라이브러리를 가져옵니다. NumPy와 pandas는 행렬과 데이터를 각각 조작하고, sklearn.model_selection은 데이터를 훈련 세트와 테스트 세트로 분할하고, sklearn.linear_model은 LogisticRegression을 사용하여 모델을 훈련시킵니다. 피클을 사용하여 훈련된 모델을 디스크에 저장합니다.
df=pd.read_csv('heart-data.csv')
x=df.drop('target', axis=1)
y=df['target']
Pandas를 사용하여 데이터 세트를 가져오고 기능과 레이블을 데이터 세트에서 분리했습니다.
train_x,valid_x,train_y,valid_y=train_test_split(x,y,test_size=0.3,random_state=35)
이 섹션에서는 sklearn의 train_test_split을 사용하여 데이터를 각각 0.70 및 0.30의 훈련 및 테스트 크기로 분할했습니다.
logr=LogisticRegression()
logr.fit(train_x,train_y)
result=logr.predict(valid_x)
객체는 LogisticRegression() 클래스의 logr로 인스턴스화되고 tarin_x 및 train_y를 사용하여 훈련됩니다. 나중에 예측된 결과가 결과에 저장됩니다.
pickle.dump(logr,open('model.pkl','wb'))
model=pickle.load(open('model.pkl','rb'))
피클 라이브러리를 사용하여 훈련된 모델을 디스크에 저장합니다. Pickle은 Python 개체 구조를 직렬화 및 역직렬화하는 데 사용됩니다. 파이썬 객체가 바이트 스트림으로 변환되는 곳.
우리의 경우 서버에서 사용할 수 있도록 모델을 저장하려고 합니다. 따라서 객체 logr을 model.pkl이라는 파일에 저장합니다.
여기서 model.py는 모델을 훈련하고 저장할 준비가 되었습니다. model.py의 전체 코드는 다음과 같습니다.
# Importing the libraries
import pandas as pd
import sys
import numpy as np
import pickle
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Importing the dataset
df=pd.read_csv('heart-data.csv')
df.rename(columns={"class":"target"},inplace=True)
df['target'].replace(['absent','present'],[0,1],inplace=True)
df=pd.get_dummies(df)
x=df.drop('target', axis=1)
y=df['target']
#Splitting the dataset into the Training set and Test set
train_x,valid_x,train_y,valid_y=train_test_split(x,y,test_size=0.3,random_state=35)
# Fitting Simple Linear Regression to the Training set
logr=LogisticRegression()
logr.fit(train_x,train_y)
pickle.dump(logr,open('model.pkl','wb'))
model=pickle.load(open('model.pkl','rb'))
# Predicting the Test set results
result=model.predict(valid_x)
print(result)
2.app.py
이 파일에서 플라스크 웹 프레임워크를 사용하여 UX에서 가져올 POST 요청을 처리합니다.
코드에서 사용할 메서드 및 라이브러리를 가져옵니다.
from flask import Flask
from flask import render_template,redirect,request
import pandas as pd
import sys
import numpy as np
import pickle
다음 코드 섹션에서는 Flask()의 인스턴스를 만들고 모델을 모델에 로드했습니다.
app=Flask(__name__)
model=pickle.load(open('model.pkl','rb'))
여기에 result() 메서드가 있습니다. 어떤 resut 메소드가 사용자가 전달한 양식에서 데이터를 가져옵니다. model.predict() 메서드는 양식에서 입력을 받아 2D numpy 배열로 변환합니다. 결과는 result라는 변수에 저장되고 이 변수를 반환합니다.
@app.route("/result", methods = ['POST', 'GET'])
def result():
if request.method=='POST':
#geting data from html form
age=request.form["age"]
.
.
# after geting data appending in a list
lst=list()
lst.append((age))
lst.append((sex))
lst.append((chest))
lst.append((resting_blood_pressure))
lst.append((serum_cholestoral))
lst.append((fasting_blood_sugar))
lst.append((resting_electrocardiographic_results))
lst.append((maximum_heart_rate_achieved))
lst.append((exercise_induced_angina))
lst.append((oldpeak))
lst.append((slope))
lst.append((number_of_major_vessels))
lst.append((thal))
# converting list into 2 D numpy array
ans=model.predict([np.array(lst,dtype='int64')])
result=ans[0]
return render_template("result.html",result=result)
else:
return render_template("index.html")
마지막으로 다음 코드 섹션에서 앱을 실행합니다. 여기에서는 포트 5000을 사용하고 debug=True로 설정했습니다. 오류가 발생하면 이를 디버깅하고 해결할 수 있기 때문입니다.
if __name__=='__main__':
app.run(port=5000,debug=True)
내 Github 저장소heart-disease-predictor에서 모든 코딩을 찾을 수 있습니다.
주저하지 말고 아래 댓글 섹션에 아이디어를 입력하세요.
고맙습니다 :)
Reference
이 문제에 관하여(플라스크를 사용하여 기계 학습 모델 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mjmaurya/deploy-a-machine-learning-model-using-flask-50m4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)