时间序列问题解题(基于深度学习)(Datawhale AI 夏令营)

一,解题步骤

时间序列问题是指基于时间顺序的数据进行分析和预测的问题。在深度学习的背景下,常用的模型包括循环神经网络(RNN),长短期记忆网络(LSTM)和门控循环单元(GRU)等。这些模型在处理序列数据时具有较好的表现。以下是解题的一般步骤:

1. 数据预处理

数据收集

收集与问题相关的时间序列数据。例如,股票价格、天气数据、销售记录等。

数据清洗

处理缺失值和异常值,确保数据的一致性和完整性。可以使用插值、填补和过滤的方法来处理。

特征工程

根据具体问题的需求提取特征。例如,可以从时间戳中提取小时、星期、月份等时间特征,或计算移动平均值、标准差等统计特征。

数据标准化

将数据进行标准化或归一化处理,以加速模型的训练过程并提高模型的收敛速度。

2. 数据划分

将数据划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调整模型超参数,测试集用于评估模型的泛化能力。

3. 模型选择和搭建

选择适合的模型架构(RNN, LSTM, GRU等)并搭建模型。

RNN

RNN适用于处理序列数据,但存在梯度消失和梯度爆炸的问题,不适合长序列的预测。

import torch
import torch.nn as nnclass RNNModel(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(RNNModel, self).__init__()self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.rnn(x)out = self.fc(out[:, -1, :])return out

LSTM

LSTM能够有效解决RNN的梯度消失问题,适合长序列的预测。

class LSTMModel(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(LSTMModel, self).__init__()self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.lstm(x)out = self.fc(out[:, -1, :])return out

GRU

GRU是LSTM的简化版本,训练速度更快,但性能稍逊于LSTM。

class GRUModel(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(GRUModel, self).__init__()self.gru = nn.GRU(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.gru(x)out = self.fc(out[:, -1, :])return out

4. 模型训练

定义损失函数和优化器

选择适合的损失函数(如均方误差)和优化器(如Adam)。

criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

训练模型

通过反向传播算法训练模型,并在验证集上评估模型性能,调整超参数。

for epoch in range(num_epochs):outputs = model(train_data)optimizer.zero_grad()loss = criterion(outputs, train_labels)loss.backward()optimizer.step()if (epoch+1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

5. 模型评估和预测

评估模型

在测试集上评估模型的性能,计算评价指标(如均方误差、平均绝对误差等)。

进行预测

使用训练好的模型进行未来数据的预测。

6. 模型保存和部署

保存训练好的模型,以便后续使用。可以将模型部署到云端或本地服务器,进行实时预测。

二,运用

1,导入库

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense, RepeatVector, TimeDistributed
from keras.optimizers import Adam

2,读取数据

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

3,数据预处理

def preprocess_data(df, look_back=100):grouped = df.groupby('id')datasets = {}for id, group in grouped:datasets[id] = group.valuesX, Y, OOT = [], [], []for id, data in datasets.items():for i in range(10, 15):a = data[i:(i + look_back), 3]a = np.append(a, np.array([0] * (100 - len(a))))X.append(a[::-1])Y.append(data[i - 10:i, 3][::-1])a = data[:100, 3]a = np.append(a, np.array([0] * (100 - len(a))))OOT.append(a[::-1])return np.array(X, dtype=np.float64), np.array(Y, dtype=np.float64), np.array(OOT, dtype=np.float64), list(datasets.keys())
  • groupby('id') 将数据按房屋ID分组。

  • datasets 用于存储每个房屋的数据。

  • 对每个房屋的数据进行处理:

    • X 是输入序列,每个序列长度为 look_back
    • Y 是输出目标,每个目标长度为10天。
    • OOT 是初始的100天数据,用于预测。
  • XOOT 中的数据反转([::-1]),可能是为了处理LSTM的输入序列。

  • 返回值包括 XYOOT 以及房屋ID列表。

4,定义模型

def build_model(look_back, n_features, n_output):model = Sequential()model.add(LSTM(50, input_shape=(look_back, n_features)))model.add(RepeatVector(n_output))model.add(LSTM(50, return_sequences=True))model.add(TimeDistributed(Dense(1)))model.compile(loss='mean_squared_error', optimizer=Adam(0.001))return model
  • Sequential 创建一个顺序模型。
  • 第一层 LSTM 具有50个单元,输入形状为 (look_back, n_features)
  • RepeatVector 将输入重复 n_output 次。
  • 第二层 LSTM 也有50个单元,return_sequences=True 表示返回整个序列。
  • TimeDistributed(Dense(1)) 对每个时间步应用一个全连接层。
  • 使用 Adam 优化器和均方误差损失函数编译模型。

5,预处理数据并且训练模型

look_back = 100
n_features = 1
n_output = 10X, Y, OOT, house_ids = preprocess_data(train, look_back=look_back)model = build_model(look_back, n_features, n_output)
model.fit(X, Y, epochs=10, batch_size=64, verbose=1)
# 保存模型到本地
model.save('trained_model.h5')

6,进行预测

# 加载保存的模型
loaded_model = load_model('trained_model.h5')# 进行预测
predicted_values = loaded_model.predict(OOT)

参考文章:‍‌​‌‌‍‌‬‬​​⁠​⁠​​​‌​​⁠​​​‍‬‍⁠‌​‌​‌​​​​​​‍‌​​‌‌Task3:尝试使用深度学习方案 - 飞书云文档 (feishu.cn)

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

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

相关文章

RHCSA —— 第八节 (编辑器、编辑命令等)

Vi/vim编辑器 vim 编辑器 就是相当于在windows中创建一个记事本,一个word文档里面进行编辑所需要的内容。在linux中编辑文本文件,包括但不限于编辑源代码、配置文件、日志文件等文件内容。 三种模式 这是在编辑器中存在三种模式:命令模式、…

vue中的some方法使用@1@

1.Vue中的some方法是一个数组方法,用于检测数组中是否至少有一个元素满足指定条件。它的用法和作用类似于JavaScript中的Array.prototype.some()方法。 2.在Vue中,使用some方法可以对数组进行条件判断,以确定数组中是否存在满足条件的元素。…

[经验] 驰这个汉字的拼音是什么 #学习方法#其他#媒体

驰这个汉字的拼音是什么 驰,是一个常见的汉字,其拼音为“ch”,音调为第四声。它既可以表示动词,也可以表示形容词或副词,意义广泛,经常出现在生活和工作中。下面就让我们一起来了解一下“驰”的含义和用法。…

Huawei、Cisco 路由中 RIP 协议 summary 的用法

华为路由中 RIP summary summary用来使能 RIP 有类聚合,聚合后的路由以使用自然掩码的路由形式发布。undo summary用来取消有类聚合以便在子网之间进行路由,此时,子网的路由信息就会被发布出去。路由聚合降低了路由表中路由信息量。说明 有类…

Deepfake detection【Datawhale AI夏令营】数据增强方法

deepfake detection比赛链接https://www.kaggle.com/competitions/multi-ffdi 训练分类模型判别图片是否为AI生成图片,探究不同数据增强方法对模型表现的影响。 1、数据增强方法 图像分类任务中常见的数据增强方法: (1) 几何变换…

hadoop学习系列--环境安装

先说踩的坑:刚开始学习,使用mac本安装单机hadoop,遭遇mac自身安全限制,到时dfs启动报错,解决后又出现新的问题,部分所需端口无法申请到,导致hadoop启动时报。 最终决定,使用虚拟机&…

【BUG】已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported

已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported 目录 已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported 【常见模块错误】 错误原因 解决办法: 欢迎来到英杰社区https://bbs.csdn.net/…

深入解析HNSW:Faiss中的层次化可导航小世界图

层次化可导航小世界(HNSW)图是向量相似性搜索中表现最佳的索引之一。HNSW 技术以其超级快速的搜索速度和出色的召回率,在近似最近邻(ANN)搜索中表现卓越。尽管 HNSW 是近似最近邻搜索中强大且受欢迎的算法,…

SQL Server性能优化秘籍:自定义统计信息收集的艺术

SQL Server性能优化秘籍:自定义统计信息收集的艺术 在数据库管理中,统计信息是优化查询性能的关键。SQL Server通过自动收集统计信息来帮助查询优化器选择最佳的执行计划。然而,在某些情况下,自动收集可能不足以满足特定需求。本…

Python之后端Django(五)

Day/5 “session的概念”:它是基于cookie实现的,它是存储在服务器端的,sessionID会被存储到客户端的cookie中 “原理” 第一次请求的过程 1.用户第一次请求服务器的时候,服务器根据用户提交的相关信息,校验无误后创…

vue2获取视频时长

使用HTML5的video标签和JavaScript&#xff1a; <template><video ref"video" autoplay controls loop muted loadedmetadata"getVideoDuration"><source src"https://desktop-yikao.oss-cn-beijing.aliyuncs.com/avatar/kaissp.mp4&q…

详解SVN与Git相比存在的不足

原文全文详见个人博客&#xff1a; 详解SVN与Git相比存在的不足截至目前&#xff0c;我们已既从整理梳理的SVN和Git在设计理念上的差异&#xff0c;也重点对二者的存储原理和分支管理理念的差异进行深入分析。这些差异也直接造成了SVN和Git在分支合并、冲突解决、历史记录管理…

山西大学—双一流大学,考数据结构+C语言。山西大学计算机考研考情分析!

山西大学&#xff08;Shanxi University&#xff09;&#xff0c;位于山西省太原市&#xff0c;是中国办学历史最悠久的高等学府之一&#xff0c;是国家“双一流”建设高校&#xff0c;教育部和山西省人民政府共同建设的“部省合建高校”&#xff0c;山西省重点建设大学&#x…

算法刷题笔记 树的重心(树的优先遍历,C++实现)

文章目录 题目描述基本思路实现代码 题目描述 给定一颗树&#xff0c;树中包含n个结点&#xff08;编号1∼n&#xff09;和n−1条无向边。请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。重心定义&#xff1a;重心是指树中的一个结…

掌握SQL Server性能监控:自定义性能计数器的实现

掌握SQL Server性能监控&#xff1a;自定义性能计数器的实现 在数据库管理中&#xff0c;监控数据库性能是确保系统稳定运行的关键。SQL Server提供了丰富的性能监控工具&#xff0c;但有时这些工具可能无法满足特定的监控需求。这时&#xff0c;自定义性能计数器就显得尤为重…

JVM监控及诊断工具-命令行篇-jstack命令介绍

加粗样式 JVM监控及诊断工具-命令行篇04-jstack&#xff1a;打印JVM中线程快照 一 基本情况二 基本语法 一 基本情况 jstack(JVM Stack Trace)&#xff1a; 用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。 线程快照就是当前虚拟机内指定进程的每一条线程正在执…

Scrcpy adb server version (41) doesn‘t match this client (39); killing...

通过Snap 在Ubuntu上安装 scrcpy之后&#xff0c;启动会导致无法同时 scrcpy和adb logcat 过滤日志 目前最新的安装的platforms-tools下面的adb 版本最新都是 adb 41版本 解决办法&#xff1a; 在这里链接里面 下载 adb 1.0.39 版本&#xff0c;替换 /home/host/Android/Sdk/…

新手小白的pytorch学习第七弹------分类问题模型

目录 1. 准备分类数据1.1 输入和输出的形状 shape1.2 将数据转换为张量&#xff0c;同时将我们的数据集转换为训练集和测试集 2 创建模型方法一&#xff1a;自定义forward()方法二&#xff1a;nn.Sequential()方法三&#xff1a;自定义forward()nn.Sequential() 用 pytorch 使用…

基于A律压缩的PCM脉冲编码调制通信系统simulink建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1A律压缩的原理 4.2 PCM编码过程 4.3 量化噪声与信噪比 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#…

python项目读取oracle数据库方法(cx_Oracle库实现)

目录 创建一个python项目&#xff0c;并配置运行环境 查看oracle对应数据库版本&#xff08;该标题下内容只是为了查看版本&#xff0c;不用在意&#xff09; 从oracle官网下载对应版本的oracle客户端 解压下载的压缩包&#xff0c;并获取依赖 将依赖文件导入python项目运…