目录

摘要

线性回归

线性回归理论推导

FLASK特性

项目结构

代码依赖库

GUI界面实现代码

序列化/反序列化

GUI显示界面运行

总结

摘要

本此演示了一种非常简单的方法来部署机器学习模型。利用线性回归使用前两个月的利率和销售额来预测第三个月的销售值。大家在进行算法研究与实现之后,可以此方法来将自己研究的模型赋予应用实现,以便他人更方便的了解你的研究性工作。

线性回归

线性回归模型的目标是找到一个或多个特征(独立变量)与连续目标变量(独立变量)之间的关系。当只有一个特征时,称为单变量线性回归;如果有多个特征,则称为多重线性回归。

线性回归理论推导

线性回归模型可用以下方程式表示:

  • Y是预测值
  • θ ₀是偏置项。
  • θ ₁,...,θ ₙ是模型参数
  • X ₁,X ₂,...,X ₙ是特征值。

FLASK特性

易于使用。
内置开发服务器和调试器。
支持集成的单元测试。
RESTful请求分派。

项目结构

该项目包括四个部分:

  1. model.py —包含用于机器学习模型的代码,该代码可根据前两个月的销售额预测第三个月的销售额。
  2. app.py-包含Flask API,它们通过GUI或API调用接收销售明细,并根据我们的模型计算预测值并返回。
  3. request.py-这使用请求模块来调用app.py中定义的API,并显示返回的值。
  4. HTML / CSS-HTML / CSS —包含HTML模板和CSS样式,允许用户输入销售明细并显示第三个月的预计销售量。

代码依赖库

  1. scikit-learn
  2. pandas
  3. numpy
  4. flask

GUI界面实现代码

系统界面HTML代码:

用户需要填写三个字段:利率、第一个月的销售额和第二个月的销售额。并点击预测,实现对第三个月的预测。

<!DOCTYPE html>
<html >
<head><meta charset="UTF-8"><title>Deployment Tutorial 1</title><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 class="login"><h1>预测销售</h1><!-- Main Input For Receiving Query to our ML --><form action="{{ url_for('predict')}}"method="post"><input type="text" name="rate" placeholder="rate" required="required" /><input type="text" name="第一个月销售额" placeholder="sales in first month" required="required" /><input type="text" name="第二个月销售额" placeholder="sales in second month" required="required" /><button type="submit" class="btn btn-primary btn-block btn-large">预测第三个月的销售量</button></form><br><br>{{ prediction_text }}</div></body>
</html>

为此项目创建了一个自定义销售数据集,该数据集包含四个个列:利率,第一个月的销售额,第二个月的销售额和第三个月的销售额。

rate sales_in_first_month sales_in_second_month sales_in_third_month
  2 500 300
  4 300 650
four 600 200 400
nine 450 320 650
seven 600 250 350
five 550 200 700

现在可以建立一个机器学习模型来预测第三个月的销售量。首先,使用pandas处理缺失值。如果某列或者某行出现空缺,则可能会发生数据丢失。如果未提供该值,将在“利率”列中填充零,并在第一个月的销售额中填写该列的平均值。预测模型使用线性回归作为机器学习算法。

序列化/反序列化

简而言之,序列化是一种在磁盘上写入python对象的方法,该对象可以转移到任何地方,然后通过python脚本反序列化(读)回去。

模型部分代码实现:

该部分主要完成对线性模型的预训练,并保存相关模型参数,在下一步使用。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pickledataset = 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]]))

APP.PY实现

接下来的部分是制作一个API,该API通过GUI接收销售数据信息,并根据我们的模型计算预测的销售值。 为此,使用python保存模型的pickled,并再此加载训练好的模型。 使用index.html设置主页。 使用POST请求将表单值提交给/ predict后,将获得预测的销售价值。

最后可以通过向发出另一个POST请求来显示结果。/results.它接收JSON输入,使用训练好的模型进行预测,然后以JSON格式返回该预测,可以通过API端点进行访问。其APP.py代码如下:

import numpy as np
from flask import Flask, request, jsonify, render_template
import pickleapp = 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)

最后,使用了request请求模块来调用中定义的API app.py。它显示第三个月的预测销售额。

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

GUI显示界面运行

代码结构:

在pycharm界面下运行app.py,出现如下界面,表明运行成功。

在浏览器中打开http://127.0.0.1:5000/,然后将显示如下所示的GUI界面。

点击预测,输出预测销售结果:

总结

需要全部源码加Q:525894654;部署机器学习模型或将模型投入生产意味着将模型提供给最终用户或系统。但是,机器学习模型的部署存在复杂性,因此,大家可以根据实际需求进行自己的算法研究,根据该博客解释的方法将算法研究的结果应用可视化的展示。

Flask部署机器学习模型---基于线性回归模型的销售预测系统实现简易版代码相关推荐

  1. 机器学习入门实践——线性回归模型(波士顿房价预测)

    机器学习入门实践--线性回归模型(波士顿房价预测) 一.背景介绍 给定一个大小为 n n n的数据集 { y i , x i 1 , . . . , x i d } i = 1 n {\{y_{i}, ...

  2. R语言基于lm模型构建线性回归模型(蟋蟀的鸣叫声与温度的关系)、计算回归模型的RMSE指标、计算回归模型的R方指标(R-squared)

    R语言基于lm模型构建线性回归模型(蟋蟀的鸣叫声与温度的关系).计算回归模型的RMSE指标.计算回归模型的R方指标(R-squared) 目录

  3. flask部署机器学习_如何开发端到端机器学习项目并使用Flask将其部署到Heroku

    flask部署机器学习 There's one question I always get asked regarding Data Science: 关于数据科学,我经常被问到一个问题: What ...

  4. 使用opencv训练目标检测模型基于cascade模型

    使用opencv训练目标检测模型基于cascade模型 基于Haar特征的cascade分类器(classifiers) 是Paul Viola和 Michael Jone在2001年,论文" ...

  5. 基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)

    摘要:本文介绍了一种MATLAB实现的目标检测系统代码,采用 YOLOv4 检测网络作为核心模型,用于训练和检测各种任务下的目标,并在GUI界面中对各种目标检测结果可视化.文章详细介绍了YOLOv4的 ...

  6. 基于jQuery仿QQ音乐播放器网页版代码

    基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览    源码下载 实现的代码. html代码: <div class=" ...

  7. 基于Java基础-面向对象实现植物大战僵尸简易版

    基于Java基础-面向对象实现植物大战僵尸简易版 前言 游戏设计 游戏对象 游戏内容 游戏优化 放置植物的优化 移除植物的优化 游戏可玩性的优化 添加游戏背景音乐 后续优化 源码分享 前言 从零开始学 ...

  8. 机器学习课后题——线性回归模型

    第5章 线性回归模型 5.1 试分析在什么情况下,式fx=wTx+b 不必考虑偏置项b. 答:我的看法是,如果样本 x  中有某一个属性 xi  为固定值时,wixi+b 等价于偏置项. 即此时  w ...

  9. 机器学习10—多元线性回归模型

    多元线性回归模型statsmodelsols 前言 什么是多元线性回归分析预测法 一.多元线性回归 二.多元线性回归模型求解 2.1最小二乘法实现参数估计-估计自变量X的系数 2.2决定系数:R² 与 ...

  10. [云炬python3玩转机器学习] 6-4 在线性回归模型中使用梯度下降法

    在线性回归模型中使用梯度下降法 In [1]: import numpy as np import matplotlib.pyplot as plt import datetime;print ('R ...

最新文章

  1. 分享:用promise封装ajax
  2. POJ - 1961 最小循环节
  3. 调整png的不透明度_悄悄告诉你:11个高质量PNG素材来源,再也不用抠图了~
  4. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
  5. m5310模组数据上传至onenet_基于Semtech SX1276RF1KAS SPI模组及ATMEGA328架构下之烟雾气体感测方案...
  6. Gradle+IDEA使用说明
  7. postman怎么传session_Day 47: 不搞懂Cookie和session誓不罢休
  8. java中程序跳转_java程序中先后台交互的两种实现方式以及页面之间的跳转
  9. Java和Go的GC差异
  10. android无法解码avcmp4,android - Android中的MediaCodec编码的H.264 avc视频无法播放 - 堆栈内存溢出...
  11. Axure原型分类及存在意义
  12. 何凯明新作MAE 学习笔记
  13. 低分辨率的显示器模拟高分辨率显示模式
  14. oracle里round函数补0,Oracle的Round函数
  15. 方图来袭,且看483万亿美元的场外衍生品市场如何风云变幻
  16. 联系人管理-添加/修改/删除联系人/条件查询/解决与客户之间的问题| CRM客户关系管理系统项目实战五(Struts2+Spring+Hibernate)解析+源代码
  17. php配置站点报错403,phpstudy V8 报403错误怎么办
  18. 【解决办法】ES文件浏览器无法播放该链接
  19. c#程序设计 习题7.3
  20. IJCAI 阿里论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了

热门文章

  1. c语言标准库详解(九):实用函数stdlib.h
  2. ssb的matlab仿真,单边带调制(SSB调制)的理论基础和MATLAB仿真
  3. java实现简单泡泡屏保动画及点击变实心泡泡
  4. 电子计算机发明于20世纪什么年代,电子计算机发明于哪一年
  5. 高冷一字id_一个字的网名-一个字网名带符号-一字网名大全-腾牛个性网
  6. 英特尔与世界自然基金会携手 用人工智能技术保护东北虎
  7. ORA-01950: 对表空间 USERS无权限
  8. 桌面虚拟化中RDS、VDI、IDV、VOI主流的云桌面技术比较
  9. 不用安装Wincap程序实现ARP广播包的发送和接收
  10. Unison 的相关参数介绍