当前位置: 首页 > news >正文

风电功率预测实战:从数据清洗到时空建模​​

基于KDD Cup 2022冠军数据集与轻量级神经网络

​一、问题背景与数据价值​

风电功率预测(Wind Power Forecasting, WPF)是电网稳定的核心技术。参考论文《SDWPF: A Dataset for Spatial Dynamic Wind Power Forecasting》:

"风电的波动性对电网接入构成重大挑战... 高精度预测是保障供电安全的关键"

论文提出的​​SDWPF数据集​​首次融合风机空间位置(134台风机的x/y坐标)与动态工况(温度、叶片角度等),突破了传统时序预测的局限。

二、数据预处理实战​

​步骤1:关键风机筛选​

# 选择40号风机数据(代码DOC3)
filtered_df = df[df['TurbID'] == 40]  # 从134台风机中聚焦单点

步骤2:数据清洗​

  • 删除全特征缺失行(共15,231行→15,231行无缺失)

  • 异常值处理:依据论文规则自动标记无效数据

# 论文定义的无效数据规则(PDF1 Section 4.1)
invalid_cond1 = (Patv <= 0) & (Wspd > 2.5)  # 有风速无功率
invalid_cond2 = (Prab > 89)                  # 叶片角度异常

步骤3:特征工程​

通过Spearman热力图发现核心相关特征:

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties# 计算相关系数
corr_matrix = x.corr(method='spearman')# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='RdYlBu', vmin=-1, vmax=1, annot_kws={"size": 8, "ha": 'center'}, fmt='.2f')
plt.title('相关性热力图')# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题plt.xticks(rotation=90)
plt.yticks(rotation=0)
# plt.show()
# # 保存图像
plt.savefig('spearman-heatmap.png',dpi=300, bbox_inches='tight')

       使用热力图的方式对结果进行可视化,如图所示。按照相关性从大到小排列为:Wspd:0.825326、Pab3:0.452152、Pab1:0.450817、Pab2:0.449813、Itmp:0.072295、Etmp:0.066919、Prtv:0.059205、Wdir:0.037463、Ndir:0.013293。结果解释:当|r|>0.95时,变量间存在显著性相关;当0.95>|r|>0.8时,变量间高度相关;当0.8>|r|>0.5时,变量间中度相关;当0.5>|r|>0.3时,变量间低度相关;当|r|<0.3时,变量间关系极弱,认为不相关。因此,采取r>0.3的列作为后续模型的输入特征,即Wspd、Pab3、Pab1、Pab2四列。

​三、轻量级神经网络建模​
​3.1 数据归一化和划分数据集
# 读取CSV文件
TurbID40 = pd.read_csv('TurbID40_clean.csv')# 划分特征和目标变量
x = TurbID40[['Wspd', 'Pab3', 'Pab1', 'Pab2']]
y = TurbID40['Patv']# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)# 数据归一化
scaler = MinMaxScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_test_scaled = scaler.transform(x_test)
y_train_scaled = scaler.fit_transform(y_train.values.reshape(-1, 1))
y_test_scaled = scaler.transform(y_test.values.reshape(-1, 1))
​3.2 模型架构对比​

       神经网络被广泛应用于各种预测任务。本报告使用两个常见的神经网络模型,分别为:前馈神经网络 (Feedforward Neural Networks):也称为多层感知器 (Multilayer Perceptrons, MLP),是最基本的神经网络类型。它们由多个神经元层组成,信息单向传递,通常用于解决分类和回归问题。卷积神经网络 (Convolutional Neural Networks, CNN):主要用于处理图像和视觉数据,CNN 在处理非图形数据时,可以将数据视为具有类似网格结构的形式。

MLP(多层感知器)的一般结构为:输入层、多个隐藏层和输出层。

CNN(卷积神经网络)的一般结构为:输入层、卷积层、激活函数层、池化层、全连接层和输出层。由于处理的数据非图像数据,因此,CNN不使用池化层。

模型类型

输入层

隐藏层

输出层

特点

MLP

4节点 (Dense)

64→32→16 (ReLU激活)

1节点

全连接

CNN

4节点

Conv2D(32内核)+Flatten

1节点

空间特征提取

# MLP构建代码
mlp_model = Sequential([Dense(64, activation='relu', input_shape=(4,)),Dense(32, activation='relu'),Dense(16, activation='relu'),Dense(1)
])# 构建 CNN 模型
cnn_model = keras.Sequential([layers.Reshape((2, 2, 1), input_shape=(4,)),layers.Conv2D(32, kernel_size=(2, 2), activation='relu'),layers.Flatten(),layers.Dense(16, activation='relu'),layers.Dense(1)
])
3.3 模型实验结果

3.4 参数优化实验​

在构建神经网络模型时,设置节点数和层数,需要根据问题的复杂性、数据集的特征和实验结果进行调整。节点数的选择是一个经验性的过程,并没有固定的规则,通常需要进行多次实验来找到最佳的节点数。

在设置节点数时,有几个常见的考虑因素:

问题复杂性: 如果问题非常复杂,可能需要更多的节点来捕捉输入数据中的复杂模式和关系。增加节点数可以增加模型的容量和拟合能力,但也可能导致过拟合。因此,在增加节点数时要注意避免过度拟合。

数据集的特征:数据集的特征分布和维度也会影响节点数的选择。如果数据集具有复杂的特征和关系,可能需要更多的节点来捕捉这些特征。另外,如果输入数据的维度较高,可能需要更多的节点来处理高维特征空间。

实验和验证:在构建模型时,通常需要进行实验和验证来评估不同节点数下模型的性能。可以尝试不同的节点数,然后使用验证集评估模型的性能指标,如损失函数、准确率、R2 等。根据验证集的性能,选择最佳的节点数。

输入层节点,由于输入4个特征,因此输入层为4个节点且固定不动。其余层数和节点均自行进行调整,使用数据做实验进行验证,由于数据集并非较复杂的数据,因此,采用较简单参数进行逐步实验,各个模型参数和实验结果如图所示。根据下述实验结果可知,随着模型层数和节点的增加,模型复杂度上升的同时,准确率在提升,RMSE也在下降,表示模型更好。最终确定模型结果为R2为0.98和0.99,所以不再继续增加模型复杂度。

实验组

层数

节点数

RMSE

结论

1

2

4

78.3

0.91

欠拟合

2

3

16

42.6

0.96

平衡点

​3​

​4​

​64​

​38.3​

​0.99​

​最优​

四、结果与工程意义​

​性能对比​

模型

RMSE (kW)

推理速度 (ms/样本)

MLP

38.3

0.99

0.4

CNN

41.2

0.98

1.1

​工业价值​

  1. ​空间动态预测​​:论文强调位置关联可提升风电场整体预测精度(PDF1 Figure 2)

  2. ​实时性​​:轻量模型满足10分钟级电网调度需求

http://www.xdnf.cn/news/1297963.html

相关文章:

  • 机器翻译:回译与低资源优化详解
  • C# 高并发处理方式
  • 【每天一个知识点】生物的数字孪生
  • 如何选择适合工业场景的物联网网关?
  • TWINCAT+COPLEY ethercat配置
  • week1-[分支嵌套]公因数
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • C++:浅尝gdb
  • 云计算-Docker Compose 实战:从OwnCloud、WordPress、SkyWalking、Redis ,Rabbitmq等服务配置实例轻松搞定
  • Mybatis学习笔记(七)
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • 跨域及解决方案
  • AI搜索重构下的GEO优化服务商格局观察
  • 一致性哈希Consistent Hashing
  • DAY 42 Grad-CAM与Hook函数
  • JS 解构赋值语法
  • 【OpenCV】Mat详解
  • docker compose部署mysql
  • 面试题之项目中灰度发布是怎么做的
  • 深入了解linux系统—— 线程概念
  • ZigBee入门与提高(3)—— ZigBee协议初识
  • Visual Studio2019/2022离线安装完整教程(含闪退解决方法)
  • Windows bypassUAC 提权技法详解(一)
  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • Python之Django使用技巧(附视频教程)
  • HTML <link rel=“preload“>:提前加载关键资源的性能优化利器
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • C++入门自学Day11-- List类型的自实现