首页 > 其他分享 >从零开始学机器学习——网络应用

从零开始学机器学习——网络应用

时间:2024-10-06 08:50:21浏览次数:8  
标签:1.00 机器 网络应用 Flask 模型 从零开始 import model ufos

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns

今天,我们的主要任务是按照既定的流程再次运行模型,并将其成功加载到 Web 应用程序中,以便通过 Web 界面进行调用。最终生成的模型将能够基于 UFO 目击事件的数据和经纬度信息,推断出事件发生的城市地址。尽管经纬度信息似乎已经足够,但我们还是需要模型进行预测,这只是一个练习目的。希望通过这个过程,你能进一步理解机器学习模型在 Web 应用中的应用与整合。

知识回顾

工具

对于此任务,你需要两个工具:Flask 和 Pickle,它们都在 Python 上运行。

Flask 是一个轻量级的 web 应用框架,适用于构建简单的 web 应用和 RESTful API。它遵循 WSGI(Web Server Gateway Interface)标准,支持多种扩展,具有以下特点:

  • 简单易用:Flask 的核心非常简单,易于上手,适合初学者。
  • 灵活性:开发者可以根据需要选择和添加扩展,使其具有更强的功能。
  • 路由系统:Flask 提供了灵活的 URL 路由机制,方便管理不同的页面和请求。
  • 模板引擎:集成了 Jinja2 模板引擎,可以轻松生成动态 HTML 页面。
  • 支持 RESTful API:非常适合构建 RESTful 服务。

Pickle 是 Python 的一个内置模块,用于对象序列化和反序列化。序列化是将 Python 对象转换为字节流的过程,而反序列化则是将字节流还原为 Python 对象。它的特点包括:

  • 简单方便:使用简单,可以轻松地保存和加载 Python 对象。
  • 支持多种对象:可以序列化大多数 Python 数据类型,包括自定义类。
  • 持久化数据:适合将数据存储到文件中,以便后续使用。

注意:Pickle 对安全性有一定的隐患,因为反序列化不可信的数据可能导致代码执行漏洞。

清洗数据

首先,让我们来深入了解一下我们的数据集,看看它的具体结构和内容。这一步非常重要,因为数据的质量和特征将直接影响到模型的性能和预测结果。

import pandas as pd
import numpy as np

ufos = pd.read_csv('./data/ufos.csv')
ufos.head()

image

因此,根据我们要解决的问题,我们需要提取与之相关的向量字段数据。这些字段包括:城市名称、经纬度坐标以及目击时长。这些信息将为我们后续的分析和建模提供重要的输入特征,帮助我们准确地推断 UFO 目击事件发生的城市。

ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})

ufos.Country.unique()
ufos.dropna(inplace=True)
ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
ufos.info()

在完成这一系列的数据清洗和筛选后,我们的数据集将仅包含我们所需的相关字段,确保其精简而高效。此外,我们还对目击时长进行了特别的过滤,以确保该特征的有效性和一致性。

因为我们了解到,模型对数据的敏感性会影响其预测结果。接下来,我们需要将文本字段转换为适合模型处理的数值数据格式。这一转换过程将使得模型能够理解和利用这些文本信息,从而提升预测能力。

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

目前为止,我们已经成功完成了数据的清理和预处理,确保我们的数据集具备良好的质量和一致性。接下来,我们将进入模型训练的阶段。考虑到我们的任务是预测城市,而城市名称是一个有限且固定的类别,逻辑回归模型将是一个理想的选择。

建立模型

现在,我们将开始准备训练模型的关键步骤,即将数据集划分为训练组和测试组。

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report 
from sklearn.linear_model import LogisticRegression

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)


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))

返回如下:

              precision    recall  f1-score   support

           0       1.00      1.00      1.00        41
           1       0.83      0.23      0.36       250
           2       1.00      1.00      1.00         8
           3       1.00      1.00      1.00       131
           4       0.96      1.00      0.98      4743

    accuracy                           0.96      5173
   macro avg       0.96      0.85      0.87      5173
weighted avg       0.96      0.96      0.95      5173

Predicted labels:  [4 4 4 ... 3 4 4]
Accuracy:  0.9605644693601392

模型的准确率相当不错,约为95%。这一结果并不令人意外,因为我们的特征——国家(Country)以及经纬度(Latitude/Longitude)信息之间确实存在显著的相关性。

接下来,我们需要将这一训练好的模型进行打包,以便将其集成到我们的Web应用程序中。这样,用户就能够通过网页轻松调用模型进行城市预测,享受流畅的交互体验。

打包模型

我们可以直接利用pickle库这一便捷的依赖,将训练好的模型序列化并写入文件。

import pickle
model_filename = 'ufo-model.pkl'
pickle.dump(model, open(model_filename,'wb'))

model = pickle.load(open('ufo-model.pkl','rb'))

构建WEB

现在,我们的目标是通过Flask应用程序来调用已训练好的模型,并将预测结果以更加美观和用户友好的方式展示在Web页面上。Flask作为一个轻量级的Web框架,能够帮助我们快速构建Web应用,让用户通过直观的界面与模型进行交互。

web-app/
  static/
    css/
  templates/
notebook.ipynb
ufo-model.pkl
app.py
requirements.txt

这是我们需要新建的目录结构,请务必严格遵循这一布局,因为不按此结构组织文件和文件夹可能会导致程序在运行时出现错误。

requirements.txt中添加以下几行:

scikit-learn
pandas
numpy
flask

然后安装相关依赖

pip install -r requirements.txt

其余的CSS和HTML代码请前往学习中心自行复制和参考,这里不再一一列举。

在app.py中添加:

import numpy as np
from flask import Flask, request, render_template
import pickle

app = Flask(__name__)

model = pickle.load(open("./ufo-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 = prediction[0]

    countries = ["Australia", "Canada", "Germany", "UK", "US"]

    return render_template(
        "index.html", prediction_text="Likely country: {}".format(countries[output])
    )


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

这段代码实现了一个简单的 web 应用,允许用户输入特征数据并根据加载的机器学习模型进行预测。预测结果会被渲染到同一个页面上显示给用户。通过 Flask 的路由系统,可以方便地处理用户请求和响应。

例如,当我们输入特征数据“50, 44, -12”时,应用将调用训练好的模型进行计算,并在页面上展示预测结果,如图所示。

image

总结

在这个项目中,我们通过使用 Flask 和 Pickle 将一个机器学习模型成功集成到 Web 应用中,使用户能够通过友好的界面进行预测。这一过程不仅让我们体验到了模型训练与数据预处理的细节,也深刻理解了如何在实际应用中实现机器学习的功能。

通过这一系列的实践操作,我们不仅巩固了对工具和技术的理解,也提升了将理论知识转化为实际应用的能力。这一过程的重要性在于,它不仅是对我们技术能力的挑战,更是对解决实际问题能力的培养。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

标签:1.00,机器,网络应用,Flask,模型,从零开始,import,model,ufos
From: https://www.cnblogs.com/guoxiaoyu/p/18438177

相关文章

  • 【机器学习】集成学习——提升模型准确度的秘密武器
    【机器学习】集成学习——提升模型准确度的秘密武器1.引言集成学习(EnsembleLearning)是一种通过结合多个弱模型来提升整体预测准确性的技术。通过将多个模型的预测结果进行组合,集成学习在复杂任务中展现了极强的泛化能力。本文将探讨集成学习的主要方法,并通过代码示例演......
  • 从零开始讲PCIe(4)——PCI总线的地址空间分配
    一、概述        PCI架构支持三种地址空间,如图1-10所示:内存地址空间(MemoryMap)、I/O地址空间(I/OMap)和配置地址空间(PCIConfigureSpace)。在x86处理器中,处理器可以直接访问内存和I/O空间。PCI设备可以映射到处理器的内存地址空间,支持32位或64位内存寻址。在I/O地址......
  • 机器学习专业词汇:“Lookahead horizon” 可以翻译为“前瞻视距”或“预见范围”
    “Lookaheadhorizon”可以翻译为“前瞻视距”或“预见范围”。在不同领域中,它可能具有稍微不同的含义:在机器学习和人工智能中,尤其是强化学习领域,“lookaheadhorizon”是指一个智能体在决策时考虑未来多少步的可能结果。换句话说,就是在进行某个操作之前,智能体会评估多少步之......
  • 历经十年/头发都快掉光/秘钥生成器终极版/机器码/到期功能限制/运行时间限制/日期防篡
    一、项目介绍1.0前言说明标题一点都不夸张,从第一版的秘钥生成器到今天这个版本,确实经历了十年的时间,最初的版本做的非常简陋,就是搞了个异或加密,控制运行时间,后面又增加设备数量的控制,然后就是到期时间的限制。这种有个巨大缺陷就是可复制性,如果将授权的秘钥文件,拷贝到其他电脑......
  • 从零开始创建一个空白的Vue项目(自用)
    目录一、配置node环境1.安装nvm2.安装node二、创建Vue项目1.创建Vue项目2.空白页面三、安装Vue3UI框架(ElementPlus)一、配置node环境1.安装nvm    可以在github下载nvm安装包,安装路径不要有中文。     在vscode里面按ctrl+shift+~打开命......
  • 【软考】2 码制 / 机器数
    概念机器数只能以二进制方式表示,大类分为【无符号数】和【有符号数】【无符号数】在机器数中没有符号,表示正数【有符号数】在机器数中有符号,包含正数的其他数值,存在四种操作:【原码】【反码】【补码】【移码】一、原码最高位作为符号位进行正数和负数表示剩余低位表示数值的......
  • 基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上
    本教程使用工具所使用的环境说明:启动器开发工具:VS2022启动器所用客户端技术:.NET8+WPF启动器其他技术:DPAPI启动器发布的可执行程序,系统要求:Windows7以及以上,X64如果需要本程序,可以在网盘获取。网盘地址:链接:https://pan.baidu.com/s/1QPstE5-1zPK-qOp8GQ90ew?pwd=6666......
  • PySpark-机器学习教程-全-
    PySpark机器学习教程(全)原文:MachineLearningwithPySpark协议:CCBY-NC-SA4.0一、数据的演变在理解Spark之前,有必要理解我们今天所目睹的这种数据洪流背后的原因。在早期,数据是由工人生成或积累的,因此只有公司的员工将数据输入系统,数据点非常有限,只能捕获几个领域。然后......
  • 论文总结1--基于深度强化学习的四足机器人步态分析--2024.10.01
    四足机器人的运动控制方法研究1.传统运动控制-基于模型的控制方法  目前,在四足机器人研究领域内应用最广泛的控制方法就是基于模型的控制方法,其中主要包括基于虚拟模型控制(VirtualModelControl,VMC)方法、基于零力矩点(ZeroMomentPoint,ZMP)的控制方法、弹簧负载倒立摆算法......
  • 【机器学习-无监督学习】降维与主成分分析
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈Python机器学习⌋......