개요
- Python Django와 Sklearn을 활용하여 간단한 iris prediction 웹을 만들어본다.
사전준비
- 머신러닝 기본 이론 및 원리는 어느정도 알고 있다고 가정한다.
- Django 앱에 대해 어느정도 알고 있다고 가정한다.
무엇을 배우는가?
- 머신러닝 모델을 활용하여 배포하는 과정을 배운다.
가상환경 설정
$ virtualenv venv
created virtual environment CPython3.9.1.final.0-64 in 475ms
creator CPython3Posix(dest=/Users/evan/Desktop/django-iris-tutorial/venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/evan/Library/Application Support/virtualenv)
added seed packages: pip==22.1.1, setuptools==62.3.2, wheel==0.37.1
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
$ source venv/bin/activate
(venv) $
- 크게 3개의 라이브러리를 설치한다.
- jupyterlab : 머신러닝 개발 과정을 진행할 에디터로 활용한다.
- sklearn : 머신러닝 개발 관련 라이브러리이다.
- django : django 웹 프레임워크 라이브러리이다.
(venv) $ pip install jupyterlab sklearn django
머신러닝 개발
- iris 데이터를 불러오고 sklearn을 활용하여 모형 개발을 진행한다.
- 모형 개발 시, 주요 Feature Engineering 과정은 생략한다.
(1) 모형 개발
(venv) $ python -m jupyterlab
# Module 불러오기
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import pandas as pd
# 데이터셋 불러오기
df = pd.read_csv("data/iris.csv")
# 독립변수와 종속변수 분리
X = df[['sepal_length','sepal_width','petal_length','petal_width']]
y = df['classification']
# 훈련데이터와 종속데이터 분리
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.20, random_state=1)
# 모형 학습
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
# 모형 예측
sepal_length = float(1.5)
sepal_width = float(5)
petal_length = float(4)
petal_width = float(3)
result = model.predict([[sepal_length,sepal_width,petal_length,petal_width]]) # input must be 2D array
print(result)
['Iris-virginica']
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/base.py:445: UserWarning: X does not have valid feature names, but SVC was fitted with feature names
warnings.warn(
(2) 모형 저장
- pickle을 통해 모형 저장을 할 수 있다.
pd.to_pickle(model, r'models/svc_model.pickle')
Django 시작
(venv) $ django-admin startproject iris
(venv) $ cd iris
(venv) $ python manage.py startapp predict
settings.py
iris/settings.py를 열고 아래와 같이 수정한다.
.
.
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'predict',
]
.
.
urls.py
iris/urls.py를 열고 아래와 같이 수정한다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('predict.urls', namespace='predict'))
]
predict/urls.py를 새로 생성하고 아래와 같이 코드를 추가한다.
from django.urls import path
from . import views
app_name = 'predict'
urlpatterns = [
path('', views.predict, name='predict'),
]
views.py
- 이제
predict/views.py에서 predict 함수를 만들어 백엔드 처리를 진행하고, 최종 결괏값을 predict.html로 돌려주는 함수를 구현할 것이다.
from django.shortcuts import render
# Create your views here.
def predict(request):
return render(request, 'predict.html', {})
predict.html
predict/templates 폴더를 만들고, predict.html 파일을 새로 생성한다.
- predict.html 파일이 잘 열리는지 확인한다.
(venv) iris$ python manage.py runserver
