【关于时间序列的ML】项目 5 :用机器学习预测天气

news2024/11/16 13:31:49

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

用于预测天气的天气数据集

数据准备

可视化

分离我们的目标以预测天气

训练测试拆分

基线平均绝对误差

训练模型预测天气

预测天气的机器学习模型的模型评估


在本文中,我将训练一个模型来使用机器学习预测天气。我们将表现得好像我们无法访问天气预报一样。我们可以获得一个世纪的全球温度历史平均值,包括全球最高温度、全球最低温度以及全球陆地和海洋温度。综上所述,我们知道这是一个监督回归机器学习问题。

用于预测天气的天气数据集

首先,我们需要一些数据,我用来通过机器学习预测天气的数据是从世界上最负盛名的研究型大学之一创建的,我们将假设数据集中的数据是真实的。您可以从此处轻松下载此数据。

现在,让我们开始阅读数据集:

import pandas as pd
global_temp = pd.read_csv("GlobalTemperatures.csv")
print(global_temp.shape)
print(global_temp.columns)
print(global_temp.info())
print(global_temp.isnull().sum())

数据准备

不幸的是,我们还没有达到可以将原始数据输入模型并让它发回响应的地步。我们将需要进行一些小的编辑,以将我们的数据放入机器学习模型中。

数据准备的具体步骤将取决于所使用的模型和收集的数据,但需要进行一定数量的数据处理。首先,我将创建一个名为 wrangle () 的函数,我将在其中调用我们的数据框:

#Data Preparation
def wrangle(df):
    df = df.copy()
    df = df.drop(columns=["LandAverageTemperatureUncertainty", "LandMaxTemperatureUncertainty",
                          "LandMinTemperatureUncertainty", "LandAndOceanAverageTemperatureUncertainty"], axis=1)

我们想复制数据帧以免损坏原始数据。之后,我们将删除具有高基数的列。

高基数是指值非常稀有或唯一的列。鉴于大多数时间序列数据集中出现高基数数据的频率,我们将通过从数据集中完全删除这些高基数列来直接解决这个问题,以免将来混淆我们的模型。 

现在,我将创建一个函数来转换温度,并将列转换为 DateTime 对象:

    def converttemp(x):
        x = (x * 1.8) + 32
        return float(x)
    df["LandAverageTemperature"] = df["LandAverageTemperature"].apply(converttemp)
    df["LandMaxTemperature"] = df["LandMaxTemperature"].apply(converttemp)
    df["LandMinTemperature"] = df["LandMinTemperature"].apply(converttemp)
    df["LandAndOceanAverageTemperature"] = df["LandAndOceanAverageTemperature"].apply(converttemp)
    df["dt"] = pd.to_datetime(df["dt"])
    df["Month"] = df["dt"].dt.month
    df["Year"] = df["dt"].dt.year
    df = df.drop("dt", axis=1)
    df = df.drop("Month", axis=1)
    df = df[df.Year >= 1850]
    df = df.set_index(["Year"])
    df = df.dropna()
    return df
global_temp = wrangle(global_temp)
print(global_temp.head())

在将我们的 wrangle 函数调用到我们的 global_temp 数据帧之后,我们现在可以看到我们的 global_temp 数据帧的一个新的清理版本,没有缺失值。

可视化

现在,在继续训练模型以使用机器学习预测天气之前,让我们可视化这些数据以找到数据之间的相关性:

import seaborn as sns
import matplotlib.pyplot as plt
corrMatrix = global_temp.corr()
sns.heatmap(corrMatrix, annot=True)
plt.show()

正如我们所看到的,并且你们中的一些人可能已经猜到了,我们选择继续前进的专栏彼此高度相关。

分离我们的目标以预测天气

现在我们需要将数据分成特征和目标。目标,也称为 Y,是我们要预测的值,在这种情况下,实际的平均陆地和海洋温度和特征是模型用于进行预测的所有列:

target = "LandAndOceanAverageTemperature"
y = global_temp[target]
x = global_temp[["LandAverageTemperature", "LandMaxTemperature", "LandMinTemperature"]]

训练测试拆分

现在,要创建一个使用机器学习预测天气的模型,我们需要使用 scikit-learn 提供的 train_test_split 方法来拆分数据:

from sklearn.model_selection import train_test_split
xtrain, xval, ytrain, yval = train_test_split(x, y, test_size=0.25, random_state=42)
print(xtrain.shape)
print(xval.shape)
print(ytrain.shape)
print(yval.shape)
(1494, 3)
(498, 3)
(1494,)
(498,)

基线平均绝对误差

在我们可以对我们的机器学习模型做出和评估任何预测以预测天气之前,我们需要建立一个基线,一个我们希望用我们的模型击败的合理指标。如果我们的模型不能从基线改进那么它就会失败,我们应该尝试不同的模型或者承认机器学习不适合我们的问题:

from sklearn.metrics import mean_squared_error
ypred = [ytrain.mean()] * len(ytrain)
print("Baseline MAE: ", round(mean_squared_error(ytrain, ypred), 5))

训练模型预测天气

现在为了用机器学习预测天气,我将训练一个随机森林算法,它能够执行分类和回归任务:

from sklearn.feature_selection import SelectKBest
from sklearn.ensemble import RandomForestRegressor
forest = make_pipeline(
    SelectKBest(k="all"),
    StandardScaler(),
    RandomForestRegressor(
        n_estimators=100,
        max_depth=50,
        random_state=77,
        n_jobs=-1
    )
)
forest.fit(xtrain, ytrain)

预测天气的机器学习模型的模型评估

为了正确看待我们的预测,我们可以使用从 100% 中减去的平均百分比误差来计算精度:

import numpy as np
errors = abs(ypred - yval)
mape = 100 * (errors/ytrain)
accuracy = 100 - np.mean(mape)
print("Random Forest Model: ", round(accuracy, 2), "%")

Random Forest Model: 99.52 %

另外,阅读——为什么 Python 比 R 更好。

我们的模型已经学会通过机器学习预测明年的天气状况,准确率为 99%。我希望您喜欢这篇关于如何使用机器学习构建模型来预测天气的文章。请随时在下面的评论部分向您提出有价值的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Canal+kafka监听数据库变化的最佳实践

1、前言 工作中,我们很多时候需要根据某些状态的变化更新另一个业务的逻辑,比如订单的生成,成交等,需要更新或者通知其他的业务。我们通常的操作通过业务埋点、接口的调用或者中间件完成。 但是状态变化的入口比较多的时候&#x…

位图详解.

1.位图概念 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 思考: 1.用哈希表?遍历一遍?时间复杂度O(N) 40亿个不重复无符号整数占多大内存&#xff1…

springcloud配置中心nacos动态线程池Dynamic-tp配置接入实战

最近业务上需要把项目组几个微服务接入动态线程池框架Dynamic-tp监控,同时支持webhook机器人接受变更通知、容量报警、活性报警、拒绝报警、任务超时报警等通知,方便项目组同事企业微信群实时监控线程池状态,动态调整线程参数。 接手开始上手…

【C++学习】对二维数组进行排序

1 问题描述 今天在学习 CUDA-NMS 算法时,遇到一个小问题,就是希望对一个二维数组进行排序,具体是这样的: 需要对存储目标框的二维数组进行排序,排序的方式是按照目标框的得分score从高往低排序,也就是结果…

微服务系列 - Zookeeper上篇:入门到精通

一、前言 本内容仅用于个人学习笔记,如有侵扰,联系删除 视频教程:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程 源码学习:微服务系列 - Zookeeper下篇:源码解析 二、Zookeeper入门 1、概述 Zookeeper是一个开…

消息队列(MQ)

文章目录什么是消息队列定义消息队列的特性:1、解耦:2、削峰:3、异步:使用场景传统串行化设计串行化思想:并行处理调优高可用:高并发高性能MQ的两种流派MQ常见的问题1,mq如何避免消息堆积问题。…

如何解决甲乙双方需求理解巨大偏差的问题?

1、对双方进行专业培训 需求分析人员对需求方应用领域不熟悉,而需求方对软件开发也不熟悉,通过对双方进行专业知识培训,让双方对用户专业领域和软件开发领域都有较为清晰的认识。在此基础上,需求方提出的需求更精准,双…

Java中的多线程——线程安全问题

作者:~小明学编程 文章专栏:JavaEE 格言:热爱编程的,终将被编程所厚爱。 目录 多线程所带来的不安全问题 什么是线程安全 线程不安全的原因 修改共享数据 修改操作不是原子的 内存可见性对线程的影响 指令重排序 解决线程…

一个高性能、无侵入的Java性能监控和统计工具,有点东西!

背景 随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。 于是公司开始全面推进服务化进程,把团队内的大部分工程…

你造Python中的上下文管理器是啥吗

上下文管理器(Context managers)让我们在需要的时候可以准确地分配或释放资源 Python中最常用的上下文管理例子就是with语句了,一般是在操作文件的时候,比如: 有PY基础的小伙伴都知道,上面的代码等价于: 对比两个例子…

python机器学习及深度学习在空间模拟与时间预测领域中的应用

了解机器学习的发展历史、计算原理、基本定义,熟悉机器学习方法的分类,常用机器学习方法,以及模型的评估与选择;熟悉数据预处理的流程,掌握python程序包的使用;理解机器学习在生态水文中的应用,…

使用Python绘制圣诞树教程(附源代码)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Qt Creator 运行LVGL模拟器

windows下用Qt Creator运行LVGL 8.2 背景 最近在学习LVGL,手头又没有硬件,好多网上资料介绍了如何在PC端模拟,纯C语言实现的库模拟的话也不会复杂,恰巧本人熟悉Qt Creator,那就用这个环境模拟吧,网上搜索…

为什么企业传统网络访问海外应用程序不稳定、速度慢?怎么解决?

外贸、游戏等行业经常会有跨网数据访问的需求,并且访问慢、卡是常见的问题。这其中主要的原因是网络访问速度与物理距离有直接关系。刨除距离原因,还有哪些因素影响了我们的访问呢?那么访问国站慢的影响因素有哪些? 在中国的国内用户,使用应…

下载安装npm,配置环境变量详细教程

要在本地运行项目,就需要安装npm,其次还需要配置项目依赖node-modules。今天我们就先安装npm npm下载安装一、安装1、下载2、勾选同意,下一步3、默认的存储位置即可,next4、不用勾选,next5、点击install6、等待安装完成…

通过 Mito 在 Python 中使用电子表格

在本文中,您将学习如何使用这个强大的库,该库能够自动执行某些 Pandas 任务并以非常快速的方式执行数据分析。 Mitosheet是什么? Mitosheet 是 Python 中可用的众多库之一,它实际上是 Python 和电子表格之间的融合,大大加快了数据分析过程。 安装过程 您可以安装在分析…

《Python多人游戏项目实战》第五节 断线重连

目录 5.1 模拟弱网状态 5.2 断线重连 5.3 优化玩家名称显示 5.4 完整代码下载地址 导致客户端和服务端断开连接的原因可能有以下三种: 服务端主动关闭连接。客户端窗口关闭,玩家退出游戏。客户端所在网络不给力(也叫做弱网)&…

Redis - Redis持久化:AOF和RDB

1. 为什么要持久化 Redis是内从数据库,宕机后数据会丢失;Redis重启后,为了快速恢复数据,提供了持久化机制;Redis有两种持久化方式:RDB和AOF,这也是Redis无畏宕机与快速恢复数据的杀手锏。 注意…

全球代表供应商!腾讯安全NDR再获Gartner认可

近日,国际研究机构Gartner发布了2022年《Market Guide for Network Detection and Response》(《网络检测和响应(NDR)市场指南》)(以下简称《报告》),腾讯安全被Gartner列为全球NDR市…

非零基础自学Golang 第17章 HTTP编程(上) 17.3 爬虫框架gocolly 17.3.1 gocolly简介

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.3 爬虫框架gocolly17.3.1 gocolly简介第17章 HTTP编程(上) 17.3 爬虫框架gocolly 我们在之前学习了如何使用标准库实现HTTP爬虫【其实也不算,就实现了简单的请求,但是爬虫不就是这…