#!/usr/bin/env python
# coding: utf-8
# In[1]:
import time# 导入 time 模块,用于处理时间相关的操作
import datetime# 导入 datetime 模块,用于处理日期和时间
import pandas as pd# 导入 pandas 模块,用于数据处理和分析
import numpy as np# 导入 numpy 模块,用于科学计算和数值处理
import matplotlib.pyplot as plt# 导入 matplotlib 模块,用于绘图和数据可视化
from PyEMD import EMD, EEMD, CEEMDAN # 导入 PyEMD 模块,用于进行经验模态分解(EMD)和相关分解方法
from sampen import sampen2 # 导入 sampen 模块,用于计算样本熵
from vmdpy import VMD # 导入 vmdpy 模块,用于进行变分模态分解(VMD)
import tensorflow as tf # 导入 tensorflow 模块,用于机器学习和深度学习
from sklearn.cluster import KMeans # 导入 KMeans 模块,用于进行 KMeans 聚类
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, mean_absolute_percentage_error # 导入 sklearn.metrics 模块,用于计算回归模型的性能指标,R2 、均方误差、平均绝对误差等
from sklearn.preprocessing import MinMaxScaler # 导入 MinMaxScaler 模块,用于进行数据归一化
from tensorflow.keras.models import Sequential# 导入 Sequential 模块,用于构建序列模型
from tensorflow.keras.layers import Dense, Activation, Dropout, LSTM# 导入 Dense、Activation、Dropout、LSTM 等模块,用于构建神经网络模型
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping# 导入 ReduceLROnPlateau、EarlyStopping 等模块,用于在训练过程中动态调整学
import random# 导入 random 模块,用于生成随机数
import math# 导入 math 模块,用于进行数学计算
from scipy.fftpack import hilbert,fft,ifft# 导入 scipy.fftpack 模块,用于进行傅里叶变换和希尔伯特变换
from math import log# 导入 math 模块中的 log 函数,用于计算对数
from keras import backend as K#更多模型咸鱼搜索机器学习之心,支持模型定制
from keras.layers import Input,Bidirectional,Multiply,Concatenate,BatchNormalization
from keras.models import Model
from keras.layers.core import *
from keras.models import *
import warnings
warnings.filterwarnings("ignore")# 导入 warnings 模块,用于忽略警告信息
# In[3]:
plt.rcParams['font.sans-serif'] = ['Times New Roman']# 设置字体为 Times New Roman
plt.rcParams['axes.unicode_minus'] = False# 设置坐标轴的负号不使用 Unicode 编码,避免出现乱码
# In[4]:
data = pd.read_csv('焦作.csv', usecols=[0,1])# 从 CSV 文件中读取数据,只使用第一列和第二列
series = pd.Series(data['AQI'].values,index = data['time'])# 将第二列的数据作为值,第一列的数据作为索引,创建一个 Pandas Series 对象
test = data['AQI'].values[int(len(data['AQI'].values)*0.8):]# 将数据集的后 20% 作为测试集(可自行按照自己想要的改,下面简称可改)
# In[5]:
timestep = 30#时间步长(可改)
pop = 2 # 种群数量(可改)#更多模型咸鱼搜索机器学习之心,支持模型定制
MaxIter = 2 # 最大迭代次数(可改)
dim = 2 # VMD 参数搜索维度# 这里有两个参数需要搜索,即 omega 和 alpha# omega 控制分解的频率带宽,alpha 控制分解的模式数量# 可以根据具体情况进行调整
lb = [3,100] # VMD参数搜索下边界(可改)
ub = [15,4000] # VMD参数搜索上边界(可改)
bound = (lb,ub)# 将下边界和上边界打包成一个元组,用于后续的参数搜索
tau = 0. # VMD 参数 tau,控制分解的平滑度 (一般不改)
DC = 0 # VMD 参数 DC,控制分解的直流分量(一般不改)
init = 1 # VMD 参数 init,控制分解的初始值(一般不改)
tol = 1e-7# VMD 分解的收敛容差# 当两次迭代之间的误差小于该值时,认为分解已经收敛(一般不改)
# In[6]:
def attention_function(inputs, single_attention_vector=False):
# 定义一个名为attention_function的函数,接受一个名为inputs的参数和一个可选参数single_attention_vector,默认为False
# inputs是输入的张量,表示模型中的某一层的输出
TimeSteps = K.int_shape(inputs)[1]
# 获取inputs的形状,返回一个元组,然后取出元组的第二个元素,赋值给TimeSteps
# TimeSteps表示输入张量的时间步数
input_dim = K.int_shape(inputs)[2]
# 获取inputs的形状,返回一个元组,然后取出元组的第三个元素,赋值给input_dim
# input_dim表示输入张量的特征维度
a = Permute((2, 1))(inputs)
# 将inputs进行转置操作,交换第二个和第三个维度,得到一个新的张量a
a = Dense(TimeSteps, activation='softmax')(a)
# 在张量a上应用全连接层,输出维度为TimeSteps,并使用softmax激活函数
if single_attention_vector:
a = Lambda(lambda x: K.mean(x, axis=1))(a)
# 如果single_attention_vector为True,对a沿着第二个维度取平均值,得到一个新的张量a
a = RepeatVector(input_dim)(a)
# 将张量a进行复制,复制input_dim次,得到一个新的张量a
a_probs = Permute((2, 1))(a)
# 将张量a进行转置操作,交换第二个和第三个维度,得到一个新的张量a_probs
output_attention_mul = Multiply()([inputs, a_probs])
# 将inputs和a_probs进行逐元素相乘操作,得到一个新的张量output_attention_mul
# 这里实现了注意力机制,将注意力权重应用到输入张量上,得到加权后的张量
return output_attention_mul
# 返回加权后的张量作为函数的输出#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[7]:
def emd_decompose(series=None, num_clusters = 3):
# 定义一个函数,用于对时间序列进行 EMD 分解
# series:待分解的时间序列
# num_clusters:聚类的簇数,默认为 3(可改)
decom = EMD()# 创建一个 EMD 分解器
df_emd = pd.DataFrame(decom(series.values).T) # 对时间序列进行 EMD 分解,并将结果转换为 DataFrame 格式
df_emd.columns = ['imf'+str(i) for i in range(len(df_emd.columns))]# 为每个分解出来的 IMF 命名
return df_emd# 返回分解后的 DataFrame
# In[8]:
def sample_entropy(df_emd=None, mm=1, r=0.1):
# 定义一个函数,用于计算每个 IMF 的样本熵
# df_emd:经过 EMD 分解后的 DataFrame
# mm:样本熵的阶数,默认为 1(可改为2)
# r:样本熵的阈值,默认为 0.1(可改为0.2)
np_sampen = []# 创建一个空列表,用于存储每个 IMF 的样本熵
for i in range(len(df_emd.columns)):# 遍历每个 IMF
sample_entropy = sampen2(list(df_emd['imf'+str(i)].values),mm=mm,r=r,normalize=True)
# 计算当前 IMF 的样本熵
# sampen2 是一个外部函数,用于计算样本熵
# normalize=True 表示对样本熵进行归一化 #更多模型咸鱼搜索机器学习之心,支持模型定制
np_sampen.append(sample_entropy[1][1])# 将当前 IMF 的样本熵添加到列表中
df_sampen = pd.DataFrame(np_sampen, index=['imf'+str(i) for i in range(len(df_emd.columns))])# 将样本熵列表转换为 DataFrame 格式,并为每个 IMF 命名
return df_sampen# 返回每个 IMF 的样本熵
# In[9]:
def kmeans_cluster(df_sampen=None, num_clusters=3):
# 定义一个函数,用于对样本熵进行 KMeans 聚类
# df_sampen:每个 IMF 的样本熵
# num_clusters:聚类的簇数,默认为 3(可改,但要和上面同时改)
np_integrate_form = KMeans(n_clusters=num_clusters, random_state=9).fit_predict(df_sampen)
# 对样本熵进行 KMeans 聚类#更多模型咸鱼搜索机器学习之心,支持模型定制
# n_clusters 表示聚类的簇数,random_state 表示随机种子(可改)
df_integrate_form = pd.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Python实现EMD-SSA-VMD-LSTM-Attention时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 3 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
- yStRr2024-03-20发现一个宝藏资源,资源有很高的参考价值,赶紧学起来~
- 超越光的速度2024-04-23发现一个宝藏资源,资源有很高的参考价值,赶紧学起来~
![avatar](https://profile-avatar.csdnimg.cn/c33022a554e649088c00481031b45458_kjm13182345320.jpg!1)
机器学习之心
- 粉丝: 1w+
- 资源: 809
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)