ICEEMDAN-Solar_power-forecast/iceemdan信号重构.ipynb

160 KiB
Raw Permalink Blame History

In [9]:
from math import sqrt
from numpy import concatenate
from matplotlib import pyplot
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
from tensorflow.keras import Sequential

from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dropout
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
In [10]:
# 加载数据
path1 = r"D:\project\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\CEEMAN-PosConv1dbiLSTM-LSTM\模型代码流程\单多步可视化\icial模型\t+1\xin9999低频_forecast(T+1).csv"#数据所在路径
#我的数据是excel表若是csv文件用pandas的read_csv()函数替换即可。
f_low= pd.DataFrame(pd.read_csv(path1))
In [11]:
# 加载数据
path2 = r"D:\project\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\CEEMAN-PosConv1dbiLSTM-LSTM\模型代码流程\单多步可视化\icial模型\t+1\xin99939高频re_forecast(t+1).csv"#数据所在路径
#我的数据是excel表若是csv文件用pandas的read_csv()函数替换即可。
f_high= pd.DataFrame(pd.read_csv(path2))
In [12]:
path3= r"D:\project\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\CEEMAN-PosConv1dbiLSTM-LSTM\模型代码流程\单多步可视化\icial模型\t+1\xin9999低频_test(T+1).csv"#数据所在路径
#我的数据是excel表若是csv文件用pandas的read_csv()函数替换即可。
true_low= pd.DataFrame(pd.read_csv(path3))
In [13]:
path4= r"D:\project\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\CEEMAN-PosConv1dbiLSTM-LSTM\模型代码流程\单多步可视化\icial模型\t+1\xin99939高频re_test(t+1).csv"#数据所在路径
#我的数据是excel表若是csv文件用pandas的read_csv()函数替换即可。
true_high= pd.DataFrame(pd.read_csv(path4))
In [14]:
path5= r"D:\project\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\CEEMAN-PosConv1dbiLSTM-LSTM\模型代码流程\单多步可视化\icial模型\t+1\test.csv"#数据所在路径
#我的数据是excel表若是csv文件用pandas的read_csv()函数替换即可。
true_2= pd.DataFrame(pd.read_csv(path5))
In [50]:
true_2
Out[50]:
column_name
0 4.679599
1 4.675801
2 4.636000
3 4.572200
4 4.525266
... ...
1557 0.000000
1558 0.000000
1559 0.000000
1560 0.000000
1561 0.000000

1562 rows × 1 columns

In [15]:
f_low
Out[15]:
column_name
0 1.681645
1 1.683139
2 1.684575
3 1.685911
4 1.687193
... ...
1557 1.545752
1558 1.545890
1559 1.546023
1560 1.546150
1561 1.546288

1562 rows × 1 columns

In [16]:
pre_data=f_low+f_high
pre_data
true=true_low+true_high
true
# df1 = pd.DataFrame(pre_data, columns=['column_name'])
# 指定文件路径和文件名保存DataFrame到CSV文件中
# df1.to_csv('(t+3)经过ICEEMDAN分解预测的预测集.csv', index=False)
Out[16]:
column_name
0 4.679599e+00
1 4.675801e+00
2 4.636000e+00
3 4.572200e+00
4 4.525266e+00
... ...
1557 2.220446e-16
1558 -4.440892e-16
1559 0.000000e+00
1560 0.000000e+00
1561 -4.440892e-16

1562 rows × 1 columns

In [18]:
import numpy as np

def update_pre_based_on_true(true, pre):
    # 确保 true 和 pre 是 NumPy 数组
    true = np.array(true)
    pre = np.array(pre)
    
    # 使用布尔索引将 pre 中对应位置的值设为0
    pre[true == 0] = 0
    
    return pre



updated_pre = update_pre_based_on_true(true_2, pre_data)
print(updated_pre)
df1 = pd.DataFrame(updated_pre, columns=['column_name'])
# 指定文件路径和文件名保存DataFrame到CSV文件中
df1.to_csv('(t+1)经过ICEEMDAN分解预测的预测集.csv', index=False)
[[4.6702959]
 [4.6353927]
 [4.6446364]
 ...
 [0.       ]
 [0.       ]
 [0.       ]]
In [33]:
plt.figure(figsize=(16,8))
plt.plot(true_2, label='true')
plt.plot(updated_pre, label='pre')
plt.legend()
plt.show()
No description has been provided for this image

找论文 引用 峰值达不到 偏低 情况 通过分解之后 提高了 加在分析 结论 两个数据集篇幅一样 附录 图 未来数据引入 文章对比 3个亮点

In [24]:
from sklearn.metrics import mean_squared_error, mean_absolute_error  # 评价指标
# 使用sklearn调用衡量线性回归的MSE 、 RMSE、 MAE、r2
from math import sqrt
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
print('mean_squared_error:', mean_squared_error(updated_pre, true))  # mse)
print("mean_absolute_error:", mean_absolute_error(updated_pre, true))  # mae
print("rmse:", sqrt(mean_squared_error(pre_data, true)))
print("r2 score:", r2_score(updated_pre, true))#
mean_squared_error: 0.0018723911403168718
mean_absolute_error: 0.015867955050384196
rmse: 0.04488873526226243
r2 score: 0.9994400158090125
In [45]:
true3=true_2[150:400]
pre_data3=updated_pre[150:400]
In [48]:
# 假设true_2和updated_pre是你的NumPy数组
true3 = true_2[150:400]
pre_data3 = updated_pre[150:400]
In [51]:
pre_data3
Out[51]:
array([[ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.0163369 ],
       [ 0.0251948 ],
       [ 0.041127  ],
       [ 0.0720103 ],
       [ 0.1019873 ],
       [ 0.1241176 ],
       [ 0.1625308 ],
       [ 0.2392393 ],
       [ 0.3379075 ],
       [ 0.3366777 ],
       [ 0.3438205 ],
       [ 0.453801  ],
       [ 0.733962  ],
       [ 1.10062312],
       [ 1.1571449 ],
       [ 1.10106503],
       [ 1.1546293 ],
       [ 0.94037127],
       [ 1.06687378],
       [ 1.01553673],
       [ 1.68440343],
       [ 1.83468444],
       [ 1.47566818],
       [ 1.78731345],
       [ 1.71659963],
       [ 2.22625894],
       [ 1.64490715],
       [ 2.2160093 ],
       [ 2.7114284 ],
       [ 2.5523071 ],
       [ 2.5810688 ],
       [ 2.9307843 ],
       [ 2.941154  ],
       [ 3.1618417 ],
       [ 3.3204204 ],
       [ 3.358411  ],
       [ 3.4240855 ],
       [ 3.5163293 ],
       [ 3.6084709 ],
       [ 3.6867704 ],
       [ 3.752888  ],
       [ 3.8386279 ],
       [ 3.9089437 ],
       [ 3.9630318 ],
       [ 4.0262716 ],
       [ 4.0721401 ],
       [ 4.1171014 ],
       [ 4.1841362 ],
       [ 4.238177  ],
       [ 4.2544167 ],
       [ 4.3330357 ],
       [ 4.3175416 ],
       [ 4.4193332 ],
       [ 4.4418901 ],
       [ 4.3219046 ],
       [ 4.4783611 ],
       [ 4.4945666 ],
       [ 4.5501185 ],
       [ 4.5723112 ],
       [ 4.6125982 ],
       [ 4.6380826 ],
       [ 4.6540792 ],
       [ 4.6313653 ],
       [ 4.6655451 ],
       [ 4.6778368 ],
       [ 4.7202235 ],
       [ 4.730606  ],
       [ 4.7420423 ],
       [ 4.6920747 ],
       [ 4.7461967 ],
       [ 4.720302  ],
       [ 4.7038498 ],
       [ 4.6931526 ],
       [ 4.6983388 ],
       [ 4.7022051 ],
       [ 4.7118301 ],
       [ 4.7128725 ],
       [ 4.6984447 ],
       [ 4.7051    ],
       [ 4.6634191 ],
       [ 4.6624637 ],
       [ 4.660742  ],
       [ 4.6593221 ],
       [ 4.6186729 ],
       [ 4.548237  ],
       [ 4.5489672 ],
       [ 4.5194306 ],
       [ 4.47022   ],
       [ 4.490508  ],
       [ 4.4213457 ],
       [ 4.4191448 ],
       [ 4.3844216 ],
       [ 4.3697215 ],
       [ 4.2856085 ],
       [ 4.2563456 ],
       [ 4.1913535 ],
       [ 4.1107695 ],
       [ 4.0634076 ],
       [ 4.0212931 ],
       [ 3.9695915 ],
       [ 3.8896301 ],
       [ 3.8627817 ],
       [ 3.7772458 ],
       [ 3.6876558 ],
       [ 3.6219018 ],
       [ 3.5707506 ],
       [ 3.4685108 ],
       [ 3.3918019 ],
       [ 3.3126507 ],
       [ 3.2466422 ],
       [ 3.1425753 ],
       [ 3.0552442 ],
       [ 2.9830179 ],
       [ 2.8893795 ],
       [ 2.7793767 ],
       [ 2.6845963 ],
       [ 2.6033527 ],
       [ 2.4811151 ],
       [ 2.396697  ],
       [ 2.28874156],
       [ 2.1929247 ],
       [ 2.097524  ],
       [ 1.97145515],
       [ 1.8743583 ],
       [ 1.7611796 ],
       [ 1.6390783 ],
       [ 1.50743994],
       [ 1.39524042],
       [ 1.25902684],
       [ 1.1469124 ],
       [ 1.02292133],
       [ 0.91121595],
       [ 0.79405735],
       [ 0.68875556],
       [ 0.56993494],
       [ 0.4554422 ],
       [ 0.3385904 ],
       [ 0.2156578 ],
       [ 0.0804994 ],
       [ 0.0229209 ],
       [ 0.0284618 ],
       [ 0.0292833 ],
       [ 0.0188559 ],
       [ 0.0067573 ],
       [-0.0049999 ],
       [-0.0103893 ],
       [-0.0064329 ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ],
       [ 0.        ]])
In [56]:
# 假设df是你的DataFrame
true31 = true3['column_name'].to_numpy()
true31
Out[56]:
array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 7.06666700e-03, 2.01333300e-02,
       3.87333260e-02, 5.92666570e-02, 7.54666780e-02, 1.03399977e-01,
       1.54066697e-01, 2.47066677e-01, 2.42999941e-01, 2.61666685e-01,
       3.75400007e-01, 6.25133395e-01, 1.01493323e+00, 1.13400018e+00,
       9.97799873e-01, 9.71266568e-01, 8.37799966e-01, 9.07066643e-01,
       9.70266700e-01, 1.55040002e+00, 1.84593356e+00, 1.38419986e+00,
       1.50386667e+00, 1.67359996e+00, 2.15926647e+00, 1.63333345e+00,
       2.23159981e+00, 2.48473311e+00, 2.52906680e+00, 2.43453336e+00,
       3.03593326e+00, 2.84746695e+00, 3.17600060e+00, 3.19239974e+00,
       3.26446676e+00, 3.35959959e+00, 3.45073366e+00, 3.53786659e+00,
       3.60366631e+00, 3.66599941e+00, 3.75313353e+00, 3.82739925e+00,
       3.88766718e+00, 3.95066643e+00, 4.00006676e+00, 4.04713345e+00,
       4.10600042e+00, 4.18293333e+00, 4.21853399e+00, 4.25460005e+00,
       4.23586655e+00, 4.33613300e+00, 4.38013363e+00, 4.21306658e+00,
       4.37960052e+00, 4.39233303e+00, 4.51066637e+00, 4.54153299e+00,
       4.62066650e+00, 4.63080025e+00, 4.67740011e+00, 4.64033365e+00,
       4.65366697e+00, 4.68333292e+00, 4.72733355e+00, 4.75113344e+00,
       4.75366688e+00, 4.70033312e+00, 4.73833370e+00, 4.76153374e+00,
       4.72873306e+00, 4.71820068e+00, 4.72226620e+00, 4.73426676e+00,
       4.74899960e+00, 4.73766708e+00, 4.69826698e+00, 4.72093391e+00,
       4.67413330e+00, 4.65986633e+00, 4.65800047e+00, 4.63566637e+00,
       4.60559940e+00, 4.53426600e+00, 4.50513315e+00, 4.49013329e+00,
       4.41386700e+00, 4.45499992e+00, 4.37726641e+00, 4.41346645e+00,
       4.34786653e+00, 4.34599972e+00, 4.29546642e+00, 4.27073288e+00,
       4.22719955e+00, 4.16773415e+00, 4.10826588e+00, 4.07379961e+00,
       4.01966667e+00, 3.95240021e+00, 3.91913366e+00, 3.82226634e+00,
       3.74139977e+00, 3.67379951e+00, 3.63913369e+00, 3.54620004e+00,
       3.46993303e+00, 3.41440010e+00, 3.34759975e+00, 3.23346663e+00,
       3.16666675e+00, 3.09766650e+00, 3.01139998e+00, 2.92106676e+00,
       2.82239986e+00, 2.73320007e+00, 2.61460018e+00, 2.51999998e+00,
       2.42013359e+00, 2.31419992e+00, 2.20986652e+00, 2.09686661e+00,
       1.99059999e+00, 1.88639998e+00, 1.77793360e+00, 1.64793324e+00,
       1.54139996e+00, 1.42546666e+00, 1.30626667e+00, 1.19073319e+00,
       1.07273352e+00, 9.58733380e-01, 8.42133343e-01, 7.15199947e-01,
       5.81333339e-01, 4.45266664e-01, 3.14866692e-01, 2.03333318e-01,
       1.25466660e-01, 8.83999990e-02, 6.87333350e-02, 4.97333260e-02,
       3.25333250e-02, 1.56666660e-02, 2.40000000e-03, 1.33333000e-04,
       6.67000000e-05, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00])
In [60]:
plt.figure(figsize=(6,6))
plt.plot(true31, label='true')
plt.plot(pre_data3, label='pre')
plt.legend()
plt.show()
No description has been provided for this image
In [61]:
df1 = pd.DataFrame(updated_pre[150:400], columns=['column_name'])
# 指定文件路径和文件名保存DataFrame到CSV文件中
df1.to_csv('1天的经过ICEEMDAN分解预测的预测集1.csv', index=False)
In [62]:
df2 = pd.DataFrame(true[150:400], columns=['column_name'])
# 指定文件路径和文件名保存DataFrame到CSV文件中
df2.to_csv('1天的经过ICEEMDAN分解预测的真实集.csv', index=False)
In [36]:
# 使用MinMaxScaler进行归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
pre = scaler.fit_transform(updated_pre)
print(pre.shape)
(10415, 1)
In [37]:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
true_data = scaler.fit_transform(true)
print(true_data.shape)
(10415, 1)
In [38]:
from sklearn.metrics import mean_squared_error, mean_absolute_error  # 评价指标
# 使用sklearn调用衡量线性回归的MSE 、 RMSE、 MAE、r2
from math import sqrt
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
print('mean_squared_error:', mean_squared_error(updated_pre, true))  # mse)
print("mean_absolute_error:", mean_absolute_error(updated_pre, true))  # mae
print("rmse:", sqrt(mean_squared_error(pre_data, true)))
print("r2 score:", r2_score(pre[900:2100], true_data[900:2100]))#
mean_squared_error: 0.04675641413227651
mean_absolute_error: 0.0798491015148862
rmse: 0.21689357303163628
r2 score: 0.9912435196234671
In [ ]: