#!/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、EEMD和CEEMDAN类
from sampen import sampen2 # 导入sampen2函数,用于计算样本熵
from vmdpy import VMD # 导入VMD类,用于变分模态分解
import tensorflow as tf # 导入tensorflow库,用于构建和训练深度学习模型
from sklearn.cluster import KMeans # 导入KMeans类,用于聚类分析
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, mean_absolute_percentage_error # 导入评估指标
from sklearn.preprocessing import MinMaxScaler # 导入MinMaxScaler类,用于数据归一化
from tensorflow.keras.models import Sequential # 导入Sequential类,用于构建序贯模型
from tensorflow.keras.layers import Dense, Activation, Dropout, LSTM, GRU # 导入Dense、Activation、Dropout、LSTM和GRU层
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping # 导入ReduceLROnPlateau和EarlyStopping回调函数
# In[2]:
#更多模型CSDN搜索机器学习之心,支持模型定制
# In[3]:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# In[4]:
# 从名为"焦作.csv"的CSV文件中读取数据,并仅使用第一列和第二列数据,将结果存储在DataFrame对象`df_raw_data`中
df_raw_data = pd.read_csv('焦作.csv', usecols=[0,1])
X = 'AQI' #目标列#更多模型CSDN搜索机器学习之心,支持模型定制
# 从`df_raw_data`中提取"AQI"列的值,并使用"time"列作为索引,创建一个Series对象`series_close`
series_close = pd.Series(df_raw_data[X].values, index=df_raw_data['time'])
# 从"AQI"列的值中提取后80%的数据,存储在名为"test"的变量中
test = df_raw_data[X].values[int(len(df_raw_data[X].values)*0.8):]
# In[5]:
def ceemdan_decompose(series=None, trials=10, num_clusters=3):
decom = CEEMDAN() # 创建CEEMDAN对象
decom.trials = trials # 设置迭代次数
df_ceemdan = pd.DataFrame(decom(series.values).T) # 使用CEEMDAN对数据进行分解
df_ceemdan.columns = ['imf'+str(i) for i in range(len(df_ceemdan.columns))] # 为每个分解的模态函数命名
return df_ceemdan # 返回分解后的DataFrame对象#更多模型CSDN搜索机器学习之心,支持模型定制
# In[6]:
def sample_entropy(df_ceemdan=None, mm=1, r=0.1):
np_sampen = [] # 创建一个空列表,用于存储样本熵值
for i in range(len(df_ceemdan.columns)):
sample_entropy = sampen2(list(df_ceemdan['imf'+str(i)].values), mm=mm, r=r, normalize=True) # 计算样本熵
np_sampen.append(sample_entropy[1][1]) # 将样本熵值存储到列表中
df_sampen = pd.DataFrame(np_sampen, index=['imf'+str(i) for i in range(len(df_ceemdan.columns))]) # 创建DataFrame对象,将样本熵值作为数据,模态函数名称作为索引
return df_sampen # 返回样本熵的DataFrame对象#更多模型CSDN搜索机器学习之心,支持模型定制
# In[7]:
def kmeans_cluster(df_sampen=None, num_clusters=3):
np_integrate_form = KMeans(n_clusters=num_clusters, random_state=9).fit_predict(df_sampen) # 使用K-means聚类算法对样本熵数据进行聚类
df_integrate_form = pd.DataFrame(np_integrate_form, index=['imf'+str(i) for i in range(len(df_sampen.index))], columns=[X]) # 创建DataFrame对象,将聚类结果作为数据,模态函数名称作为索引,目标列名称作为列名
return df_integrate_form # 返回聚类结果的DataFrame对象
# In[8]:
def integrate_imfs(df_integrate_form=None, df_ceemdan=None):
df_tmp = pd.DataFrame() # 创建一个空的DataFrame对象,用于存储临时数据
for i in range(df_integrate_form.values.max()+1): # 遍历聚类结果的取值范围
df_tmp['imf'+str(i)] = df_ceemdan[df_integrate_form[(df_integrate_form[X]==i)].index].sum(axis=1) # 将属于同一类别的模态函数进行求和,存储到临时DataFrame对象中
df_integrate_result = df_tmp.T # 对临时DataFrame对象进行转置
df_integrate_result['sampen'] = sample_entropy(df_tmp).values # 计算整合后的模态函数的样本熵值
df_integrate_result.sort_values(by=['sampen'], ascending=False, inplace=True) # 根据样本熵值降序排序整合结果
df_integrate_result.index = ['co-imf'+str(i) for i in range(df_integrate_form.values.max()+1)] # 修改索引,加上前缀'co-imf'
df_integrate_result = df_integrate_result.drop('sampen', axis=1, inplace=False) # 删除样本熵列
#更多模型CSDN搜索机器学习之心,支持模型定制
return df_integrate_result.T # 对整合结果进行转置,并返回转置后的DataFrame对象
# In[9]:
def vmd_decompose(series=None, alpha=2000, tau=0, K=10, DC=0, init=1, tol=1e-7, draw=True):
"""
对给定的时间序列进行 VMD 分解。
参数:
- series:输入的时间序列。
- alpha:在 VMD 模型中平衡数据拟合项和平滑项的权重参数。
- tau:控制模式的时间局部性和频率局部性之间权衡的时间步参数。
- K:要分解的模式数量。
- DC:是否包括直流(趋势)分量在分解中的标志。
- init:模式的初始化方法。
- tol:用于确定算法收敛的容差值。
- draw:是否绘制模式的标志。
返回:#更多模型CSDN搜索机器学习之心,支持模型定制
- df_vmd:包含 VMD 模式的 DataFrame,每个模式作为列。
"""
# 执行 VMD 分解
imfs_vmd, imfs_hat, omega = VMD(series, alpha, tau, K, DC, init, tol)
# 将 VMD 模式转换为 DataFrame
df_vmd = pd.DataFrame(imfs_vmd.T)
df_vmd.columns = ['imf'+str(i) for i in range(K)]
return df_vmd
# In[10]:
def GRU_model(trainset_shape):
# 创建一个序贯模型
model = Sequential()
# 添加第一层GRU层
model.add(GRU(128, input_shape=(trainset_shape[1], trainset_shape[2]), activation='tanh', return_sequences=True))
model.add(Dropout(0.2)) # 添加Dropout层,防止过拟合
# 添加第二层GRU层
model.add(GRU(64, activation='tanh', return_sequences=True))
model.add(Dropout(0.2)) # 添加Dropout层,防止过拟合
# 添加第三层GRU层
model.add(GRU(32, activation='tanh', return_sequences=False))
model.add(Dropout(0.2)) # 添加Dropout层,防止过拟合
# 添加全连接层
model.add(Dense(1, activation='tanh'))
# 编译模型,设置损失函数和优化器
model.compile(loss='mse', optimizer='adam')
return model#更多模型CSDN搜索机器学习之心,支持模型定制
# In[11]:
def evaluation_model(y_test, y_pred):
# 对模型进行评估,并返回评估结果的DataFrame。
#更多模型CSDN搜索机器学习之心,支持模型定制
y_test, y_pred = np.array(y_test).ravel(), np.array(y_pred).ravel()
# 将y_test和y_pred转换为一维数组。
r2 = r2_score(y_test, y_pred)
# 计算R^2得分,衡量预测结果的拟合程度。
rmse = mean_squared_error(y_test, y_pred, squared=False)
# 计算均方根误差(RMSE),衡量预测结果与实际值的差异。
mae = mean_absolute_error(y_test, y_pred)
# 计算平均绝对误差(MAE),衡量预测结果与实际值的差异。
mape = mean_absolute_percentage_error(y_test, y_pred)
# 计算平均绝对百分比误差(MAPE),衡量预测结果与实际值的百分比差异。
df_evaluation = pd.DataFrame({'r2': r2, 'rmse': rmse, 'mae': mae, 'mape': mape}, index=
没有合适的资源?快使用搜索试试~ 我知道了~
Python实现CEEMDAN-VMD-GRU时间序列预测(完整源码和数据)
共3个文件
csv:2个
py:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 183 浏览量
2024-02-28
10:01:15
上传
评论 1
收藏 49KB ZIP 举报
温馨提示
1.Python实现CEEMDAN-VMD-GRU时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
资源推荐
资源详情
资源评论
收起资源包目录
CEEMDAN-VMD-GRU.zip (3个子文件)
焦作.csv 62KB
焦作全.csv 112KB
CEEMDAN-VMD-GRU.py 18KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 681
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Preliminary Findings on Handmade Rattan Baby Crib andBassinet Designs Regarding.zip
- aveebfq_v1.2.83_downyi.com.apk
- 基于有机发光二极管(OLED)的建模优化算法的matlab仿真源码+数据+文档说明+项目说明(高分课程设计)
- hash01-test.c 本人哈希表(一)的示例代码,仅供参考!
- 处理数据.py
- 软件实施计划表.xls
- 软件开发应用软件项目提交文档目录要求(全过程)(推荐文档).xls
- 软件开发项目工作量及报价模板.xls
- cpu设计.zip
- 588998461316995DjVu格式阅读器.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功