作者 | Abhinav Sagar

翻译 | 申利彬

校对 | 吴金笛

来源 | 数据派THU(ID:DatapiTHU)

本文旨在让您把训练好的机器学习模型通过Flask API 投入到生产环境 。当数据科学或者机器学习工程师使用Scikit-learn、Tensorflow、Keras 、PyTorch等框架部署机器学习模型时,最终的目的都是使其投入生产。通常,我们在做机器学习项目的过程中,将注意力集中在数据分析,特征工程,调整参数等方面。但是,我们往往会忘记主要目标,即从模型预测结果中获得实际的价值。部署机器学习模型或者将模型投入生产,意味着将模型提供给最终的用户或系统使用。然而机器学习模型部署具有一定的复杂性,本文可以让你把训练好的机器学习模型使用Flask API 投入生产环境。我将使用线性回归,通过利率和前两个月的销售额来预测第三个月的销售额。线性回归是什么?线性回归模型的目标是找出一个或多个特征(自变量)和一个连续目标变量(因变量)之间的关系。如果只有一个特征,则称为单变量线性回归;如果有多个特征,则称为多元线性回归。线性回归的假设线性回归模型可以用下面的等式表示:线性回归图解为什么使用Flask?

  • 容易上手使用
  • 内置开发工具和调试工具
  • 集成单元测试功能
  • 平稳的请求调度
  • 详尽的文档

项目结构这个项目分为四个部分:1. model.py -- 包含机器学习模型的代码,用于根据前两个月的销售额预测第三个月的销售额。2. app.py – 包含用于从图形用户界面(GUI)或者API调用获得详细销售数据的Flask API,Flask API根据我们的模型计算预测值并返回。3. request.py -- 使用requests模块调用app.py中定义的API并显示返回值。4. HTML/CSS – 包含HTML模板和CSS风格代码,允许用户输入销售细节并显示第三个月的预测值。部署机器学习模型的Pipeline环境和工具1. Scikit-learn2. Pandas3. Numpy4. Flask代码在哪里呢?从代码开始,完整的项目可以在github上找到(https://github.com/abhinavsagar/Machine-Learning-Deployment-Tutorials)。我们使用HTML构建前端,让用户输入数据。这里有三个区域需要用户去填写—利率,第一个月的销售额以及第二个月的销售额。

html><html ><head> <meta charset="UTF-8"> <title>Deployment Tutorial 1title> <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'><link href='https://fonts.googleapis.com/css?family=Arimo' rel='stylesheet' type='text/css'><link href='https://fonts.googleapis.com/css?family=Hind:300' rel='stylesheet' type='text/css'><link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'><link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">head><body style="background: #000;"><div><h1>Sales Forecastingh1>       <form action="{{ url_for('predict')}}"method="post"><input type="text" name="rate" placeholder="rate" required="required" /> <input type="text" name="sales in first month" placeholder="sales in first month" required="required" /><input type="text" name="sales in second month" placeholder="sales in second month" required="required" />    <button type="submit" class="btn btn-primary btn-block btn-large">Predict sales in third monthbutton> form> <br> <br>   {{ prediction_text }} div>body>html>

接下来,使用CSS对输入按钮、登录按钮和背景进行了一些样式设置。

@import url(https://fonts.googleapis.com/css?family=Open+Sans);html { width: 100%; height:100%; overflow:hidden; 
}body {width: 100%;height:100%;font-family: 'Helvetica';background: #000;color: #fff;font-size: 24px;text-align:center;letter-spacing:1.4px;}.login {position: absolute;top: 40%;left: 50%;margin: -150px 0 0 -150px;width:400px;height:400px;}

login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3);letter-spacing:1px;text-align:center; 
  }input {width: 100%;margin-bottom: 10px;background: rgba(0,0,0,0.3);border: none;outline: none;padding: 10px;font-size: 13px;color: #fff;text-shadow: 1px 1px 1px rgba(0,0,0,0.3);border: 1px solid rgba(0,0,0,0.3);border-radius: 4px;box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);-webkit-transition: box-shadow .5s ease;-moz-transition: box-shadow .5s ease;-o-transition: box-shadow .5s ease;-ms-transition: box-shadow .5s ease;transition: box-shadow .5s ease;
  }

我为这个项目创建了一个定制的销售数据集,它有四列——利率、第一个月的销售额、第二个月的销售额和第三个月的销售额。我们现在构建一个机器学习模型来预测第三个月的销售额。首先使用Pandas解决缺失值问题,当一项或多项指标没有信息时,就会有缺失值发生。使用0填充利率这一列的缺失值,平均值填充第一个月销售额中的缺失值,采用线性回归的机器学习算法。序列化和反序列化简而言之,序列化是一种在磁盘上写入python对象的方法,该对象可以传输到任何地方,然后通过python脚本反序列化(读)回去。序列化 反序列化使用Pickling将是python对象形式的模型转为字符流形式,其思想是这个字符流中包含了在另一个python脚本中重建这个对象所需的所有信息。

import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport pickle
dataset = pd.read_csv('sales.csv')
dataset['rate'].fillna(0, inplace=True)
dataset['sales_in_first_month'].fillna(dataset['sales_in_first_month'].mean(), inplace=True)
X = dataset.iloc[:, :3]def convert_to_int(word):
    word_dict = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8,'nine':9, 'ten':10, 'eleven':11, 'twelve':12, 'zero':0, 0: 0}return word_dict[word]
X['rate'] = X['rate'].apply(lambda x : convert_to_int(x))
y = dataset.iloc[:, -1]from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X, y)
pickle.dump(regressor, open('model.pkl','wb'))
model = pickle.load(open('model.pkl','rb'))
print(model.predict([[4, 300, 500]]))

下一部分是构建一个API,反序列化这个模型为python对象格式,并通过图形用户界面(GUI)获取详细销售数据,根据模型计算预测值。我使用index.html设置主页,并在使用POST请求方式提交表单数据时,获取预测的销售值。可以通过另一个POST请求将结果发送给results并展示出来。它接收JSON格式的输入,并使用训练好的模型预测出可以被API端点接受的JSON格式的预测值。

import numpy as np
from flask import Flask, request, jsonify, render_template
import pickle
app = Flask(__name__)model = pickle.load(open('model.pkl', 'rb'))
@app.route('/')def home():  return render_template('index.html')
  @app.route('/predict',methods=['POST'])def predict(): 
     int_features = [int(x) for x in request.form.values()]
         final_features = [np.array(int_features)]  
           prediction = model.predict(final_features)
               output = round(prediction[0], 2) return render_template('index.html', prediction_text='Sales should
              be $ {}'.format(output))
@app.route('/results',methods=['POST'])def results():
    data = request.get_json(force=True)
    prediction = model.predict([np.array(list(data.values()))])
    output = prediction[0]return jsonify(output)if __name__ == "__main__":
app.run(debug=True)

最后使用requests模块调用在app.py中定义的APIs,它的结果是第三个月销售额的预测值。

import requests
url = 'http://localhost:5000/results'
r = requests.post(url,json={'rate':5, 'sales_in_first_month':200, 'sales_in_second_month':400})print(r.json()) Results

使用下面的命令运行Web应用程序。python app.py在web浏览器中打开http://127.0.1:5000/,将显示如下所示的GUI.原文标题:How to Easily Deploy Machine Learning Models Using Flask原文链接:https://www.kdnuggets.com/2019/10/easily-deploy-machine-learning-models-using-flask.html编辑:王菁校对:王欣

扫码查看原文

▼▼▼

(*本文为AI科技大本营转载文章,转载联系原作者)

精彩推荐

2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。6.6 折票限时特惠(立减1400元),学生票仅 599 元!

推荐阅读

  • ICCV 2019 | 无需数据集的Student Networks

  • 朱松纯:走向通用人工智能——从大数据到大任务

  • 行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019

  • 2019年不可错过的45个AI开源工具,你想要的都在这里

  • 宿命之战:程序员VS产品经理

  • 美国爆料:量子计算机将如何颠覆一切?

  • “老赖”罗永浩:就算“卖艺”也会还债,孙宇晨:我买

  • 重磅 | 边缘计算核心技术辨析

  • 全民编程时代,程序员该如何保住饭碗?

  • 中国区块链标准往事

你点的每个“在看”,我都认真当成了AI

head first html与css 代码_手把手教你使用Flask轻松部署机器学习模型(附代码amp;链接) | CSDN博文精选...相关推荐

  1. 手把手教你使用Flask轻松部署机器学习模型(附代码链接) | CSDN博文精选

    作者 | Abhinav Sagar 翻译 | 申利彬 校对 | 吴金笛 来源 | 数据派THU(ID:DatapiTHU) 本文旨在让您把训练好的机器学习模型通过Flask API 投入到生产环境  ...

  2. 独家 | 手把手教你如何使用Flask轻松部署机器学习模型(附代码链接)

    作者:Abhinav Sagar 翻译:申利彬 校对:吴金笛 本文约2700字,建议阅读7分钟. 本文可以让你把训练好的机器学习模型使用Flask API 投入生产环境. 本文旨在让您把训练好的机器学 ...

  3. iir数字滤波器_手把手教系列之一阶数字滤波器设计实现(附代码)

    [导读] 前面分享了 IIR/FIR/mean/梳状数字滤波器的具体设计实现,这几种使用起来或许觉得计算量大,相对复杂.实际工程应用中通常有必要过滤来自传感器或音频流的数据,以抑制不必要的噪声.有的应 ...

  4. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  5. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  6. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  7. python数据预测代码_手把手教你用Python玩转时序数据,从采样、预测到聚类丨代码...

    原标题:手把手教你用Python玩转时序数据,从采样.预测到聚类丨代码 原作 Arnaud Zinflou 郭一璞 编译 时序数据,也就是时间序列的数据. 像股票价格.每日天气.体重变化这一类,都是时 ...

  8. js如何运行python代码_手把手教你如何使用Python执行js代码

    前言 各位小伙伴,大家好,这次咱们来说一下关于爬虫方向的一个知识,Python如何执行js,快来看看吧!!! 为什么要引出Python执行js这个问题? 都说术业有专攻,每个语言也都有自己的长处和短处 ...

  9. python bokeh教程_手把手教你用Bokeh进行可视化数据分析(附源码)

    Bokeh与Python可视化领域中的流行库Matplotlib和Seaborn不同,它使用HTML和JavaScript渲染其图形,这使得它在构建基于Web的应用中成为一个非常理想的候选者.它对于探 ...

  10. 独家 | 手把手教你组织数据科学项目!(附代码)

    作者:kdnuggets 翻译:和中华 校对:丁楠雅 本文约4200字,建议阅读10分钟. 本文介绍了一个工具可以帮助迅速构建一个标准但灵活的数据科学项目结构,便于实施和分享数据科学工作. 由Driv ...

最新文章

  1. 按树型显示BOM的结构
  2. java 集成grizzly_java – 与Jersey和Spring集成Grizzly2.2.X
  3. ABAP 7.4 新语法-内嵌生命和内表操作
  4. ACM竞赛学习整理--矩阵运算
  5. IIS 部署asp.net Core程序注意事项
  6. 飞机订票系统的html模板,飞机订票系统程序设计
  7. matlab中图像处理的基本函数(1)
  8. MQTT基础:本地网页控制LED灯(SIOT+MQTT+掌控板)
  9. xcode swift_CocoaPods Swift XCode教程
  10. Android---------------ContentProvider的学习
  11. 基于python的电影推荐系统论文_一种电影推荐系统的设计与实现
  12. python中json是什么意思_python中json是什么
  13. 无法识别 移动固态硬盘_安上硬盘后不显示 千万别慌可能不是SSD坏了
  14. 猴子偷桃c语言编程软件,C语言实现的猴子偷桃之类算法
  15. Dreamweaver CS5网页制作教程
  16. 深度分析Palantir的投资价值,Palantir2023年将实现强劲反弹?
  17. 老说技术更迭快,可十年到底可以淘汰多少知识?
  18. python形态选股_用Python选一个自己的股票池!堪比资深的炒股选手!
  19. 解决ubuntu Certificate verification failed: The certificate is NOT trusted.
  20. python登录系统账号检测_一种基于python的惠普打印机默认用户名密码检测方法与流程...

热门文章

  1. java ftl 模板 输出list_关于在freemarker模板中遍历数据模型ListJavaBean的经验
  2. 使用MyBatis后,DAO层的方法还能重载吗?
  3. 单元测试框架TestableMock快速入门(七):常用注解参数
  4. django实现目录上传(最简单的方法)
  5. 富士胶片携数据磁带亮相大数据产业博览会
  6. eclipse最有用快捷键整理
  7. iscsi实现多路径
  8. SpaceSniffer 界面让我眼前一亮
  9. java web中的监听器
  10. 集群、分布式架构与SOA架构