大数据毕设分享(含算法) LSTM天气预测算法系统

这篇具有很好参考价值的文章主要介绍了大数据毕设分享(含算法) LSTM天气预测算法系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 简介

今天学长向大家介绍一个机器视觉的毕设项目

使用LSTM实现天气时间序列预测

项目运行效果:

毕业设计 lstm天气预测

项目获取:

https://gitee.com/sinonfin/algorithm-sharing文章来源地址https://www.toymoban.com/news/detail-789985.html

1. 数据集介绍

数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始,每10分钟收集一次。为了提高效率,本文仅使用2009年至2016年之间收集的数据。

** 加载数据集**

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
如上所示,每10分钟记录一次观测值,一个小时内有6个观测值,一天有144(6x24)个观测值。

给定一个特定的时间,假设要预测未来6小时的温度。为了做出此预测,选择使用5天的观察时间。因此,创建一个包含最后720(5x144)个观测值的窗口以训练模型。

下面的函数返回上述时间窗以供模型训练。参数 history_size 是过去信息的滑动窗口大小。target_size
是模型需要学习预测的未来时间步,也作为需要被预测的标签。

下面使用数据的前300,000行当做训练数据集,其余的作为验证数据集。总计约2100天的训练数据。

2. 单变量单步输出预测

首先,使用一个特征(温度)训练模型,并在使用该模型做预测。

1.从数据集中提取温度

​    
    uni_data = df['T (degC)']
    uni_data.index = df['Date Time']
    uni_data.head()

2.观察一下这些数据随时间变化的情况

uni_data.plot(subplots=True)

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

2.1 数据标准化

在训练神经网络之前缩放特征很重要。标准化是通过减去平均值并除以每个特征的标准偏差来进行缩放的一种常用方法。也可以使用
tf.keras.utils.normalize 将值缩放到[0,1]范围内。

​    
    uni_data = uni_data.values
    uni_train_mean = uni_data[:TRAIN_SPLIT].mean()
    uni_train_std = uni_data[:TRAIN_SPLIT].std()
    uni_data = (uni_data-uni_train_mean)/uni_train_std

2.2 样本划分

现在为单变量模型创建数据。本部分为模型提供最后20个温度观测值,预测下一个时间步长的温度。

​    
    univariate_past_history = 20
    univariate_future_target = 0
   # shape 分别为:(299980, 20, 1);(299980,)
    x_train_uni, y_train_uni = univariate_data(uni_data, 0, TRAIN_SPLIT,
                                               univariate_past_history,
                                               univariate_future_target)
    x_val_uni, y_val_uni = univariate_data(uni_data, TRAIN_SPLIT, None,
                                           univariate_past_history,
                                           univariate_future_target)

输出:


Single window of past history
[[-1.99766294]
[-2.04281897]
[-2.05439744]
[-2.0312405 ]
[-2.02660912]
[-2.00113649]
[-1.95134907]
[-1.95134907]
[-1.98492663]
[-2.04513467]
[-2.08334362]
[-2.09723778]
[-2.09376424]
[-2.09144854]
[-2.07176515]
[-2.07176515]
[-2.07639653]
[-2.08913285]
[-2.09260639]
[-2.10418486]]

 Target temperature to predict
-2.1041848598100876

2.3 绘制曲线

现在已经创建了数据,看一个例子。提供给网络的信息以蓝色表示,并且它必须预测红叉处的值。

def create_time_steps(length):
        return list(range(-length, 0))
    
    def show_plot(plot_data, delta, title):
        labels = ['History', 'True Future', 'Model Prediction']
        marker = ['.-', 'rx', 'go']
        time_steps = create_time_steps(plot_data[0].shape[0]) # 横轴刻度
        if delta:
            future = delta
        else:
            future = 0
    
        plt.title(title)
        for i, x in enumerate(plot_data):
            if i:
                plt.plot(future, plot_data[i], marker[i], markersize=10,
                         label=labels[i])
            else:
                plt.plot(time_steps, plot_data[i].flatten(), marker[i], label=labels[i])
        plt.legend()
        plt.xlim([time_steps[0], (future+5)*2])
        plt.xlabel('Time-Step')
        return plt

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

2.4 基准测试

在继续训练模型之前,先设置一个简单的基准。在给定输入点的情况下,基线方法将查看所有历史记录,并预测下一个点是最近20个观测值的平均值。

def baseline(history):
        return np.mean(history)
    
    show_plot([x_train_uni[0], y_train_uni[0], baseline(x_train_uni[0])], 0,
               'Baseline Prediction Example')

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

2.5 LSTM 建模

递归神经网络(RNN)是一种非常适合时间序列数据的神经网络。RNN分步处理时间序列,维护内部状态,以汇总所见信息。

使用 tf.data 来随机整理,批处理和缓存数据集。

​    
    BATCH_SIZE = 256
    BUFFER_SIZE = 10000
    
    train_univariate = tf.data.Dataset.from_tensor_slices((x_train_uni, y_train_uni))
    train_univariate = train_univariate.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()
    
    val_univariate = tf.data.Dataset.from_tensor_slices((x_val_uni, y_val_uni))
    val_univariate = val_univariate.batch(BATCH_SIZE).repeat()

批处理后的数据shape:
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

simple_lstm_model = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(8, input_shape=x_train_uni.shape[-2:]),
    tf.keras.layers.Dense(1)
])

simple_lstm_model.compile(optimizer='adam', loss='mae')

让我们现在训练模型。由于数据集的大小很大,为了节省时间,每个epoch将仅使用200个step(batch_size=256,所以一个epoch使用 200* 256 个数据),而不是像通常那样遍历完整的训练数据。

  
EVALUATION_INTERVAL = 200
EPOCHS = 10

simple_lstm_model.fit(train_univariate, epochs=EPOCHS,
                      steps_per_epoch=EVALUATION_INTERVAL,
                      validation_data=val_univariate, validation_steps=50)

预测:

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
由以上可知,看起来比基线更好。既然已经了解了基础知识,继续第二部分,使用多元时间序列预测。


3. 多变量多步输出预测

原始数据集包含十四个特征。为简单起见,本节仅考虑原始的十四个中的三个。使用的功能是气温,大气压力和空气密度。

要使用更多特征,将其名称添加到此列表中即可。


features_considered = [‘p (mbar)’, ‘T (degC)’, ‘rho (g/m**3)’]

查看数据:


features = df[features_considered]
features.index = df[‘Date Time’]
features.head()

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
查看特征随时间的变化


features.plot(subplots=True)

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

3.1 数据标准化

dataset = features.values
data_mean = dataset[:TRAIN_SPLIT].mean(axis=0)
data_std = dataset[:TRAIN_SPLIT].std(axis=0)
dataset = (dataset-data_mean)/data_std

3.2 单步预测模型

单步预测任务中,模型将根据提供的某些历史记录来学习预测未来的单个点。

下面的函数实现了滑动窗口截取数据,它根据给定的窗口宽度对过去的观测值进行采样。

  
def multivariate_data(dataset, target, start_index, end_index, history_size,
                      target_size, step, single_step=False):
    data = []
    labels = []

    start_index = start_index + history_size
    
    if end_index is None:
        end_index = len(dataset) - target_size

    for i in range(start_index, end_index):
        indices = range(i-history_size, i, step) # step表示间隔采样步长,6表示每个小时只使用一个采样值(原数据集每10分钟采集一次)
        data.append(dataset[indices])

        if single_step:
            labels.append(target[i+target_size])
        else:
            labels.append(target[i:i+target_size])

    return np.array(data), np.array(labels)

在本教程中,输入给网络最近五天的数据,即720个观测值。每隔一小时进行一次重采样,因为60分钟内不会发生剧烈变化。因此,120个重采样值表示最近五天的温度状况。对于单步预测模型,数据点的标签是未来12小时的温度。所以,使用之后72(12

  • 6)个观测值作为标签。
  
past_history = 720
future_target = 72
STEP = 6

x_train_single, y_train_single = multivariate_data(dataset, dataset[:, 1], 0,
                                                   TRAIN_SPLIT, past_history,
                                                   future_target, STEP,
                                                   single_step=True)
x_val_single, y_val_single = multivariate_data(dataset, dataset[:, 1],
                                               TRAIN_SPLIT, None, past_history,
                                               future_target, STEP,
                                               single_step=True)

划分数据集:

train_data_single = tf.data.Dataset.from_tensor_slices((x_train_single, y_train_single))
train_data_single = train_data_single.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()
val_data_single = tf.data.Dataset.from_tensor_slices((x_val_single, y_val_single))
val_data_single = val_data_single.batch(BATCH_SIZE).repeat()

训练:

​    
    single_step_model = tf.keras.models.Sequential()
    single_step_model.add(tf.keras.layers.LSTM(32,
                                               input_shape=x_train_single.shape[-2:]))
    single_step_model.add(tf.keras.layers.Dense(1))
    
    single_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(), loss='mae')
    
    single_step_history = single_step_model.fit(train_data_single, epochs=EPOCHS,
                                                steps_per_epoch=EVALUATION_INTERVAL,
                                                validation_data=val_data_single,
                                                validation_steps=50)

绘制损失曲线:

def plot_train_history(history, title):
        loss = history.history['loss']
        val_loss = history.history['val_loss']
    
        epochs = range(len(loss))
    
        plt.figure()
    
        plt.plot(epochs, loss, 'b', label='Training loss')
        plt.plot(epochs, val_loss, 'r', label='Validation loss')
        plt.title(title)
        plt.legend()
    
        plt.show()

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

测试
该模型具有每小时过去5天采样的三个特征的历史记录(120个数据点),因为目标是预测温度,所以该图仅显示过去的温度。预测是在未来一天进行的(因此,历史记录和预测之间存在差距)。

for x, y in val_data_single.take(3):
        plot = show_plot([x[0][:, 1].numpy(), y[0].numpy(),
                        single_step_model.predict(x)[0]], 12,
                       'Single Step Prediction')
        plot.show()

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python


3.3 多步预测模型

在多步骤预测模型中,给定过去的采样值,预测未来一系列的值。对于多步骤模型,训练数据再次包括每小时采样的过去五天的记录。但是,这里的模型需要学习预测接下来12小时的温度。由于每10分钟采样一次数据,因此输出为72个预测值。

​    
    future_target = 72
    x_train_multi, y_train_multi = multivariate_data(dataset, dataset[:, 1], 0,
                                                     TRAIN_SPLIT, past_history,
                                                     future_target, STEP)
    x_val_multi, y_val_multi = multivariate_data(dataset, dataset[:, 1],
                                                 TRAIN_SPLIT, None, past_history,
                                                 future_target, STEP)

划分数据集

​    
    train_data_multi = tf.data.Dataset.from_tensor_slices((x_train_multi, y_train_multi))
    train_data_multi = train_data_multi.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()
    
    val_data_multi = tf.data.Dataset.from_tensor_slices((x_val_multi, y_val_multi))
    val_data_multi = val_data_multi.batch(BATCH_SIZE).repeat()

绘制样本点数据

def multi_step_plot(history, true_future, prediction):
        plt.figure(figsize=(12, 6))
        num_in = create_time_steps(len(history))
        num_out = len(true_future)
    
        plt.plot(num_in, np.array(history[:, 1]), label='History')
        plt.plot(np.arange(num_out)/STEP, np.array(true_future), 'bo',
               label='True Future')
        if prediction.any():
            plt.plot(np.arange(num_out)/STEP, np.array(prediction), 'ro',
                     label='Predicted Future')
        plt.legend(loc='upper left')
        plt.show()
    for x, y in train_data_multi.take(1):
      multi_step_plot(x[0], y[0], np.array([0]))

大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

由于此处的任务比先前的任务复杂一些,因此该模型现在由两个LSTM层组成。最后,由于需要预测之后12个小时的数据,因此Dense层将输出为72。

​    
    multi_step_model = tf.keras.models.Sequential()
    multi_step_model.add(tf.keras.layers.LSTM(32,
                                              return_sequences=True,
                                              input_shape=x_train_multi.shape[-2:]))
    multi_step_model.add(tf.keras.layers.LSTM(16, activation='relu'))
    multi_step_model.add(tf.keras.layers.Dense(72))
    
    multi_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(clipvalue=1.0), loss='mae')

训练:

​    
    multi_step_history = multi_step_model.fit(train_data_multi, epochs=EPOCHS,
                                              steps_per_epoch=EVALUATION_INTERVAL,
                                              validation_data=val_data_multi,
                                              validation_steps=50)

训练日志:


Epoch 1/10
200/200 [] - 73s 363ms/step - loss: 0.5750 - val_loss: 0.3137
Epoch 2/10
200/200 [
] - 73s 367ms/step - loss: 0.4429 - val_loss: 0.2951
Epoch 3/10
200/200 [] - 79s 393ms/step - loss: 0.3839 - val_loss: 0.2793
Epoch 4/10
200/200 [
] - 85s 426ms/step - loss: 0.3062 - val_loss: 0.2240
Epoch 5/10
200/200 [] - 98s 488ms/step - loss: 0.2162 - val_loss: 0.2058
Epoch 6/10
200/200 [
] - 103s 514ms/step - loss: 0.2185 - val_loss: 0.2108
Epoch 7/10
200/200 [] - 107s 537ms/step - loss: 0.2061 - val_loss: 0.2055
Epoch 8/10
200/200 [
] - 108s 539ms/step - loss: 0.2016 - val_loss: 0.1971
Epoch 9/10
200/200 [] - 92s 462ms/step - loss: 0.2047 - val_loss: 0.1969
Epoch 10/10
200/200 [
] - 98s 490ms/step - loss: 0.1937 - val_loss: 0.1833

绘制损失曲线:
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

预测:
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python
大数据毕设分享(含算法) LSTM天气预测算法系统,算法,python

项目获取:

https://gitee.com/sinonfin/algorithm-sharing

到了这里,关于大数据毕设分享(含算法) LSTM天气预测算法系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕设分享 python大数据房价预测与可视化系统

    今天学长向大家介绍一个适合作为毕设的项目 毕设分享 python大数据房价预测与可视化系统 项目获取: https://gitee.com/sinonfin/algorithm-sharing 1.需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写字楼、地

    2024年02月05日
    浏览(35)
  • 计算机竞赛 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

    🔥 优质竞赛项目系列,今天要分享的是 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 时间序列预测是一类比较困难的预测问题。 与常见的回归预测

    2024年02月07日
    浏览(33)
  • 大数据毕业设计python+spark天气预测 天气可视化 天气大数据 空气质量检测 空气质量分析 气象大数据 气象分析 大数据毕设 计算机毕业设计 机器学习 深度学习 人工智能 知识图谱

    论文题目 选题依据 天气预测是指综合使用现代科学技术对某一地区未来一段时间的温度、湿度、风力、风向、天气状况等进行预测。在当今社会,天气预测对人们的生产生活有着举足轻重的影响,与日常出行、农业生产、自然灾害预防等多个领域息息相关,是现代社会正常运转

    2024年04月26日
    浏览(41)
  • 毕设分享 大数据天气数据分析

    Hi,大家好,这里是丹成学长,今天向大家介绍 一个项目 基于GRU的 电影评论情感分析 大家可用于 毕业设计 🧿 选题指导, 项目分享:见文末 本实例将对意大利北部沿海地区的气象数据进行分析与可视化。首先会运用 Python 中 matplotlib 库对数据进行图表化处理,然后调用 sc

    2024年04月22日
    浏览(20)
  • 软件工程毕设分享(含算法) 基于Python大数据的电影可视化分析系统(源码+论文)

    # 0 简介 今天学长向大家介绍一个机器视觉的毕设项目 毕设分享 基于Python大数据的电影可视化分析系统(源码+论文) 项目获取: https://gitee.com/sinonfin/algorithm-sharing 使读者能够了解MOVA项目的概况 电影行业从业人员、电影爱好者 项目名称:Movie Visualization Analysis system (MOVA)

    2024年01月20日
    浏览(37)
  • 软件杯 深度学习 大数据 股票预测系统 - python lstm

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 大数据 股票预测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se

    2024年04月12日
    浏览(46)
  • 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享...

    在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN递归神经网络,能够学习长期依赖关系 ( 点击文末“阅读原文”获取完整 代码数据 ) 。 视频:LSTM 神经网络架构和工作原理及其在Python中的预测应用 什么是依赖关系? 假设您在观看视频时记得前一个场

    2024年02月11日
    浏览(35)
  • 基于python天气数据的预测分析及可视化系统 毕业设计开题报告

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月04日
    浏览(40)
  • 挑战杯 基于LSTM的天气预测 - 时间序列预测

    🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate ​ df = pd.read_csv(‘/home/kesci/input/jena1246/jena_climate_2009_2016.csv’) df.head() 如上所示,每1

    2024年02月21日
    浏览(36)
  • 计算机竞赛 基于LSTM的天气预测 - 时间序列预测

    🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate ​ df = pd.read_csv(‘/home/kesci/input/jena1246/jena_climate_2009_2016.csv’) df.head() 如上所示,每1

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包