- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 。
今天,我们的主要任务是按照既定的流程再次运行模型,并将其成功加载到 Web 应用程序中,以便通过 Web 界面进行调用。最终生成的模型将能够基于 UFO 目击事件的数据和经纬度信息,推断出事件发生的城市地址。尽管经纬度信息似乎已经足够,但我们还是需要模型进行预测,这只是一个练习目的。希望通过这个过程,你能进一步理解机器学习模型在 Web 应用中的应用与整合.
对于此任务,你需要两个工具:Flask 和 Pickle,它们都在 Python 上运行.
Flask 是一个轻量级的 web 应用框架,适用于构建简单的 web 应用和 RESTful API。它遵循 WSGI(Web Server Gateway Interface)标准,支持多种扩展,具有以下特点:
Pickle 是 Python 的一个内置模块,用于对象序列化和反序列化。序列化是将 Python 对象转换为字节流的过程,而反序列化则是将字节流还原为 Python 对象。它的特点包括:
注意:Pickle 对安全性有一定的隐患,因为反序列化不可信的数据可能导致代码执行漏洞.
首先,让我们来深入了解一下我们的数据集,看看它的具体结构和内容。这一步非常重要,因为数据的质量和特征将直接影响到模型的性能和预测结果.
import pandas as pd
import numpy as np
ufos = pd.read_csv('./data/ufos.csv')
ufos.head()
因此,根据我们要解决的问题,我们需要提取与之相关的向量字段数据。这些字段包括:城市名称、经纬度坐标以及目击时长。这些信息将为我们后续的分析和建模提供重要的输入特征,帮助我们准确地推断 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'))
现在,我们的目标是通过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”时,应用将调用训练好的模型进行计算,并在页面上展示预测结果,如图所示.
在这个项目中,我们通过使用 Flask 和 Pickle 将一个机器学习模型成功集成到 Web 应用中,使用户能够通过友好的界面进行预测。这一过程不仅让我们体验到了模型训练与数据预处理的细节,也深刻理解了如何在实际应用中实现机器学习的功能.
通过这一系列的实践操作,我们不仅巩固了对工具和技术的理解,也提升了将理论知识转化为实际应用的能力。这一过程的重要性在于,它不仅是对我们技术能力的挑战,更是对解决实际问题能力的培养.
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者.
💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助.
🌟 欢迎关注努力的小雨!🌟 。
最后此篇关于从零开始学机器学习——网络应用的文章就讲到这里了,如果你想了解更多关于从零开始学机器学习——网络应用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
PyCaret是一个开源、低代码Python机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率。PyCaret本质上是围绕几个机器学习
在我的研究进展中,我现在已经将寄生虫从图像中分离出来。寄生虫看起来像蠕虫。我希望 MATLAB 读取所有输入图像,查找类似深紫色图像的蠕虫,如果检测到,则给出检测到的答复。我尝试使用直方图比较,但我认
目前我正在尝试了解机器学习算法的工作方式,但我没有真正了解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。 这是数据集的片段(这里你可以看到 9 个样本(在真实数据集中大
第一章 绪论 机器学习 : 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中, “经验” 通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算
1. 算法原理(K-Nearest Neighbor) 本质是通过距离判断两个样本是否相似,如果距离够近就认为他们足够相似属于同一类别 找到离其最近的 k 个样本,并将这些样本称
前言 K-means是一种经典的无监督学习算法,用于对数据进行聚类。K-means算法将数据集视为具有n个特征的n维空间,并尝试通过最小化簇内平方误差的总和来将数据点划分为簇。本文将介绍K-m
目录 前言 介绍LightGBM LightGBM的背景和起源 L
前言 可以说掌握了机器学习,你就具备了与机器对话,充分利用机器为人类服务的能力。在人工智能时代,这将成为一项必备技能,就好比十年前你是编程大牛,二十年前你英语超好一样。因此,无论你是什么专业的
几个贯穿始终的概念 当我们把人类学习简单事物的过程抽象为几个阶段,再将这些阶段通过不同的方法具体化为代码,依靠通过计算机的基础能力-- 计算 。我们就可以让机器能够“学会”一些简单的事物。
1、选题背景 人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点,人脸性别识别作为人脸识别技术
每当我们在公有云或者私有云发布训练好的大数据模型,为了方便大家辨识、理解和运用,参照huggingface所制定的标准制作一个Model Card展示页,是种非常好的模型展示和组织形式。 下面就是一
2. 支持向量机 对偶优化 拉格朗日乘数法可用于解决带条件优化问题,其基本形式为: \[\begin{gather} \min_w f(w),\\ \mathrm{s.t.} \quad
我正在尝试运行以下代码: https://github.com/opencv/opencv/blob/master/samples/dnn/classification.cpp 我在这里找到所有经过预
我是机器学习新手。当我使用 scikit-learn 模块中的波士顿数据集练习具有默认参数的决策树回归模型时。 在此链接解决方案( How to Build a Decision tree Regre
我有用于训练的数据。当我将其输入神经网络时,该数据出现 3% 的错误。 我知道这些数据有一定的过度代表性 - 例如,第 5 类的示例大约是其他类的十分之一。 我的作业指出,我可以通过偏置训练数据(即删
我在 Python 的多类分类中使用 SVM 时遇到问题。事实上,问题在于性别分类(来自图像),其中训练数据集仅包含“y=1”或“ y=-1”作为类标签(二进制)。但是,在预测中,如果是男性,我必须预
以防万一你们不知道,对抗性图像是属于某个类别的图像,但随后被扭曲,而人眼没有任何视觉感知差异,但网络错误地将其识别为完全不同的类别。 有关此内容的更多信息,请参见此处: http://karpathy
我正在进行一个 ML 语言识别项目 (Python),该项目需要具有高维特征输入的多类分类模型。 目前,我所能做的就是通过反复试验来提高准确性。无意识地结合可用的特征提取算法和可用的机器学习模型,看看
import numpy as np def sigmoid(x): return 1.0/(1+np.asmatrix(np.exp(-x))) def graD(X,y,alpha,s0,
所以我有多个列表: ['disney','england','france'] ['disney','japan'] ['england', 'london'] ['disney', 'france'
我是一名优秀的程序员,十分优秀!