时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测

这篇具有很好参考价值的文章主要介绍了时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测

效果一览

时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM
时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM

时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM
时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM
时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM

时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM

基本介绍

基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测(Matlab+Python完整源码和数据)
该方法结合数据分布特征,利用 GMM 聚类将大型风电场划分为若干机组群,借助贝叶斯信息准则指标评价,获得风电场内最优机组分组方案。最后,基于CNN-BiLSTM-Attention的功率预测方法,验证所提聚类方法的有效性以及相较于其他聚类方法的优越性。
1.先运行data_process.m 能得到cluster.csv文件;
2.之后运行main.py进行预测,会得到results文件夹以及里面的结
果和图片
3.最后运行result_analysis.m进行数据分析,Python用的是Keras。

模型描述

对任意来流条件下的风电场发电功率进行准确预测,是提高电网对风电接纳能力的有效措施。针对大型风电场的功率预测采用单点位风速外推预测代表性差的局限,提出基于高斯混合模型(GMM)聚类的风电场短期功率预测方法。方法结合数据分布特征,利用GMM 聚类将大型风电场划分为若干机组群,借助贝叶斯信息准则指标评价,获得风电场内最优机组分组方案。算例表明,所建立的GMM 聚类模型均极大地提高了风电功率预测模型的准确性。相较于应用广泛的k-means 聚类、层次凝聚聚类等方法,GMM 聚类方法在分组功率预测中表现出了显著优势,为大型风电场短期功率预测模型的优化及运行经济性的提升提供了技术支持与依据。

时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测,时间序列,高斯混合模型聚类,CNN-BiLSTM-Att,CNN-BiLSTM,Attention,风电场短期功率预测,GMM

程序设计

  • 完整程序和数据下载方式1(资源处直接下载):Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测
  • 完整程序和数据下载方式2(订阅《CNN-DL卷积深度学习模型》专栏,同时可阅读《CNN-DL卷积深度学习模型》专栏收录的内容,本篇文章数据订阅后私信我获取):Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测
  • 完整程序和数据下载方式3(订阅《组合优化》专栏,同时获取《组合优化》专栏收录程序6份,数据订阅后私信我获取):Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测
from __future__ import print_function

import argparse
import os

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from model import train_model

parser = argparse.ArgumentParser()
parser.add_argument('--model_name', type=str, default='CNN_BiLSTM', choices=['CNN_BiLSTM_Attn', 'CNN_BiLSTM'])
parser.add_argument('--epochs', type=int, default=600, help="Epochs")
parser.add_argument('--batch_size', type=int, default=256, help="Batch Size")
parser.add_argument('--learning_rate', type=float, default=0.001, help="Learning rate")
parser.add_argument('--sequence_length', type=int, default=10, help="sequence length")
parser.add_argument('--dataset', type=str, default='all', choices=['cluster1', 'cluster2', 'cluster3', 'all'])
parser.add_argument('--path', type=str, default='./results/')
args = parser.parse_args()

if not os.path.exists(args.path):
    os.mkdir(args.path)


def convertSeriesToMatrix(vectorSeries, sequence_length):
    """
    滑动时间窗口处理
    """
    matrix = []
    for i in range(len(vectorSeries) - sequence_length + 1):
        matrix.append(vectorSeries[i: i + sequence_length])
    return matrix


if args.dataset in {'cluster1', 'cluster2', 'cluster3'}:
    df = pd.read_csv(args.dataset + '.csv')
    wind = np.array(df)
elif args.dataset == 'all':
    X_files = os.listdir(os.getcwd() + '/dataset')
    if '.gitignore' in X_files: X_files.remove('.gitignore')
    X_files = np.array(X_files)
    wind = []
    for filename in X_files:
        df = pd.read_csv(os.getcwd() + '/dataset/' + filename)
        data = df.values
        wind.append(data[:, 0])
    wind = np.sum(wind, axis=0).reshape(-1, 1)

list_hourly_data = [wind[i] for i in range(0, wind.shape[0]) if i % 12 == 0]
wind_data = np.array(list_hourly_data)

# min-max归一化处理
MAX_MIN = []
for i in range(wind_data.shape[1]):  # 取每一列
    temp_max = np.max(wind_data[:, i])
    temp_min = np.min(wind_data[:, i])  # 第i列最小值
    wind_data[:, i] = (wind_data[:, i] - temp_min) / (temp_max - temp_min)  # 归一化
    # wind_data[:, i] = wind_data[:, i] / temp_max # 归一化
    MAX_MIN.append([temp_max, temp_min])

MAX_NUM = MAX_MIN[0][0]
MIN_NUM = MAX_MIN[0][1]

matrix_load = convertSeriesToMatrix(wind_data, args.sequence_length)  # 滑动时间窗口,窗口长度可以改
matrix_load = np.array(matrix_load).astype(np.float32)  # matrix_load转为ndarray

# 分为训练集与测试集,训练集占90%
train_row = int(round(0.9 * matrix_load.shape[0]))
train_set = matrix_load[:train_row, :]

np.random.shuffle(train_set)  # 打乱训练集,测试集不用打乱

X_train = train_set[:, :-1]  # 训练集
y_train = train_set[:, -1, 0].reshape(-1, 1)  # 训练集label

X_test = matrix_load[train_row:, :-1]  # 测试集
y_test = matrix_load[train_row:, -1, 0].reshape(-1, 1)  # 测试集label

X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1] * X_train.shape[2], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1] * X_test.shape[2], 1))

# =====================================
# ========= 载入模型,开始训练 =========
# =====================================
input_shape = X_train.shape[1:]

model = train_model(args.model_name, input_shape=input_shape)

model.summary()  # print model 结构
history = model.fit(X_train, y_train, batch_size=args.batch_size, epochs=args.epochs, validation_split=0.05, verbose=1)  # 开始训练
# model.save(args.path + args.model_name + '_' + args.dataset + 'model.h5')  # 保存模型

# =====================================
# ============ 训练结果评估 ============
# =====================================

# 预测测试集
predicted_values = model.predict(X_test)
num_test_samples = len(predicted_values)
predicted_values = np.reshape(predicted_values, (num_test_samples, 1))

# 评估训练结果
test_mse = model.evaluate(X_test, y_test, verbose=1)
print('\nThe mean squared error (MSE) on the test data set is %.3f over %d test samples.' % (test_mse[0], len(y_test)))

# 反归一化
predicted_values = predicted_values * (MAX_NUM - MIN_NUM) + MIN_NUM
y_test = y_test * (MAX_NUM - MIN_NUM) + MIN_NUM
y_train = y_train * (MAX_NUM - MIN_NUM) + MIN_NUM

# 画图
fig = plt.figure(figsize=(15, 5), dpi=600)
plt.plot(y_test)
plt.plot(predicted_values)
plt.xlabel('Hour')
plt.ylabel('Wind Power')
# plt.show()
fig.savefig(args.path + args.model_name + '_' + args.dataset + '_output.png', bbox_inches='tight')

# MSE 损失函数
fig = plt.figure(figsize=(15, 5), dpi=600)
plt.plot(history.history['loss'], label='training loss')
plt.plot(history.history['val_loss'], label='val loss')
plt.title('model loss')
plt.ylabel('MSE Loss')
plt.xlabel('epoch')
plt.legend(loc='upper right')
fig.savefig(args.path + args.model_name + '_' + args.dataset + '_loss.png')

# MAE
fig = plt.figure(figsize=(15, 5), dpi=600)
plt.plot(history.history['mae'], label='training mae')
plt.plot(history.history['val_mae'], label='val mae')
plt.title('model MAE')
plt.ylabel('MAE')
plt.xlabel('epoch')
plt.legend(loc='upper right')
fig.savefig(args.path + args.model_name + '_' + args.dataset + '_mae.png')

# RMSE
fig = plt.figure(figsize=(15, 5), dpi=600)
plt.plot(history.history['root_mean_squared_error'], label='training rmse')
plt.plot(history.history['val_root_mean_squared_error'], label='val rmse')
plt.title('model RMSE')
plt.ylabel('RMSE')
plt.xlabel('epoch')
plt.legend(loc='upper right')
fig.savefig(args.path + args.model_name + '_' + args.dataset + '_rmse.png')

# 将预测结果保存成csv文件
data = np.hstack((predicted_values, y_test))
df = pd.DataFrame(data, columns=['predicted', 'real'])
df.to_csv(args.path + args.model_name + '_' + args.dataset + '_result.csv')

# MSE loss 和 MAE 保存成csv文件
df = pd.DataFrame(history.history)
df.to_csv(args.path + args.model_name + '_' + args.dataset + '_loss.csv')

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718文章来源地址https://www.toymoban.com/news/detail-564108.html

到了这里,关于时序预测 | Matlab+Python实现基于高斯混合模型聚类结合CNN-BiLSTM-Attention的风电场短期功率预测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 时序预测 | Matlab实现基于SVR支持向量机回归的电力负荷预测模型

    时序预测 | Matlab实现基于SVR支持向量机回归的电力负荷预测模型

    预测结果 基本介绍 时序预测 | Matlab实现基于SVR支持向量机回归的电力负荷预测模型 支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于

    2024年02月14日
    浏览(19)
  • 基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)

    基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🌈3 Matlab代码+数据+文章讲解 🎉4 参考文

    2024年02月13日
    浏览(10)
  • 基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

    基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 MATLAB2013B        基于高斯混合模型(Gaussian Mixture Model, GMM)的视频背景提取和人员跟踪算法是一种广泛应用的计算机视觉方法,主要用于分离视频序列中的静态背景和动态前景

    2024年04月25日
    浏览(6)
  • Python开发项目基于改进高斯混合模型的图割算法

    Python开发项目基于改进高斯混合模型的图割算法

    博主介绍 :擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻  精彩专栏推荐订阅 👇🏻 不然下次找不到哟 Java项目精品实战案例(300套) Java微信小程序项目实战(200套) Python项目精品实战案例(100套) 目录

    2024年02月13日
    浏览(10)
  • 多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

    多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

    效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测(完整源码和数据) 2.运行环境为Matlab2021b; 3.excel数据集,输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测,main.m为主程序,运行即可,所有文件放在一个文件

    2024年01月17日
    浏览(42)
  • 时序预测 | MATLAB实现ARMA自回归移动平均模型时间序列预测

    时序预测 | MATLAB实现ARMA自回归移动平均模型时间序列预测

    预测效果 基本介绍 MATLAB实现ARMA时间序列预测(完整源码和数据) 本程序基于MATLAB的armax函数实现arma时间序列预测; 实现了模型趋势分析、序列平稳化、AIC准则模型参数识别与定阶、预测结果与误差分析过程,逻辑清晰。 数据为144个月的数据集,周期为一年,最终实现历史

    2024年02月07日
    浏览(13)
  • 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测

    时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测

    效果一览 基本介绍 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 研究内容 NARX(Nonlinear AutoRegressive with eXogenous inputs)是一种非线性自回归外生模型,可以用于时间序列预测,其中外生变量可以帮助提高预测的准确性。在房价预测中,NARX模型可以使用历史房价数据

    2024年02月16日
    浏览(11)
  • 时序预测 | MATLAB实现AR、ARMA、ARIMA时间序列预测模型答疑

    基本介绍 AR 自回归模型(Autoregressive Model),通常简称为AR模型,是一种用于时间序列分析和预测的统计模型。它基于时间序列自身的历史值来预测未来值,通过将当前时刻的观测值与前一时刻的观测值之间的关系进行建模。 AR模型的基本思想是,当前时刻的值可以由之前时

    2024年02月09日
    浏览(9)
  • 高斯混合模型(GMM)及EM算法---MATLAB程序

    高斯混合模型(GMM)及EM算法---MATLAB程序

            大家喜欢的话记得关注、点赞、收藏哦~         高斯混合模型(Gaussian Mixed Model,GMM) 是由多个高斯分布函数组成的线性组合。理论上,GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同分布的情况。---转自:http://t.csdn.cn/SPEcN      

    2024年02月11日
    浏览(13)
  • 【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证

    【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证

    后台私信回复“52期”即可免费获取数据及代码。 1.数据 一列时间序列数据 ,滑动窗口尺寸为15。 2.思路 使用GPR自动优化函数,对sigma进行自动寻优。 适应度值log(1+loss)。 迭代次数默认30. 后台私信回复“52期”即可获取数据及代码下载链接。

    2024年02月12日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包