CNN-GRU回归预测预测分析,多输入,单输出。 Matlab作图,预测电力负荷,数据来源于电工杯,联系宝贝送。 代码注释清晰,替换数据即可。 。
最近研究了用 CNN - GRU 模型进行回归预测,目标是预测电力负荷,还蛮有意思的,今天就来给大家分享一下。这个模型采用多输入单输出的方式,能够很好地处理电力负荷预测问题。数据是来源于电工杯的,要是大家需要的话,可以联系我哦。
数据处理
首先,我们得把数据搞到手,并且做一些必要的处理。在 Matlab 里,读取数据那是相当方便。以下是简单的读取数据代码:
% 读取数据 data = readtable('electric_power_data.csv'); % 假设数据存储在这个 CSV 文件中 X = table2array(data(:, 1:end - 1)); % 多输入特征 Y = table2array(data(:, end)); % 单输出,即电力负荷代码分析:readtable函数用于读取 CSV 文件的数据,将其存储为表格形式。接着,table2array把表格数据转换为数组,X取了除最后一列之外的所有列作为输入特征,Y则只取最后一列作为输出,也就是我们要预测的电力负荷。
数据划分
把数据分成训练集和测试集,这是很关键的一步,有助于我们评估模型的性能。
% 划分训练集和测试集 train_ratio = 0.8; % 训练集比例 train_size = floor(train_ratio * length(Y)); X_train = X(1:train_size, :); Y_train = Y(1:train_size); X_test = X(train_size + 1:end, :); Y_test = Y(train_size + 1:end);代码分析:这里设定了训练集的比例为 0.8,也就是 80% 的数据用于训练。floor函数用于向下取整,算出训练集的大小。然后根据这个大小,把输入和输出数据分别划分成训练集和测试集。
构建 CNN - GRU 模型
重头戏来了,构建我们的 CNN - GRU 模型。
% 构建 CNN - GRU 模型 layers = [ imageInputLayer([size(X_train, 2), 1, 1]) % 输入层 convolution2dLayer([3, 1], 16, 'Padding', 'same') % CNN 层 batchNormalizationLayer % 批量归一化层 reluLayer % 激活函数层 gruLayer(32, 'OutputMode', 'last') % GRU 层 fullyConnectedLayer(1) % 全连接层 regressionLayer]; % 回归层 options = trainingOptions('adam', ... 'MaxEpochs', 50, ... 'MiniBatchSize', 64, ... 'Shuffle', 'every-epoch', ... 'Verbose', false, ... 'Plots', 'training-progress'); net = trainNetwork(X_train, Y_train, layers, options);代码分析:
- 输入层:
imageInputLayer用于接收输入数据,这里根据输入特征的维度来设置。 - CNN 层:
convolution2dLayer进行卷积操作,[3, 1]是卷积核的大小,16 是卷积核的数量,'Padding', 'same'保证输出和输入的尺寸相同。 - 批量归一化层:
batchNormalizationLayer可以加速模型的收敛。 - 激活函数层:
reluLayer采用 ReLU 激活函数,增加模型的非线性。 - GRU 层:
gruLayer用于处理序列数据,'OutputMode', 'last'表示只输出最后一个时间步的结果。 - 全连接层:
fullyConnectedLayer把前面的特征映射到一个输出节点。 - 回归层:
regressionLayer用于回归任务。
trainingOptions是设置训练的参数,比如使用 Adam 优化器,最大训练轮数为 50,小批量大小为 64 等。最后用trainNetwork函数来训练模型。
模型预测与评估
训练好模型后,就可以用测试集进行预测,并评估模型的性能。
% 模型预测 Y_pred = predict(net, X_test); % 计算均方误差 mse = mean((Y_pred - Y_test).^2); disp(['均方误差: ', num2str(mse)]);代码分析:predict函数用训练好的模型对测试集进行预测,得到预测结果Y_pred。然后计算预测值和真实值之间的均方误差,mean函数求平均值,disp函数把结果显示出来。
Matlab 作图
最后,用 Matlab 画个图,直观地看看预测结果和真实值的对比。
% 绘图 figure; plot(Y_test, 'b', 'DisplayName', '真实值'); hold on; plot(Y_pred, 'r--', 'DisplayName', '预测值'); xlabel('样本序号'); ylabel('电力负荷'); title('电力负荷预测结果'); legend;代码分析:figure函数创建一个新的图形窗口,plot函数分别绘制真实值和预测值的曲线,hold on保证两条曲线画在同一个图里。xlabel、ylabel和title分别设置坐标轴标签和图的标题,legend显示图例。
CNN-GRU回归预测预测分析,多输入,单输出。 Matlab作图,预测电力负荷,数据来源于电工杯,联系宝贝送。 代码注释清晰,替换数据即可。 。
整个 CNN - GRU 回归预测电力负荷的流程就是这样啦,代码里注释都很清晰,大家要是有自己的数据,直接替换掉就行。希望这篇分享对大家有帮助!