光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

运行效果:光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)_哔哩哔哩_bilibili

运行环境库的版本

 

光伏太阳能电池通过互连形成光伏模块,以捕捉太阳光并将太阳能转化为电能。因此,当光伏模块暴露在阳光下时,它们会产生直流电。这是目前将太阳能转化为电能的最佳方式之一。世界上许多国家已经采用了这项技术;然而,光伏系统的发电量估算是一个挑战,因为光伏系统的发电量受到天气条件的极大影响。

由于天气对光伏系统的生产有很大影响,例如辐射、温度、湿度和风速等因素,因此该竞赛的目标是通过分析历史数据来建立天气与光伏系统生产之间的关系。通过这个模型,我们能够使用未来近期天气的预测数据来预测光伏系统的生产。一旦结果与预测差距较大,可能存在光伏系统的问题,需要找出原因,然后采取适当措施来修复光伏系统并做出更好的决策。例如,根据准确的预测,光伏系统运营商可以平衡电力消耗,并将多余的电力储备用于紧急情况。

1.数据集介绍

来自美国一个光伏电站(每隔一个小时采集数据,从01.01.2017-00:00到31.12.2017-23:00,一共8760行数据

开始位置数据

 截止位置

  1. WindSpeed(风速): 表示风的速度,通常以米/秒(m/s)或千米/小时(km/h)为单位。

  2. Sunshine(阳光照射): 表示阳光的照射量,通常以小时为单位。它表示太阳光照射地表的时间。

  3. AirPressure(气压): 表示大气的压力,通常以帕斯卡(Pa)或百帕斯卡(hPa)为单位。

  4. Radiation(辐射量): 表示辐射的能量强度,通常以瓦特每平方米(W/m²)为单位。这可以是太阳辐射或其他类型的辐射。

  5. AirTemperature(气温): 表示空气的温度,通常以摄氏度(°C)或华氏度(°F)为单位。

  6. RelativeAirHumidity(相对空气湿度): 表示空气中的相对湿度,通常以百分比(%)表示。它是指空气中含水汽的相对量。

  7. SystemProduction(系统发电量): 表示太阳能光伏系统的发电量,通常以兆瓦(MW)为单位。这是您要预测或分析的目标变量,即太阳能系统的实际发电量。

特征列有:'WindSpeed', 'Sunshine', 'AirPressure', 'Radiation', 'AirTemperature', 'RelativeAirHumidity'。

标签列为:SystemProduction

2.模型(训练集和测试集比例为4:1,也就是训练集有前7008行数据,测试集有后1752行数据)

 全年发电数据显示

训练集与测试集的划分 

2.1.LSTM模型

2.2.CNN_LSTM模型

 

2.3. XGBoost回归模型

3.效果

3.1.LSTM模型下的测试集预测值与真实值

3.2.CNN_LSTM模型下的测试集预测值与真实值

 3.3. XGBoost回归模型

测试集预测值与真实值

随机选取一周的数据进行详细展示

整个项目文件夹(第一个文件夹为xgboost模型相关的包文件,xg.py是xgboost模型英文注释版本,xg_chinese.py是xgboost模型中文注释版本)

对项目感兴趣,可以关注最后一行

# 导入所需的库
import matplotlib.pyplot as plt  # 导入用于绘图的Matplotlib库
import seaborn as sns  # 导入Seaborn库,用于绘制统计图
from datetime import datetime  # 导入datetime库,用于处理日期和时间
from xgboost import XGBRegressor  # 导入XGBoost回归模型
from sklearn.model_selection import GridSearchCV  # 导入网格搜索交叉验证
from sklearn.metrics import mean_absolute_error  # 导入用于计算平均绝对误差的库
from xgboost import plot_importance  # 导入用于绘制特征重要性的库
import pandas as pd  # 导入Pandas库,用于数据处理
import numpy as np  # 导入NumPy库,用于数值计算

#代码和数据集的压缩包:https://mbd.pub/o/bread/ZZWTmZ5t

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
以下是一个基于分位数回归的LSTM光伏功率预测Python代码,其中使用了Keras框架和pandas库: ```python import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, LSTM from keras.wrappers.scikit_learn import KerasRegressor from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error from sklearn.model_selection import GridSearchCV from statsmodels.graphics.tsaplots import plot_acf, plot_pacf # 导入数据 data = pd.read_csv('solar.csv', header=0, parse_dates=[0], index_col=0, squeeze=True) # 数据预处理 dataset = data.values.reshape(-1, 1) scaler = MinMaxScaler(feature_range=(0, 1)) dataset = scaler.fit_transform(dataset) # 划分数据集 train_size = int(len(dataset) * 0.67) test_size = len(dataset) - train_size train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] # 将时间序列转化为监督学习问题 def create_dataset(dataset, look_back=1): X, Y = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] X.append(a) Y.append(dataset[i + look_back, 0]) return np.array(X), np.array(Y) look_back = 3 train_X, train_Y = create_dataset(train, look_back) test_X, test_Y = create_dataset(test, look_back) # LSTM模型 def create_model(optimizer='adam', activation='relu', neurons=4, dropout_rate=0.1): model = Sequential() model.add(LSTM(neurons, input_shape=(look_back, 1))) model.add(Dropout(dropout_rate)) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer=optimizer) return model model = KerasRegressor(build_fn=create_model, verbose=0) # 网格搜索调参 optimizers = ['adam', 'rmsprop'] activations = ['relu', 'tanh', 'sigmoid'] neurons = [4, 8, 12] dropout_rates = [0.1, 0.2, 0.3] param_grid = dict(optimizer=optimizers, activation=activations, neurons=neurons, dropout_rate=dropout_rates) grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3) grid_result = grid.fit(train_X, train_Y) # 最优参数 print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_)) # 模型预测 train_predict = grid.predict(train_X) test_predict = grid.predict(test_X) # 反归一化 train_predict = scaler.inverse_transform(train_predict) train_Y = scaler.inverse_transform([train_Y]) test_predict = scaler.inverse_transform(test_predict) test_Y = scaler.inverse_transform([test_Y]) # 计算RMSE train_score = np.sqrt(mean_squared_error(train_Y[0], train_predict[:,0])) print('Train Score: %.2f RMSE' % (train_score)) test_score = np.sqrt(mean_squared_error(test_Y[0], test_predict[:,0])) print('Test Score: %.2f RMSE' % (test_score)) # 绘制预测结果和实际结果的图像 train_predict_plot = np.empty_like(dataset) train_predict_plot[:, :] = np.nan train_predict_plot[look_back:len(train_predict)+look_back, :] = train_predict test_predict_plot = np.empty_like(dataset) test_predict_plot[:, :] = np.nan test_predict_plot[len(train_predict)+(look_back*2)+1:len(dataset)-1, :] = test_predict dataset = scaler.inverse_transform(dataset) plt.plot(dataset, label='actual') plt.plot(train_predict_plot, label='train') plt.plot(test_predict_plot, label='test') plt.legend() plt.show() ``` 注意,此代码中的数据集应该是一个CSV文件,其中包含一列时间戳和一列光伏功率。此外,这个代码还使用了GridSearchCV函数来对LSTM模型的超参数进行网格搜索调参。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习的奋斗者

你的鼓励是我努力的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值