-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpython_model_api.py
63 lines (44 loc) · 1.7 KB
/
python_model_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
###############################################################################
# Train the model
###############################################################################
import numpy as np
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf = GradientBoostingClassifier()
clf.fit(X, y)
print(cross_val_score(clf, X, y, cv=5))
###############################################################################
# Save out the model object
###############################################################################
from sklearn.externals import joblib
# Save the pickle file to the file system
joblib.dump(clf, 'model.pkl')
###############################################################################
# Build the API Call
###############################################################################
import numpy as np
from sklearn.externals import joblib
from flask import Flask, request, jsonify
import pandas as pd
app = Flask(__name__)
@app.route('/', methods=('POST',))
def GetPrediction():
if request.content_type != 'application/json':
return 'submit as a json file'
try:
json_ = request.json
new_X = pd.DataFrame([json_])
# For simplicity, set up for a single observation
prediction = clf.predict(new_X)
prediction = np.asscalar(prediction)
print(type(prediction))
return jsonify({'prediction': prediction})
except ValueError:
return jsonify({'value error': 1})
if __name__ == '__main__':
# And load it back up
clf = joblib.load('model.pkl')
app.run(port=5003)