model.zip
大小:1.01MB
价格:39积分
下载量:0
评分:
5.0
上传者:java1314777
更新日期:2025-09-22

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本,结果可视化)

资源文件列表(大概)

文件名
大小
model/.idea/
-
model/.idea/.gitignore
184B
model/.idea/inspectionProfiles/
-
model/.idea/inspectionProfiles/profiles_settings.xml
174B
model/.idea/inspectionProfiles/Project_Default.xml
886B
model/.idea/misc.xml
288B
model/.idea/model.iml
488B
model/.idea/modules.xml
269B
model/.idea/workspace.xml
6.63KB
model/__pycache__/
-
model/checkpoints/
-
model/data/
-
model/data/.ipynb_checkpoints/
-
model/data/.ipynb_checkpoints/data_loader-checkpoint.py
13.52KB
model/data/.ipynb_checkpoints/MSST2trainData-checkpoint.csv
455.11KB
model/data/.ipynb_checkpoints/T1testData-checkpoint.csv
189.15KB
model/data/.ipynb_checkpoints/T1trainData-checkpoint.csv
560.76KB
model/data/__init__.py
1B
model/data/__pycache__/
-
model/data/__pycache__/__init__.cpython-38.pyc
115B
model/data/__pycache__/__init__.cpython-39.pyc
152B
model/data/__pycache__/data_loader.cpython-38.pyc
8.88KB
model/data/__pycache__/data_loader.cpython-39.pyc
8.82KB
model/data/data_loader.py
13.47KB
model/environment.yml
198B
model/ETTh1.csv
2.47MB
model/ETTh1-Test.csv
38.37KB
model/exp/
-
model/exp/.ipynb_checkpoints/
-
model/exp/.ipynb_checkpoints/exp_informer (4)-checkpoint.py
15.96KB
model/exp/.ipynb_checkpoints/exp_informer-checkpoint.py
15.98KB
model/exp/__init__.py
-
model/exp/__pycache__/
-
model/exp/__pycache__/__init__.cpython-38.pyc
114B
model/exp/__pycache__/__init__.cpython-39.pyc
151B
model/exp/__pycache__/exp_basic.cpython-38.pyc
1.5KB
model/exp/__pycache__/exp_basic.cpython-39.pyc
1.54KB
model/exp/__pycache__/exp_informer.cpython-38.pyc
8.7KB
model/exp/__pycache__/exp_informer.cpython-39.pyc
10.01KB
model/exp/exp_basic.py
875B
model/exp/exp_informer.py
15.3KB
model/layers/
-
model/layers/__init__.py
-
model/layers/__pycache__/
-
model/layers/__pycache__/__init__.cpython-39.pyc
154B
model/layers/__pycache__/AutoCorrelation.cpython-39.pyc
5.36KB
model/layers/__pycache__/Autoformer_EncDec.cpython-39.pyc
6.85KB
model/layers/__pycache__/Conv_Blocks.cpython-39.pyc
2.41KB
model/layers/__pycache__/Crossformer_EncDec.cpython-39.pyc
4.38KB
model/layers/__pycache__/Embed.cpython-39.pyc
7.26KB
model/layers/__pycache__/Embedding.cpython-39.pyc
6.5KB
model/layers/__pycache__/ETSformer_EncDec.cpython-39.pyc
11.86KB
model/layers/__pycache__/FourierCorrelation.cpython-39.pyc
4.89KB
model/layers/__pycache__/Invertible.cpython-39.pyc
3.68KB
model/layers/__pycache__/MultiWaveletCorrelation.cpython-39.pyc
18.06KB
model/layers/__pycache__/Projection.cpython-39.pyc
1.19KB
model/layers/__pycache__/Pyraformer_EncDec.cpython-39.pyc
6.66KB
model/layers/__pycache__/SelfAttention_Family.cpython-39.pyc
8.88KB
model/layers/__pycache__/Transformer_EncDec.cpython-39.pyc
4.48KB
model/layers/__pycache__/TransformerBlocks.cpython-39.pyc
5.26KB
model/layers/AutoCorrelation.py
6.29KB
model/layers/Autoformer_EncDec.py
6.67KB
model/layers/Conv_Blocks.py
2.31KB
model/layers/Crossformer_EncDec.py
4.23KB
model/layers/Embed.py
6.85KB
model/layers/Embedding.py
4.83KB
model/layers/ETSformer_EncDec.py
11.13KB
model/layers/FourierCorrelation.py
7.17KB
model/layers/Invertible.py
3.22KB
model/layers/MultiWaveletCorrelation.py
22.5KB
model/layers/Projection.py
745B
model/layers/Pyraformer_EncDec.py
7.26KB
model/layers/SelfAttention_Family.py
11.78KB
model/layers/Transformer_EncDec.py
4.81KB
model/layers/TransformerBlocks.py
5.2KB
model/main_informer.py
7.62KB
model/models/
-
model/models/__init__.py
-
model/models/__pycache__/
-
model/models/__pycache__/__init__.cpython-39.pyc
154B
model/models/__pycache__/attn.cpython-38.pyc
5KB
model/models/__pycache__/attn.cpython-39.pyc
5.02KB
model/models/__pycache__/Autoformer.cpython-39.pyc
4.3KB
model/models/__pycache__/Crossformer.cpython-39.pyc
4.46KB
model/models/__pycache__/decoder.cpython-38.pyc
1.93KB
model/models/__pycache__/decoder.cpython-39.pyc
1.95KB
model/models/__pycache__/DLinear.cpython-39.pyc
3.21KB
model/models/__pycache__/embed.cpython-38.pyc
5.02KB
model/models/__pycache__/embed.cpython-39.pyc
5.04KB
model/models/__pycache__/encoder.cpython-38.pyc
3.46KB
model/models/__pycache__/encoder.cpython-39.pyc
3.49KB
model/models/__pycache__/ETSformer.cpython-39.pyc
3.63KB
model/models/__pycache__/FEDformer.cpython-39.pyc
5.04KB
model/models/__pycache__/FiLM.cpython-39.pyc
8.95KB
model/models/__pycache__/Informer.cpython-39.pyc
5.67KB
model/models/__pycache__/iTransformer.cpython-39.pyc
3.96KB
model/models/__pycache__/LightTS.cpython-39.pyc
4.23KB
model/models/__pycache__/MICN.cpython-39.pyc
7KB
model/models/__pycache__/model.cpython-38.pyc
4.81KB
model/models/__pycache__/model.cpython-39.pyc
4.65KB
model/models/__pycache__/Nonstationary_Transformer.cpython-39.pyc
6.11KB
model/models/__pycache__/PatchTST.cpython-39.pyc
5.21KB
model/models/__pycache__/Pyraformer.cpython-39.pyc
3.17KB
model/models/__pycache__/Reformer.cpython-39.pyc
3.75KB
model/models/__pycache__/TiDE.cpython-39.pyc
5.44KB
model/models/__pycache__/TimesNet.cpython-39.pyc
5.65KB
model/models/__pycache__/Transformer.cpython-39.pyc
3.75KB
model/models/attn.py
6.03KB
model/models/Autoformer.py
6.7KB
model/models/Crossformer.py
6.21KB
model/models/decoder.py
1.73KB
model/models/DLinear.py
4.48KB
model/models/embed.py
4.04KB
model/models/encoder.py
3.47KB
model/models/ETSformer.py
4.49KB
model/models/FEDformer.py
8.25KB
model/models/FiLM.py
11.39KB
model/models/Informer.py
7.27KB
model/models/iTransformer.py
5.67KB
model/models/LightTS.py
5.21KB
model/models/MICN.py
9.67KB
model/models/model.py
6.97KB
model/models/Nonstationary_Transformer.py
9.57KB
model/models/PatchTST.py
8.54KB
model/models/Pyraformer.py
4.12KB
model/models/Reformer.py
4.97KB
model/models/TiDE.py
6.86KB
model/models/TimesNet.py
8.48KB
model/models/Transformer.py
5.5KB
model/myplot.png
59.13KB
model/utils/
-
model/utils/__init__.py
-
model/utils/__pycache__/
-
model/utils/__pycache__/__init__.cpython-38.pyc
116B
model/utils/__pycache__/__init__.cpython-39.pyc
153B
model/utils/__pycache__/masking.cpython-38.pyc
1.38KB
model/utils/__pycache__/masking.cpython-39.pyc
1.43KB
model/utils/__pycache__/metrics.cpython-38.pyc
1.38KB
model/utils/__pycache__/metrics.cpython-39.pyc
1.42KB
model/utils/__pycache__/timefeatures.cpython-38.pyc
7.11KB
model/utils/__pycache__/timefeatures.cpython-39.pyc
7.16KB
model/utils/__pycache__/tools.cpython-38.pyc
3.18KB
model/utils/__pycache__/tools.cpython-39.pyc
3.21KB
model/utils/masking.py
851B
model/utils/metrics.py
826B
model/utils/timefeatures.py
5.43KB
model/utils/tools.py
2.76KB

资源内容介绍

在之前的文章中我们已经讲过Informer模型了,但是呢官方的预测功能开发的很简陋只能设定固定长度去预测未来固定范围的值,当我们想要发表论文的时候往往这个预测功能是并不能满足的,所以我在官方代码的基础上增添了一个滚动长期预测的功能,这个功能就是指我们可以第一次预测未来24个时间段的值然后我们像模型中填补 24个值再次去预测未来24个时间段的值(填补功能我设置成自动的了无需大家手动填补),这个功能可以说是很实用的,这样我们可以准确的评估固定时间段的值,当我们实际使用时可以设置自动爬取数据从而产生实际效用。本文修改内容完全为本人个人开发,创作不易所以如果能够帮助到大家希望大家给我的文章点点赞,同时可以关注本专栏(免费阅读),本专栏持续复现各种的顶会内容,无论你想发顶会还是其它水平的论文都能够对你有所帮助。时间序列预测在许多领域都是关键要素,在这些场景中,我们可以利用大量的时间序列历史数据来进行长期预测,即长序列时间序列预测(LSTF)。然而,现有方法大多设计用于短期问题,如预测48点或更少的数据。随着序列长度的增加,模型的预测能力受到挑战。例如,当预测长度超过48点时,LSTM网络的预测
import torchimport numpy as npimport torch.nn as nnimport torch.nn.functional as Ffrom torch import Tensorfrom typing import List, Tupleimport mathfrom functools import partialfrom torch import nn, einsum, diagonalfrom math import log2, ceilimport pdbfrom sympy import Poly, legendre, Symbol, chebyshevtfrom scipy.special import eval_legendredef legendreDer(k, x): def _legendre(k, x): return (2 * k + 1) * eval_legendre(k, x) out = 0 for i in np.arange(k - 1, -1, -2): out += _legendre(i, x) return outdef phi_(phi_c, x, lb=0, ub=1): mask = np.logical_or(x < lb, x > ub) * 1.0 return np.polynomial.polynomial.Polynomial(phi_c)(x) * (1 - mask)def get_phi_psi(k, base): x = Symbol('x') phi_coeff = np.zeros((k, k)) phi_2x_coeff = np.zeros((k, k)) if base == 'legendre': for ki in range(k): coeff_ = Poly(legendre(ki, 2 * x - 1), x).all_coeffs() phi_coeff[ki, :ki + 1] = np.flip(np.sqrt(2 * ki + 1) * np.array(coeff_).astype(np.float64)) coeff_ = Poly(legendre(ki, 4 * x - 1), x).all_coeffs() phi_2x_coeff[ki, :ki + 1] = np.flip(np.sqrt(2) * np.sqrt(2 * ki + 1) * np.array(coeff_).astype(np.float64)) psi1_coeff = np.zeros((k, k)) psi2_coeff = np.zeros((k, k)) for ki in range(k): psi1_coeff[ki, :] = phi_2x_coeff[ki, :] for i in range(k): a = phi_2x_coeff[ki, :ki + 1] b = phi_coeff[i, :i + 1] prod_ = np.convolve(a, b) prod_[np.abs(prod_) < 1e-8] = 0 proj_ = (prod_ * 1 / (np.arange(len(prod_)) + 1) * np.power(0.5, 1 + np.arange(len(prod_)))).sum() psi1_coeff[ki, :] -= proj_ * phi_coeff[i, :] psi2_coeff[ki, :] -= proj_ * phi_coeff[i, :] for j in range(ki): a = phi_2x_coeff[ki, :ki + 1] b = psi1_coeff[j, :] prod_ = np.convolve(a, b) prod_[np.abs(prod_) < 1e-8] = 0 proj_ = (prod_ * 1 / (np.arange(len(prod_)) + 1) * np.power(0.5, 1 + np.arange(len(prod_)))).sum() psi1_coeff[ki, :] -= proj_ * psi1_coeff[j, :] psi2_coeff[ki, :] -= proj_ * psi2_coeff[j, :] a = psi1_coeff[ki, :] prod_ = np.convolve(a, a) prod_[np.abs(prod_) < 1e-8] = 0 norm1 = (prod_ * 1 / (np.arange(len(prod_)) + 1) * np.power(0.5, 1 + np.arange(len(prod_)))).sum() a = psi2_coeff[ki, :] prod_ = np.convolve(a, a) prod_[np.abs(prod_) < 1e-8] = 0 norm2 = (prod_ * 1 / (np.arange(len(prod_)) + 1) * (1 - np.power(0.5, 1 + np.arange(len(prod_))))).sum() norm_ = np.sqrt(norm1 + norm2) psi1_coeff[ki, :] /= norm_ psi2_coeff[ki, :] /= norm_ psi1_coeff[np.abs(psi1_coeff) < 1e-8] = 0 psi2_coeff[np.abs(psi2_coeff) < 1e-8] = 0 phi = [np.poly1d(np.flip(phi_coeff[i, :])) for i in range(k)] psi1 = [np.poly1d(np.flip(psi1_coeff[i, :])) for i in range(k)] psi2 = [np.poly1d(np.flip(psi2_coeff[i, :])) for i in range(k)] elif base == 'chebyshev': for ki in range(k): if ki == 0: phi_coeff[ki, :ki + 1] = np.sqrt(2 / np.pi) phi_2x_coeff[ki, :ki + 1] = np.sqrt(2 / np.pi) * np.sqrt(2) else: coeff_ = Poly(chebyshevt(ki, 2 * x - 1), x).all_coeffs() phi_coeff[ki, :ki + 1] = np.flip(2 / np.sqrt(np.pi) * np.array(coeff_).astype(np.float64)) coeff_ = Poly(chebyshevt(ki, 4 * x - 1), x).all_coeffs() phi_2x_coeff[ki, :ki + 1] = np.flip( np.sqrt(2) * 2 / np.sqrt(np.pi) * np.array(coeff_).astype(np.float64)) phi = [partial(phi_, phi_coeff[i, :]) for i in range(k)] x = Symbol('x') kUse = 2 * k roots = Poly(chebyshevt(kUse, 2 * x - 1)).all_roots() x_m = np.array([rt.evalf(20) for rt in roots]).astype(np.float64) # x_m[x_m==0.5] = 0.5 + 1e-8 # add small noise to avoid the case of 0.5 belonging to both phi(2x) and phi(2x-1) # not needed for our purpose here, we use even k always to avoid wm = np.pi / kUse / 2 psi1_coeff = np.zeros((k, k)) psi2_coeff = np.zeros((k, k)) psi1 = [[] for _ in range(k)] psi2 = [[] for _ in range(k)] for ki in range(k): psi1_coeff[ki, :] = phi_2x_coeff[ki, :] for i in range(k): proj_ = (wm * phi[i](x_m) * np.sqrt(2) * phi[ki](2 * x_m)).sum() psi1_coeff[ki, :] -= proj_ * phi_coeff[i, :] psi2_coeff[ki, :] -= proj_ * phi_coeff[i, :] for j in range(ki): proj_ = (wm * psi1[j](x_m) * np.sqrt(2) * phi[ki](2 * x_m)).sum() psi1_coeff[ki, :] -= proj_ * psi1_coeff[j, :] psi2_coeff[ki, :] -= proj_ * psi2_coeff[j, :] psi1[ki] = partial(phi_, psi1_coeff[ki, :], lb=0, ub=0.5) psi2[ki] = partial(phi_, psi2_coeff[ki, :], lb=0.5, ub=1) norm1 = (wm * psi1[ki](x_m) * psi1[ki](x_m)).sum() norm2 = (wm * psi2[ki](x_m) * psi2[ki](x_m)).sum() norm_ = np.sqrt(norm1 + norm2) psi1_coeff[ki, :] /= norm_ psi2_coeff[ki, :] /= norm_ psi1_coeff[np.abs(psi1_coeff) < 1e-8] = 0 psi2_coeff[np.abs(psi2_coeff) < 1e-8] = 0 psi1[ki] = partial(phi_, psi1_coeff[ki, :], lb=0, ub=0.5 + 1e-16) psi2[ki] = partial(phi_, psi2_coeff[ki, :], lb=0.5 + 1e-16, ub=1) return phi, psi1, psi2def get_filter(base, k): def psi(psi1, psi2, i, inp): mask = (inp <= 0.5) * 1.0 return psi1[i](inp) * mask + psi2[i](inp) * (1 - mask) if base not in ['legendre', 'chebyshev']: raise Exception('Base not supported') x = Symbol('x') H0 = np.zeros((k, k)) H1 = np.zeros((k, k)) G0 = np.zeros((k, k)) G1 = np.zeros((k, k)) PHI0 = np.zeros((k, k)) PHI1 = np.zeros((k, k)) phi, psi1, psi2 = get_phi_psi(k, base) if base == 'legendre': roots = Poly(legendre(k, 2 * x - 1)).all_roots() x_m = np.array([rt.evalf(20) for rt in roots]).astype(np.float64) wm = 1 / k / legendreDer(k, 2 * x_m - 1) / eval_legendre(k - 1, 2 * x_m - 1) for ki in range(k): for kpi in range(k): H0[ki, kpi] = 1 / np.sqrt(2) * (wm * phi[ki](x_m / 2) * phi[kpi](x_m)).sum() G0[ki, kpi] = 1 / np.sqrt(2) * (wm * psi(psi1, psi2, ki, x_m / 2) * phi[kpi](x_m)).sum() H1[ki, kpi] = 1 / np.sqrt(2) * (wm * phi[ki]((x_m + 1) / 2) * phi[kpi](x_m)).sum() G1[ki, kpi] = 1 / np.sqrt(2) * (wm * psi(psi1, psi2, ki, (x_m + 1) / 2) * phi[kpi](x_m)).sum() PHI0 = np.eye(k) PHI1 = np.eye(k) elif base == 'chebyshev': x = Symbol('x') kUse = 2 * k roots = Poly(chebyshevt(kUse, 2 * x - 1)).all_roots() x_m = np.array([rt.evalf(20) for rt in roots]).astype(np.float64) # x_m[x_m==0.5] = 0.5 + 1e-8 # add small noise to avoid the case of 0.5 belonging to both phi(2x) and phi(2x-1) # not needed for our purpose here, we use even k always to avoid wm = np.pi / kUse / 2 for ki in range(k): for kpi in range(k): H0[ki, kpi] = 1 / np.sqrt(2) * (wm * phi[ki](x_m / 2) * phi[kpi](x_m)).sum() G0[ki, kpi] = 1 / np.sqrt(2) * (wm * psi(psi1, psi2, ki, x_m / 2) * phi[kpi](x_m)).sum() H1[ki, kpi] = 1 / np.sqrt(2) * (wm * phi[ki]((x_m + 1) / 2) * phi[kpi](x_m)).sum() G1[ki, kpi] = 1 / np.sqrt(2) * (wm * psi(psi1, psi2, ki, (x_m + 1) / 2) * phi[kpi](x_m)).sum() PHI0[ki, kpi] = (wm * phi[ki](2 * x_m) * phi[kpi](2 * x_m)).sum() * 2 PHI1[ki, kpi] = (wm * phi[ki](2 * x_m - 1) * phi[kpi](2 * x_m - 1)).sum()

用户评论 (0)

发表评论

captcha