前文谈到了如何把一个R语言的挖掘模型进行在线部署,也就是生成一个API。本文则是同样的思路,只不过是来尝试将python的数据挖掘模型部署成一个API。由于python是通用型的编程语言,部署起来方便一些。下面的例子仍是一个简单的模型,用来预测iris种类。在mac系统中完成,使用了python的几个包:
flask 一个轻量级的web框架
flask.ext.restful 快速生成restful api
numpy 数值计算包
pickle 用来保存模型
sklearn 用来建模
只需要四个步骤:
步骤1:建立模型
步骤2:模型写入pickle文件
步骤3:构建一个基于flask的API
步骤4:通过API调用模型
第一步是用sklearn建模。
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
from pickle import dump
df = pd.read_csv('iris.csv')
X = df.ix[:,:4].values
y = df.ix[:,4].values
model = DecisionTreeClassifier()
model.fit(X,y)
第二步是将模型写入到pickle文件中
dump(model, open('model.pickle','wb'))
第三步是构建一个API,写一个server.py文件
from flask import Flask, request
from flask.ext.restful import Resource, Api
import numpy as np
from pickle import load
from sklearn.tree import DecisionTreeClassifier
app = Flask(__name__)
api = Api(app)
model = load(open('model.pickle','rb'))
class TodoSimple(Resource):
def put(self, todo_id):
newx = eval(request.form['data'])
newx = np.array(newx)
res = model.predict(newx)
return res.tolist()
api.add_resource(TodoSimple, '/')
if __name__ == '__main__':
app.run(debug=True)
保存好py文件后启用它。
python server.py
API会在如下地址监听
Running on http://127.0.0.1:5000/
第四步是调用这个API。另开一个终端,输入
curl http://localhost:5000/todo1 -d "data=[4.9,3.,1.4,0.2]" -X PUT
成功返回
[
"setosa"
]
也可以在python中实验。
from request import put
put('http://localhost:5000/m1', data={'data': '[ 4.9, 3. , 1.4, 0.2]'}).json()
flask 一个轻量级的web框架
flask.ext.restful 快速生成restful api
numpy 数值计算包
pickle 用来保存模型
sklearn 用来建模
只需要四个步骤:
步骤1:建立模型
步骤2:模型写入pickle文件
步骤3:构建一个基于flask的API
步骤4:通过API调用模型
第一步是用sklearn建模。
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
from pickle import dump
df = pd.read_csv('iris.csv')
X = df.ix[:,:4].values
y = df.ix[:,4].values
model = DecisionTreeClassifier()
model.fit(X,y)
第二步是将模型写入到pickle文件中
dump(model, open('model.pickle','wb'))
第三步是构建一个API,写一个server.py文件
from flask import Flask, request
from flask.ext.restful import Resource, Api
import numpy as np
from pickle import load
from sklearn.tree import DecisionTreeClassifier
app = Flask(__name__)
api = Api(app)
model = load(open('model.pickle','rb'))
class TodoSimple(Resource):
def put(self, todo_id):
newx = eval(request.form['data'])
newx = np.array(newx)
res = model.predict(newx)
return res.tolist()
api.add_resource(TodoSimple, '/
if __name__ == '__main__':
app.run(debug=True)
保存好py文件后启用它。
python server.py
API会在如下地址监听
Running on http://127.0.0.1:5000/
第四步是调用这个API。另开一个终端,输入
curl http://localhost:5000/todo1 -d "data=[4.9,3.,1.4,0.2]" -X PUT
成功返回
[
"setosa"
]
也可以在python中实验。
from request import put
put('http://localhost:5000/m1', data={'data': '[ 4.9, 3. , 1.4, 0.2]'}).json()