在当今数据科学应用需求日益增长的背景下,机器学习算法能够为企业带来显著的效益,尤其是在能够提前提供信息的情况下。将机器学习算法集成到生产系统中是一个技术挑战。机器学习算法主要分为两个阶段:训练阶段和推理阶段。训练阶段是机器学习算法使用历史数据进行开发的过程,而推理阶段则是使用机器学习方法对新数据进行预测的阶段,其结果具有不确定性。
本项目旨在通过Django API、RPC或WebSockets使机器学习算法易于访问。这种方法可以创建一个服务器,用于处理查询并将它们路由到机器学习算法。使用这种方法,可以满足机器学习生产系统的所有标准。
让创建并初始化开发环境。首先,安装所需的包,然后创建一个目录来存储Django项目,并复制到该目录中。接着,创建一个Django项目,这将包含正在开发的所有代码,包括数据库配置和应用设置。Django中的“项目”对应于正在开发的应用程序,而Django将项目中的一个包称为“应用”。主包将是API。
python3 -m venv env
source env/bin/activate
pip install django djangorestframework sklearn numpy
mkdir DjangoMLAPI
cd DjangoMLAPI
django-admin startproject api
现在,将在项目中创建一个“应用”。这将把机器学习放在API后面。将这个应用命名为soundpredictor。
cd api
python manage.py startapp soundpredictor
添加了一个名为/soundpredictor的文件夹,里面有许多文件。
为了开始项目,打开一个Jupyter笔记本。运行命令创建一个目录来存储笔记本文件。
pip3 install jupyter notebook
ipython kernel install --user --name=venv
mkdir research
cd research
jupyter notebook
这个预测分析是为了训练模型,以预测动物是否是鸭子,基于其声音。将使用虚构的数据来训练模型。算法将根据动物产生的声音来判断它是否是鸭子。
data = [
['Honk', 1],
['Woof', 0],
['ruff', 0],
['bowwow', 0],
['cackle', 1],
['moo', 0],
['meow', 0],
['clang', 1],
['buzz', 0],
['quack', 0],
['pika', 0]
]
X = []
y = []
for i in data:
X.append( i[0] )
y.append( i[1] )
接下来,将特征转换为列表,拟合一个向量化器,并转换特征。
from sklearn.feature_extraction.text import CountVectorizer
vectorize = CountVectorizer()
X_vectorized = vectorize.fit_transform(X)
最后一步是训练一个线性回归模型。
from sklearn.linear_model import LinearRegression
import numpy as np
regressor = LinearRegression()
regressor.fit(X_vectorized, y)
需要在一些示例上测试它,以检查模型是否正确工作。
test_feature = vectorizer.transform(['Honk'])
prediction = regressor.predict(test_feature)
print(prediction)
test_feature = vectorizer.transform(['bowwow'])
prediction = regressor.predict(test_feature)
print(prediction)
test_feature = vectorizer.transform(['meoww'])
prediction = regressor.predict(test_feature)
print(prediction)
模型看起来完美。将模型打包成字节流,以便将其存储在应用程序中。
import pickle
pick = {
'vectorize': vectorize,
'regressor': regressor
}
pickle.dump( pick, open( 'models' + ".p", "wb" ) )
python manage.py runserver
curl -X GET http://127.0.0.1:8000/classify/?sound=buzz
curl -X GET http://127.0.0.1:8000/classify/?sound=quack