iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PyTorch搭建ANN实现时间序列风速预测
  • 446
分享到

PyTorch搭建ANN实现时间序列风速预测

2024-04-02 19:04:59 446人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录数据集特征构造数据处理1.数据预处理2.数据集构造ANN模型1.模型训练2.模型预测及表现数据集 数据集为Barcelona某段时间内的气象数据,其中包括温度、湿度以及风速等。

数据集

数据集为Barcelona某段时间内的气象数据,其中包括温度、湿度以及风速等。本文将简单搭建来对风速进行预测。

特征构造

对于风速的预测,除了考虑历史风速数据外,还应该充分考虑其余气象因素的影响。因此,我们根据前24个时刻的风速+下一时刻的其余气象数据来预测下一时刻的风速。

数据处理

1.数据预处理

数据预处理阶段,主要将某些列上的文本数据转为数值型数据,同时对原始数据进行归一化处理。文本数据如下所示:

经过转换后,上述各个类别分别被赋予不同的数值,比如"sky is clear"为0,"few clouds"为1。

def load_data():
    global Max, Min
    df = pd.read_csv('Barcelona/Barcelona.csv')
    df.drop_duplicates(subset=[df.columns[0]], inplace=True)
    # weather_main
    listType = df['weather_main'].unique()
    df.fillna(method='ffill', inplace=True)
    dic = dict.fromkeys(listType)
    for i in range(len(listType)):
        dic[listType[i]] = i
    df['weather_main'] = df['weather_main'].map(dic)
    # weather_description
    listType = df['weather_description'].unique()
    dic = dict.fromkeys(listType)
    for i in range(len(listType)):
        dic[listType[i]] = i
    df['weather_description'] = df['weather_description'].map(dic)
    # weather_icon
    listType = df['weather_icon'].unique()
    dic = dict.fromkeys(listType)
    for i in range(len(listType)):
        dic[listType[i]] = i
    df['weather_icon'] = df['weather_icon'].map(dic)
    # print(df)
    columns = df.columns
    Max = np.max(df['wind_speed'])  # 归一化
    Min = np.min(df['wind_speed'])
    for i in range(2, 17):
        column = columns[i]
        if column == 'wind_speed':
            continue
        df[column] = df[column].astype('float64')
        if len(df[df[column] == 0]) == len(df):  # 全0
            continue
        mx = np.max(df[column])
        mn = np.min(df[column])
        df[column] = (df[column] - mn) / (mx - mn)
    # print(df.isna().sum())
    return df

2.数据集构造

利用当前时刻的气象数据和前24个小时的风速数据来预测当前时刻的风速:

def nn_seq():
    """
    :param flag:
    :param data: 待处理的数据
    :return: X和Y两个数据集,X=[当前时刻的year,month, hour, day, lowtemp, hightemp, 前一天当前时刻的负荷以及前23小时负荷]
                              Y=[当前时刻负荷]
    """
    print('处理数据:')
    data = load_data()
    speed = data['wind_speed']
    speed = speed.tolist()
    speed = torch.FloatTensor(speed).view(-1)
    data = data.values.tolist()
    seq = []
    for i in range(len(data) - 30):
        train_seq = []
        train_label = []
        for j in range(i, i + 24):
            train_seq.append(speed[j])
        # 添加温度、湿度、气压等信息
        for c in range(2, 7):
            train_seq.append(data[i + 24][c])
        for c in range(8, 17):
            train_seq.append(data[i + 24][c])
        train_label.append(speed[i + 24])
        train_seq = torch.FloatTensor(train_seq).view(-1)
        train_label = torch.FloatTensor(train_label).view(-1)
        seq.append((train_seq, train_label))
    # print(seq[:5])
    Dtr = seq[0:int(len(seq) * 0.5)]
    Den = seq[int(len(seq) * 0.50):int(len(seq) * 0.75)]
    Dte = seq[int(len(seq) * 0.75):len(seq)]
    return Dtr, Den, Dte

任意输出其中一条数据:

(tensor([1.0000e+00, 1.0000e+00, 2.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00,
        1.0000e+00, 1.0000e+00, 0.0000e+00, 1.0000e+00, 5.0000e+00, 0.0000e+00,
        2.0000e+00, 0.0000e+00, 0.0000e+00, 5.0000e+00, 0.0000e+00, 2.0000e+00,
        2.0000e+00, 5.0000e+00, 6.0000e+00, 5.0000e+00, 5.0000e+00, 5.0000e+00,
        5.3102e-01, 5.5466e-01, 4.6885e-01, 1.0066e-03, 5.8000e-01, 6.6667e-01,
        0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 9.9338e-01, 0.0000e+00,
        0.0000e+00, 0.0000e+00]), tensor([5.]))

数据被划分为三部分:Dtr、Den以及Dte,Dtr用作训练集,Dte用作测试集。

ANN模型

1.模型训练

ANN模型搭建如下:

def ANN():
    Dtr, Den, Dte = nn_seq()
    my_nn = torch.nn.Sequential(
        torch.nn.Linear(38, 64),
        torch.nn.ReLU(),
        torch.nn.Linear(64, 128),
        torch.nn.ReLU(),
        torch.nn.Linear(128, 1),
    )
    model = my_nn.to(device)
    loss_function = nn.MSELoss().to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
    train_inout_seq = Dtr
    # 训练
    epochs = 50
    for i in range(epochs):
        print('当前', i)
        for seq, labels in train_inout_seq:
            seq = seq.to(device)
            labels = labels.to(device)
            y_pred = model(seq)
            single_loss = loss_function(y_pred, labels)
            optimizer.zero_grad()
            single_loss.backward()
            optimizer.step()
        # if i % 2 == 1:
        print(f'epoch: {i:3} loss: {single_loss.item():10.8f}')
    print(f'epoch: {i:3} loss: {single_loss.item():10.10f}')
    state = {'model': model.state_dict(), 'optimizer': optimizer.state_dict(), 'epoch': epochs}
    torch.save(state, 'Barcelona' + ANN_PATH)

可以看到,模型定义的代码段为:

my_nn = torch.nn.Sequential(
    torch.nn.Linear(38, 64),
    torch.nn.ReLU(),
    torch.nn.Linear(64, 128),
    torch.nn.ReLU(),
    torch.nn.Linear(128, 1),
)

第一层全连接层输入维度为38(前24小时风速+14种气象数据),输出维度为64;第二层输入为64,输出128;第三层输入为128,输出为1。

2.模型预测及表现

def ANN_predict(ann, test_seq):
    pred = []
    for seq, labels in test_seq:
        seq = seq.to(device)
        with torch.no_grad():
            pred.append(ann(seq).item())
    pred = np.array([pred])
    return pred

测试:

def test():
    Dtr, Den, Dte = nn_seq()
    ann = torch.nn.Sequential(
        torch.nn.Linear(38, 64),
        torch.nn.ReLU(),
        torch.nn.Linear(64, 128),
        torch.nn.ReLU(),
        torch.nn.Linear(128, 1),
    )
    ann = ann.to(device)
    ann.load_state_dict(torch.load('Barcelona' + ANN_PATH)['model'])
    ann.eval()
    pred = ANN_predict(ann, Dte)
    print(mean_absolute_error(te_y, pred2.T), np.sqrt(mean_squared_error(te_y, pred2.T)))

ANN在Dte上的表现如下表所示:

MAERMSE
1.041.46

以上就是PyTorch搭建ANN实现时间序列风速预测的详细内容,更多关于ANN时序风速预测的资料请关注编程网其它相关文章!

--结束END--

本文标题: PyTorch搭建ANN实现时间序列风速预测

本文链接: https://www.lsjlt.com/news/117894.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PyTorch搭建ANN实现时间序列风速预测
    目录数据集特征构造数据处理1.数据预处理2.数据集构造ANN模型1.模型训练2.模型预测及表现数据集 数据集为Barcelona某段时间内的气象数据,其中包括温度、湿度以及风速等。...
    99+
    2024-04-02
  • PyTorch怎么搭建ANN实现时间序列风速预测
    这篇文章主要介绍了PyTorch怎么搭建ANN实现时间序列风速预测的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PyTorch怎么搭建ANN实现时间序列风速预测文章都会有所收获,下面我们一起来看看吧。数据集数据...
    99+
    2023-06-30
  • PyTorch搭建CNN实现风速预测
    目录数据集特征构造一维卷积数据处理1.数据预处理2.数据集构造CNN模型1.模型搭建2.模型训练3.模型预测及表现数据集 数据集为Barcelona某段时间内的气象数据,其中包括温...
    99+
    2024-04-02
  • PyTorch搭建LSTM实现时间序列负荷预测
    目录I. 前言II. 数据处理III. LSTM模型IV. 训练V. 测试VI. 源码及数据I. 前言 在上一篇文章深入理解PyTorch中LSTM的输入和输出(从input输入到L...
    99+
    2024-04-02
  • PyTorch搭建双向LSTM实现时间序列负荷预测
    目录I. 前言II. 原理InputsOutputsbatch_first输出提取III. 训练和预测IV. 源码及数据I. 前言 前面几篇文章中介绍的都是单向LSTM,这篇文章讲一...
    99+
    2024-04-02
  • LSTM实现时间序列预测(PyTorch版)
    💥项目专栏:【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍) 文章目录 前言 一、基于PyTorch搭建LSTM模型实现风速时间...
    99+
    2023-09-21
    pytorch lstm 深度学习 人工智能 python
  • 如何使用PyTorch搭建CNN实现风速预测
    这篇文章主要介绍了如何使用PyTorch搭建CNN实现风速预测,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据集数据集为Barcelona某段时间内的气象数据,其中包括温度...
    99+
    2023-06-22
  • Pytorch 如何实现LSTM时间序列预测
    开发环境说明: Python 35 Pytorch 0.2 CPU/GPU均可 1、LSTM简介 人类在进行学习时,往往不总是零开始,学习物理你会有数学基础、学习英语你会有中文基础等...
    99+
    2024-04-02
  • Pytorch怎么实现LSTM时间序列预测
    小编给大家分享一下Pytorch怎么实现LSTM时间序列预测,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发环境说明:Python 35Pytorch 0.2CPU/GPU均可1、LSTM简介人类在进行学习时,往往不总是...
    99+
    2023-06-15
  • PyTorch+LSTM实现单变量时间序列预测
    目录数据准备模型架构模型训练推理预测总结时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率,...
    99+
    2023-02-22
    PyTorch LSTM单变量时间序列预测 PyTorch LSTM时间序列预测 PyTorch LSTM时间序列
  • LSTM 时间序列预测+股票预测案例(Pytorch版)
    文章目录 LSTM 时间序列预测股票预测案例数据特征对收盘价(Close)单特征进行预测1. 导入数据2. 将股票数据收盘价(Close)进行可视化展示3. 特征工程4. 数据集制作5. 模型...
    99+
    2023-09-10
    lstm pytorch python
  • PyTorch搭建LSTM实现多变量时序负荷预测
    目录I. 前言II. 数据处理III. LSTM模型IV. 训练V. 测试VI. 源码及数据I. 前言 在前面的一篇文章PyTorch搭建LSTM实现时间序列预测(负荷预测)中,我们...
    99+
    2024-04-02
  • LSTM多步时间序列预测+区间预测(附代码实现)
    LSTM单步时间序列预测文章(联系方式在此文章): (511条消息) 时间序列预测——LSTM模型(附代码实现)_lstm预测模型_噜噜啦啦咯的博客-CSDN博客 模型原理 长短时记忆网络( Long short-term memo...
    99+
    2023-09-23
    python 算法 lstm 大数据 tensorflow Powered by 金山文档
  • 怎么使用PyTorch和LSTM实现单变量时间序列预测
    这篇“怎么使用PyTorch和LSTM实现单变量时间序列预测”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PyTor...
    99+
    2023-07-05
  • 时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比
    时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比效果一览基本描述程序设计参考资料 效果一览...
    99+
    2023-08-30
    PSO-BiLSTM BiLSTM PSO 时间序列预测
  • Python怎么实现LSTM时间序列预测
    本篇内容主要讲解“Python怎么实现LSTM时间序列预测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现LSTM时间序列预测”吧!参考数据:数据一共两列,左边是日期,右边是乘...
    99+
    2023-06-02
  • 数学建模:ARMA时间序列预测
    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 ARMA预测 时间序列是按时间顺序的一组数字序列 时间序列的特点: 现实的、真实的一组数据,时间序列背后是某一现象的变化规律,时间序列预测就是学习之前的规律来预测后面的值 算法流...
    99+
    2023-08-30
    数学建模
  • PyTorch搭建LSTM实现多变量多步长时序负荷预测
    目录I. 前言II. 数据处理III. LSTM模型IV. 训练和预测V. 源码及数据I. 前言 在前面的两篇文章PyTorch搭建LSTM实现时间序列预测(负荷预测)和PyTorc...
    99+
    2024-04-02
  • Matlab怎么实现时间序列预测分类
    这篇文章主要介绍“Matlab怎么实现时间序列预测分类”,在日常操作中,相信很多人在Matlab怎么实现时间序列预测分类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Matlab怎么实现时间序列预测分类”的疑...
    99+
    2023-06-20
  • Matlab实现时间序列预测分类实例代码
    目录一、数据准备二、时间序列预测分类1、输入为xt,输出是yt2、有x值,有y值:NARX(1)选择模型类型(2)选择输出,只有y_t(3)选择70%用来作为训练数据,15%用来作为...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作