python数据挖掘模型的API部署

This post was kindly contributed by 数据科学中的R和Python - go there to comment and to read the full post.

前文谈到了如何把一个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()