#!/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
![avatar](https://profile-avatar.csdnimg.cn/c33022a554e649088c00481031b45458_kjm13182345320.jpg!1)
机器学习之心
- 粉丝: 2w+
- 资源: 1123
最新资源
- 简单实用触模式报警器.zip
- 可编程继电器模块应用程序.zip
- 课程设计任务书-数字秒表.zip
- 六路循环彩灯控制电路.zip
- COMSOL模拟采空区漏风现象:注氮技术及其动态推进对三带分布的影响,基于COMSOL模拟的采空区漏风特征及注氮调控技术研究:动态推进下的三带分布影响分析,comsol采空区漏风,注氮模拟 动态推进
- 模拟自然风无级调适电风扇控制电路.zip
- 燃气炉全自动点火电路.zip
- 闪光的摆.zip
- 神奇旋转彩灯电路.zip
- 声光双控延迟照明灯.zip
- 声音报警电路.zip
- 实用灯控节能开关.zip
- 实用时基电风扇模拟自然风控制电路.zip
- 实用无级触摸调光灯电路.zip
- 双向超沮报警器.zip
- vue3-ts-cesium-map-show-Typescript资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![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)