使用Flask和Python在Web上部署机器学习模型

创建机器学习模型并对现实问题进行预测听起来很酷。但是,除了模型的创建者之外,这对其他任何人都没有什么用,因为它只能在他们的机器上使用。

在本文中,我们将介绍如何使用Flask(用于在Python中构建网站和API的微框架)来构建Web API

image

让我们通过在Python中构建一个简单的线性回归模型来开始该过程

第一步。使用Scikit Learn导入构建线性回归模型所需的所有必要库

在这里,我使用homeprices.csv文件来训练我们的模型,该模型具有两个功能,面积和房价。

image

第二步。使用熊猫读取数据并定义我们的变量进行训练

model_1.py

import pandas as pd
import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt

model_2.py

df = pd.read_csv('homeprices.csv')

x=df[['area']]
y=df[['price']]

第三步。训练我们的模型

第四步。计算分数和系数,并对面积变量的某个值进行预测。
model_3.py

reg = linear_model.LinearRegression()
reg.fit(x,y)

model_4.py

print(reg.score(x,y))
print(reg.predict([[3300]]))
print(reg.coef_)
print(reg.intercept_)

现在我们的简单线性回归模型已经准备就绪,让我们着手进行模型持久化并将以上内容另存为.pkl文件
model.py

from sklearn.externals import joblib
joblib.dump(reg,"linear_reg.pkl")
image

现在,我们的模型已保存,可以随时通过再次加载该模型进行重用。

让我们使用Flask构建一个Web API,并了解以简单方式实现相同目的的过程。

Flask简介

如果您下载了Anaconda发行版,则已经安装了Flask,否则,您将必须使用—自行安装pip install flask。

Flask非常少,因为您只在需要时才引入零件。为了演示这一点,这里是Flask代码,用于创建一个非常简单的Web服务器。

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"
if __name__ == '__main__':
    app.run(debug=True)

执行后,您可以导航到终端上显示的网址,并观察预期的结果。

image

让我们回顾一下所执行的代码在做什么。

导入后,我们创建Flask类的实例,并传入namePython为我们填充的变量。"main"如果此文件直接作为脚本通过Python运行,则此变量为。如果我们改为导入文件,则的值name将是我们进行导入的文件的名称。举例来说,如果我们有test.py和run.py,和我们进口test.py到run.py该name值test.py会test。

在我们的hello方法定义上方,有@app.route("/")一行。的@表示装饰,这允许功能,属性,或类是先于被动态改变。

该hello方法是在我们的应用程序或API的路由达到顶级路由时,我们将代码运行的地方/。

如果我们的name变量main,指示我们直接运行文件而不是导入文件,那么它将启动Flask应用程序,该应用程序将运行并等待Web请求,直到过程结束。

创建API

预测API

预测API非常简单。我们将其数据,房屋面积提供给我们,并将其传递给我们predict的模型方法。

from flask import Flask,jsonify,request
from sklearn.externals import joblib
app = Flask(__name__)

@app.route("/", methods=['POST','GET'])
def index():
    if(request.method == 'POST'):
        data = request.get_json()
        house_price = float(data["area"])
        lin_reg = joblib.load("./linear_reg.pkl")
        return jsonify(lin_reg.predict([[house_price]]).tolist())
    else:
        return  jsonify({"about":"Hello World"})

if __name__ == '__main__':
    app.run(debug=True)

这里发生了很多事情,所以让我们分解一下。

与上面介绍Flask的代码相似,我们称@app.route装饰器。

在路由方法定义中,我们将请求方法限制为GET / POST,如果这样,我们将获取请求主体的JSON,以便我们可以访问其数据。使用该变量,我们可以访问所需数据的键,area并将其解析为浮点数。我们还将模型从持久性文件加载到内存中。

如果解析数据没有错误,则将解析后的变量传递到predict线性回归模型的方法中。在启动时加载Flask应用时,变量被拉入内存。接下来,我们必须将predict方法的输出更改为列表,因为没有它,我们将得到一个错误:Object of type 'ndarray' is not JSON serializable。然后,我们调用Flask方法将响应数据作为JSON发送。

现在我们可以运行我们的API(在PyCharm中,您可以右键单击脚本中的任意位置,然后单击“运行”)。通过运行我们的API,我们可以执行代码来调用它。

import requests

data = {"area": 3300}
response = requests.post("{}/".format("http://127.0.0.1:5000"), json =data )
print("Price of the house should be "+ str(response.json()))

最后,我们可以在终端上看到输出。

image

在这篇文章中,我们了解了Flask是什么,如何使用它来创建API,最重要的是,如何应用这些知识来创建与机器学习模型进行交互的API。

希望本教程对您有所帮助,谢谢您的阅读。我对您的想法感到好奇,所以打了一些评论给我。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354