机器学习系列8 基于Python构建Web应用以使用机器学习模型

简介: 👽👽👽在本文中,我将带你使用Python的Flask框架与Pickle模块构建了Web应用程序,在UFO目击数据集上构建了逻辑回归多分类模型,并将其集成在Web程序中。🏆🏆🏆

 image.gif编辑

本文所用数据及源码免费下载

目录

一、内容介绍

二、应用构建

1.构建机器学习Web应用的思考

①思考问题

②几种构建机器学习模型 Web 应用的方法。

2.工具安装

3.数据预处理

①数据加载及查看

②数据处理及特征选择

4.机器学习模型构建

①数据集划分

②调用逻辑回归模型训练多分类模型

5.“腌制”你的模型

6.配置Flask应用

①创建应用文件夹

②构建网页样式style.css文件

③构建Web界面内容index.html文件

④构建Python后端app.py文件

7.运行Flask应用

三、内容总结

🚀挑战

课后测验


一、内容介绍

  在本文中,我将使用上世纪UFO目击事件数据集👽👽👽训练机器学习模型,并将其部署为Web应用。

你将学到:

0 如何“腌制”训练有素的模型

1 如何在 Flask 应用中使用该机器学习模型

  我们继续使用Jupyter notebook来清理数据和训练我们的模型,当然你也可以使用已训练好的模型来直接进入Web模型部署阶段。

  在模型部署中,我们需要使用 Flask框架构建一个 Web 应用程序。

 

二、应用构建

1.构建机器学习Web应用的思考

  假如你正在一家企业中工作,其中数据科学部门训练了一个机器模型,他们希望你在应用中使用该模型,你该怎么做?

①思考问题

  知道问题后,你该如何思考?思考什么?

0 它是Web应用程序还是移动应用程序?如果你正在构建移动应用程序或需要在物联网中使用模型,则可以使用TensorFlow Lite并在Android或iOS应用程序中使用该模型。

1 模型部署平台是什么?在云中还是在本地?

2 脱机支持。应用是否必须脱机工作?

3 使用什么技术来训练模型?所选技术可能会影响您需要使用的工具。

②几种构建机器学习模型 Web 应用的方法。

  我们该用什么方法去构建机器学习Web应用呢?

0 使用 TensorFlow。其框架生态系统提供了使用 TensorFlow 转换用于Web 应用程序的 TensorFlow 模型的功能.js。

1 使用 PyTorch。此库可以选择将模型导出为 ONNX(开放神经网络交换)格式,以便在可以使用 Onnx Runtime的 JavaScript Web应用程序中使用。

2 使用 Lobe.aiAzure 自定义视觉。如果使用 ML SaaS(软件即服务)系统(如 Lobe.ai 或Azure 自定义视觉)来训练模型,则此类软件提供了为许多平台导出模型的方法,包括生成要由联机应用程序在云中查询的定制 API。

  对于初学者,我们可以使用Flask框架构建一个完整的 Flask Web 应用程序,该应用程序能够在 Web 浏览器中训练模型。当然这一步也可以在JavaScript环境中使用TensorFlow.js来完成。

  由于我们的学习一直基于 PythonJupyter notebook,因此我将基于Jupyter notebook逐步讲解构建机器学习Web应用的全流程。

image.gif编辑

2.工具安装

  对于此次任务,我们需要安装两个工具:FlaskPickle,前者是Python的第三方库,后者是标准库。

0 Flask是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的小应用。它提供了使用Python和模板引擎构建网页的Web框架的基本功能。

1 pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。即我们可以将训练好的模型封装到文件中,直接拿来预测使用。

  输入以下代码安装flask框架:

pip3 install  -i https://mirrors.aliyun.com/pypi/simple/ flask

image.gif

  pickle模块是内置库,无需安装。

 

3.数据预处理

  本文中我们使用 NUFORC(国家 UFO 报告中心)收集的 80000 次 UFO 目击事件的数据。这些数据对UFO目击事件有一些有趣的描述,例如:

“一名男子从夜间照射在草地上的一束光中出现,

他跑向德州仪器停车场” “灯光追赶着我们”

  数据和配套的ipynb文件我已经上传到资源中,点击链接即可免费下载

  接下来我们对数据进行预处理。

 

①数据加载及查看

  导入第三方库,加载并查看数据内容及数据结构:

import pandas as pd #导入pandas库并重命名为pd
import numpy as np #导入numpy库并重命名为np
ufos = pd.read_csv('./data/ufos.csv') #使用pandas库的read_csv函数加载数据
ufos.head()#查看数据的前五行内容

image.gif

image.gif编辑

我们可以看到数据中具有UFO目击的时间,经纬度坐标,国家以及时长等。

  继续查看数据组织结构:

image.gif编辑

  我们可以看到我们的数据中共有80332行,其中部分列有缺失值。

 

②数据处理及特征选择

  方便起见,我们将需要的数据提取至新表,并删去存在缺失值的列。

  输入以下代码:

ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
ufos.dropna(inplace=True) #删除缺失值
ufos.Country.unique() #查看国家数据包含的类别

image.gif

  现在,我们通过筛选1-60 秒之间的目击事件来减少我们需要处理的数据量,输入以下代码:

ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]

image.gif

  导入Scikit-learn的库,使用LabelEncoder标签编码器按字母顺序对数据进行编码将国家/地区的文本值转换为数字,这一步与我们上一文中逻辑回归的原理一样,不过本文是多分类问题。输入以下代码:

from sklearn.preprocessing import LabelEncoder
ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
ufos.head()

image.gif

  输出结果为:

image.gif编辑

  查看经过预处理的数据,我们看到,数据中只存在四列,其中:

0 Seconds、Latitude、Loongitude作为输入特征

1 Country 作为预测标签

image.gif编辑

4.机器学习模型构建

  现在,数据已经处理完成,我们可以进行模型训练了。

①数据集划分

  利用Scikit-learn库的train_test_split函数将数据集以8:2的比例进行划分。

  输入以下代码:

from sklearn.model_selection import train_test_split#导入数据集划分函数
Selected_features = ['Seconds','Latitude','Longitude']#设定特征变量值
X = ufos[Selected_features]#设定输入特征数据
Y = ufos['Country']#设定预测标签
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)#以8:2的比例划分训练集与测试集

image.gif

②调用逻辑回归模型训练多分类模型

  数据集划分好以后,调用逻辑回归模型函数训练模型。

  输入以下代码:

from sklearn.metrics import accuracy_score, classification_report#调用ACC系数,和分类指标函数
from sklearn.linear_model import LogisticRegression#调用逻辑回归模型
model = LogisticRegression()#实例化逻辑回归模型
model.fit(X_train, Y_train)#输入训练集,训练逻辑回归模型
predictions = model.predict(X_test)#在测试集上进行预测
print(classification_report(Y_test, predictions))#输出精度指标表
print('Predicted labels: ', predictions)#输出预测结果
print('Accuracy: ', accuracy_score(Y_test, predictions))#输出ACC系数值

image.gif

  输出结果为:

image.gif编辑

  准确率96%!还不错。这说明特征变量高度相关。

事实上经纬度坐标与国家位置本来就高度相关,不过这也算是精度验证了。

5.“腌制”你的模型

  模型我们已经训练完成,准确率也不赖,现在我们可以将其“腌制”,即封装打包。“腌制”完成后,加载模型,根据时间,经纬度;我们就可以对其进行测试了!

  输入以下代码:

import pickle #调用“腌制”库
model_filename = 'ufo-model.pkl'#设定文件名
pickle.dump(model, open(model_filename,'wb'))#对模型进行“腌制”
model = pickle.load(open('ufo-model.pkl','rb'))#加载“腌制”好的模型
print(model.predict([[50,44,-12]]))#测试模型,其中参数分别是出现的秒数、纬度、经度

image.gif

  不出所料,会输出"1",这代表着该UFO出现的位置是Canada

 

6.配置Flask应用

本节内容很重要!!!

  现在我们可以构建一个Flask Web应用来使用我们的模型了!

①创建应用文件夹

  首先,新建一个名为web-app的文件夹;这里,“web-app”是应用的名称,你也可以按自己的喜好设置,记得运行文件中也要同样的名称。

  再根据以下文件结构组建文件夹:

web-app/
    static/
        css/
            style.css
    templates/
          index.html
    app.py
    requirement.txt
    ufo-model.pkl

image.gif

0 static文件夹中的css文件夹用以存储css网页样式文件

1 templates文件夹用以存储html网页内容文件

2 app.py文件是模型加载及运行文件,它在这里起到后端脚本的作用,类似于PHP

3 ufo-model.pkl是我们“腌制”好的模型文件

  requirement.txt文件中存储本模型需要调用的python第三方库名。

scikit-learn

pandas

numpy

flask

image.gif编辑

 

②构建网页样式style.css文件

  打开style.css文件,输入以下CSS代码并保存:

body {
  width: 100%;
  height: 100%;
  font-family: 'Helvetica';
  background: black;
  color: #fff;
  text-align: center;
  letter-spacing: 1.4px;
  font-size: 30px;
}
input {
  min-width: 150px;
}
.grid {
  width: 300px;
  border: 1px solid #2d2d2d;
  display: grid;
  justify-content: center;
  margin: 20px auto;
}
.box {
  color: #fff;
  background: #2d2d2d;
  padding: 12px;
  display: inline-block;
}

image.gif

  若你对前端有所涉猎,也可以自行修改代码,调整样式。

 

③构建Web界面内容index.html文件

  打开index.html文件,输入以下HTML代码创建文本框和按钮并保存:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>🛸 UFO 目击预测器! 👽</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
  </head>
  <body>
    <div class="grid">
      <div class="box">
        <p>根据UFO目击秒数及经纬度来预测UFO出现的国家!</p>
        <form action="{{ url_for('predict')}}" method="post">
          <input type="number" name="seconds" placeholder="Seconds" required="required" min="0" max="60" />
          <input type="text" name="latitude" placeholder="Latitude" required="required" />
          <input type="text" name="longitude" placeholder="Longitude" required="required" />
          <button type="submit" class="btn">预测</button>
        </form>
        <p>{{ prediction_text }}</p>
      </div>
    </div>
  </body>
</html>

image.gif

④构建Python后端app.py文件

  打开app.py文件,输入以下代码并保存:

import numpy as np
from flask import Flask, request, render_template
import pickle
app = Flask(__name__)#初始化APP
model = pickle.load(open("ufo-model.pkl", "rb"))#加载模型
@app.route("/")#装饰器
def home():
    return render_template("index.html")#先引入index.html,同时根据后面传入的参数,对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 = prediction[0]#将预测值传入output
    countries = ["Australia", "Canada", "Germany", "UK", "US"]#根据预测值判断国家
    return render_template(
        "index.html", prediction_text="Likely country: {}".format(countries[output])#将预测值返回到Web界面,使我们看到
    )
if __name__ == "__main__":
    app.run(debug=True)#调试模式下运行文件,实时反应结果。仅限测试使用,生产模式下不要使用

image.gif

  在运行应用之前,请查看一下app.py文件,它可以分解为以下步骤:

0 首先,加载依赖项并启动应用。

1 然后,导入模型。

2 然后,在主路由上呈现index.html。

3 表单变量被收集并转换为 numpy数组。然后将它们发送到模型并返回预测值。

4 根据预测值与国家/地区的对应关系将该国家发送回 index.html以在Web模板中呈现。

7.运行Flask应用

  Win+R输入cmd打开命令行,cd文件路径至web-app,输入以下代码:

cd [文件夹所在路径] #如:cd F:\web-app\

image.gif

  输入以下代码运行程序:

python app.py

image.gif

  稍等片刻,将出现的本地服务器地址复制到浏览器中打开便可以在默认浏览器中加载出Web应用。


image.gif编辑

image.gif编辑

       输入参数预测结果。对模型进行测试,测试成功!。

  恭喜!你已成功实现了Web APP!🏆

  使用Flaskpickle构建Web 应用相对简单。其中最重要的是了解发送到模型和预测的数据格式和数据结构。这完全取决于模型的训练方式。

  在生产环境中,模型训练者与用户之间需要良好的沟通。了解用户需求迭代Web应用是很必要的!

三、内容总结

  在本文中,我们使用PythonFlask框架与Pickle模块构建了Web应用程序,在UFO目击数据集上构建了逻辑回归多分类模型,并将其集成在Web程序中。实现了机器学习模型的Web应用构建。

 

🚀挑战

  1.无需在Jupyter notebook中训练模型并将其导入 Flask 应用程序,你可以直接在 Flask 应用程序中尝试训练模型!尝试一下,看看这种方法有什么利弊?

  2.构建 Web 应用以使用 ML 模型的方法有很多种。列出您可以使用 JavaScriptPython 构建 Web 应用以利用机器学习的方法。

课后测验

image.gif编辑


   如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!

“本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_45590504/category_11752103.html?spm=1001.2014.3001.5482百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”

目录
相关文章
|
19小时前
|
机器学习/深度学习 人工智能 算法
构建高效机器学习模型的五大策略
【5月更文挑战第20天】 在探索数据科学和人工智能的海洋中,构建一个高效的机器学习模型是航行的关键。本文将深入探讨五个核心策略,以优化模型性能并确保数据驱动的决策更加精准和高效。我们将从特征工程的重要性出发,逐步过渡到选择合适的算法、调参的艺术、避免过拟合以及最终的模型评估与部署。这五大策略共同构成了构建高效机器学习模型的基石,为数据科学家和工程师提供了一条清晰的路径,以应对日益复杂的数据挑战。
|
20小时前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与实践
【5月更文挑战第20天】 在数据驱动的时代,构建高效的机器学习模型是获取洞察力和预测未来趋势的关键。本文将探讨一系列策略和技术,旨在优化模型性能,包括数据预处理、特征工程、模型选择、超参数调优以及评估方法。我们将深入分析这些步骤如何共同作用,提升模型的泛化能力并防止过拟合。通过案例研究和最佳实践的分享,读者将获得一套实用的工具集,以应对不断变化的数据科学挑战。
|
20小时前
|
机器学习/深度学习 分布式计算 数据可视化
构建高效机器学习模型的五大策略
【5月更文挑战第20天】 在数据科学迅猛发展的今天,构建高效的机器学习模型已成为众多从业者追求的目标。本文将探讨五种实用的策略,帮助读者提高其模型的性能和效率。这些策略包括特征工程的精细化操作、模型选择与调优的最佳实践、集成学习的应用、大数据处理技巧以及模型解释性与可视化的重要性。通过深入分析和案例研究,本文旨在为从业者提供一套全面的指导框架,以便在面对复杂问题时能够设计出更加健壮和精准的模型。
|
1天前
|
前端开发 Java Go
从前端到后端:构建现代化Web应用的技术演进
本文探讨了从前端到后端的技术演进,介绍了前端、后端以及多种编程语言,如Java、Python、C、PHP和Go,以及数据库在构建现代化Web应用中的应用。通过深入剖析各个技术领域的发展和应用,读者将对构建高效、可扩展、安全的Web应用有更深入的理解。
|
1天前
|
数据采集 存储 数据挖掘
Python DataFrame初学者指南:轻松上手构建数据表格
【5月更文挑战第19天】本文是针对初学者的Pandas DataFrame指南,介绍如何安装Pandas、创建DataFrame(从字典或CSV文件)、查看数据(`head()`, `info()`, `describe()`)、选择与操作数据(列、行、缺失值处理、数据类型转换、排序、分组聚合)以及保存DataFrame到CSV文件。通过学习这些基础,你将能轻松开始数据科学之旅。
|
1天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
【5月更文挑战第19天】本文介绍了Python数据分析中的核心概念——DataFrame,通过导入`pandas`库创建并操作DataFrame。示例展示了如何构建数据字典并转换为DataFrame,以及进行数据选择、添加修改列、计算统计量、筛选和排序等操作。DataFrame适用于处理各种规模的表格数据,是数据分析的得力工具。掌握其基础和应用是数据分析之旅的重要起点。
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
|
2天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【5月更文挑战第18天】 在数据驱动的时代,构建高效的机器学习模型已经成为企业获取竞争优势的关键。本文将深入探讨如何通过精确的数据预处理、合理的特征工程、高效的算法选择以及细致的模型调优等步骤,来提升模型的性能和预测准确度。我们还将讨论模型部署后的监控和维护策略,确保模型长期稳定运行。这些最佳实践不仅适用于初学者建立基础,也能帮助有经验的数据科学家优化现有工作流程。
|
2天前
|
网络协议 Python
Python 网络编程实战:构建高效的网络应用
【5月更文挑战第18天】Python在数字化时代成为构建网络应用的热门语言,因其简洁的语法和强大功能。本文介绍了网络编程基础知识,包括TCP和UDP套接字,强调异步编程、数据压缩和连接池的关键作用。提供了一个简单的TCP服务器和客户端代码示例,并提及优化与改进方向,鼓励读者通过实践提升网络应用性能。
19 6
|
2天前
|
开发框架 中间件 数据库
Django 框架入门全攻略:轻松构建 Web 应用
【5月更文挑战第18天】本文是 Django 入门教程,介绍了如何使用 Django 构建 Web 应用。内容包括安装、项目与应用创建、模型定义、数据库迁移、视图编写、路由配置、模板系统、表单处理和中间件的使用。通过实例展示了 Django 基本流程,帮助初学者快速上手。Django 提供高效工具,便于开发者聚焦业务逻辑,轻松构建功能丰富的 Web 应用。
20 5
|
2天前
|
数据库连接 Python
Flask 框架入门与实践:构建你的第一个 Web 应用
【5月更文挑战第18天】本文介绍了使用 Flask 框架构建第一个 Web 应用的步骤。首先通过 `pip install Flask` 安装框架,然后编写基本的 Python 代码创建应用,包括定义路由和响应。示例展示如何显示 &quot;Hello, World!&quot;,并扩展到显示用户信息的功能。利用模板(如 `index.html`)可使页面更丰富。随着学习深入,可以利用 Flask 的更多特性,如表单处理和数据库连接,来构建更复杂的 Web 应用。本文旨在激发读者对 Flask 和 Web 开发的兴趣,鼓励不断探索和实践。
17 7

热门文章

最新文章