#!/usr/bin/env python
# coding: utf-8
# In[1]:
import time # 导入时间模块
#更多模型咸鱼搜索机器学习之心,支持模型定制
import copy # 导入拷贝模块
import numpy # 导入NumPy模块
import random # 导入随机模块
import datetime # 导入日期时间模块
import math # 导入数学模块
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 # 导入sampen模块中的sampen2函数
from vmdpy import VMD # 导入vmdpy模块中的VMD类
import tensorflow as tf # 导入TensorFlow模块
from sklearn.cluster import KMeans # 导入sklearn模块中的KMeans类
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, mean_absolute_percentage_error # 导入sklearn.metrics模块中的评估指标函数
from sklearn.preprocessing import MinMaxScaler # 导入sklearn.preprocessing模块中的MinMaxScaler类
from tensorflow.keras.models import Sequential # 导入TensorFlow.keras模块中的Sequential类
from tensorflow.keras.layers import Dense, Activation, Dropout, LSTM, GRU # 导入TensorFlow.keras模块中的各种层类
from keras.layers import Conv1D, Add, Dropout, Flatten, MaxPooling1D # 导入Keras模块中的各种层类
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping # 导入TensorFlow.keras模块中的回调函数
import warnings # 导入警告模块
from scipy.fftpack import hilbert, fft, ifft # 导入scipy.fftpack模块中的相关函数
from math import log # 导入log函数
from typing import List # 导入List类型
warnings.filterwarnings("ignore") # 忽略警告信息
# In[2]:
# 从名为"焦作.csv"的CSV文件中读取数据,并仅使用第一列和第二列数据,将结果存储在DataFrame对象`df_raw_data`中
df_raw_data = pd.read_csv('焦作.csv', usecols=[0,1])
X = 'AQI'
# 从`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[3]:
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对象
# In[4]:
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对象
# In[5]:
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[6]:
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) # 删除样本熵列
#更多模型咸鱼搜索机器学习之心,支持模型定制
return df_integrate_result.T # 对整合结果进行转置,并返回转置后的DataFrame对象
# In[7]:
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:是否绘制模式的标志。
返回:
- 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[8]:
def create_train_test_set(data=None, timestep=30, co_imf_predict_for_fitting=None):
# 创建训练集和测试集的函数,返回训练集的输入特征、训练集的目标值和目标值的标量转换器。
if isinstance(data, pd.DataFrame):
# 如果数据是DataFrame类型,则将目标值('sum'列)和输入特征(除'sum'列外的所有列)分开。
dataY = data['sum'].values.reshape(-1, 1)
dataX = data.drop('sum', axis=1, inplace=False)
else:
# 如果数据不是DataFrame类型,则将整个数据作为目标值。
dataY = data.values.reshape(-1, 1)
dataX = dataY
scalarX = MinMaxScaler(feature_range=(0, 1))
dataX = scalarX.fit_transform(dataX)
# 对输入特征进行归一化,将特征值缩放到0到1的范围内。
if co_imf_predict_for_fitting is not None:
co_imf_predict_for_fitting = scalarX.transform(co_imf_predict_for_fitting)
# 对用于拟合的协同IMF预测数据进行归一化。
scalarY = MinMaxScaler(feature_range=(0, 1))
dataY = scalarY.fit_transform(dataY)
# 对目标值进行归一化。
trainX, trainY = [], []
# 初始化训练集的输入特征和目标值。
#更多模型咸鱼搜索机器学习之心,支持模型定制
for i in range(len(dataY) - timestep):
trainX.append(np.array(dataX[i:(i + timestep)]))
trainY.append(np.array(dataY[i + timestep]))
# 构建训练集的输入特征和目标值。
if co_imf_predict_for_fitting is not None:
if i < (len(dataY) - timestep - len(co_imf_predict_for_fitting)):
tr
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.Python实现CEEMDAN-VMD-DBO-LSTM时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
资源推荐
资源详情
资源评论
收起资源包目录
CEEMDAN-VMD-DBO-LSTM.zip (3个子文件)
CEEMDAN-VMD-DBO-LSTM.py 31KB
焦作.csv 62KB
焦作全.csv 112KB
共 3 条
- 1
资源评论
- 土鸡蛋工程师2024-03-21怎么能有这么好的资源!只能用感激涕零来形容TAT...
机器学习之心
- 粉丝: 2w+
- 资源: 1070
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于51单片机开发板设计的六位密码锁
- course_s5_linux应用程序开发篇.pdf
- course_s4_ALINX_ZYNQ_MPSoC开发平台Linux驱动教程V1.04.pdf
- course_s0_Xilinx开发环境安装教程.pdf
- 多边形框架物体检测20-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- course_s1_ALINX_ZYNQ_MPSoC开发平台FPGA教程V1.01.pdf
- course_s3_ALINX_ZYNQ_MPSoC开发平台Linux基础教程V1.05.pdf
- rwer456456567567
- AXU2CGB-E开发板用户手册.pdf
- 数据库设计与关系理论-C.J.+Date.epub
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功