随机森林时间序列预测实现|随机森林在潮位数据预测中的应用
近年来,随着人工智能技术的迅速发展,机器学习在各行各业的应用逐渐深入。特别是在时间序列预测领域,随机森林(Random Forest)凭借其优秀的泛化能力和处理非线性数据的优势,成为了一种非常受欢迎的预测方法。本文将介绍如何利用随机森林算法来对潮位数据进行预测,并展示如何评估模型的效果。
NO.1|数据预处理与模型训练
首先,我们从一个包含潮位数据的Excel文件中读取数据。该数据集包含年、月、日等时间信息,以及对应的潮位数据。为了进行时间序列预测,我们将时间信息作为特征(输入),潮位数据作为标签(输出)。
接下来,我们将数据集分为训练集和测试集。训练集用于训练模型,而测试集则用于评估模型的预测能力。为了保证模型的泛化性,我们采用了70%的数据作为训练集,剩余的30%作为测试集。
在模型训练阶段,我们使用了随机森林算法,通过50棵决策树来训练模型。随机森林的优势在于,它通过多棵树的集成来减少过拟合,从而提高模型的预测准确性。
.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }
% 提取特征和标签
X = data(:, 1:3); % 年、月、日作为特征
y = data(:, 4); % 潮位数据作为标签
% 分割数据集为训练集和测试集(这里简单地将前70%的数据作为训练集,后30%的数据作为测试集)
split_ratio = 0.7;
split_idx = round(split_ratio * size(X, 1));
X_train = X(1:split_idx, :);
y_train = y(1:split_idx);
X_test = X(split_idx+1:end, :);
y_test = y(split_idx+1:end);
% 使用随机森林进行序列预测
rf_model = TreeBagger(30, X_train, y_train); % 使用50棵决策树
min_leaf_size = 5; % 叶子节点的最小样本数
训练完成后,我们用训练集和测试集分别进行了预测,并计算了两者的预测误差。为了评估模型的预测性能,我们采用了均方根误差(RMSE)作为评估指标
通过绘制预测结果与真实值的对比图,我们可以清晰地看到,训练集和测试集的预测结果都与真实值非常接近,说明模型能够有效地捕捉到潮位数据的变化趋势。
此外,我们还计算了训练集和测试集上的多项评估指标,包括均方误差(MSE)、平均绝对误差(MAE)以及决定系数(R²)。这些评估指标能够帮助我们全面了解模型的性能。例如,较低的RMSE值和较高的R²值表明,模型在预测潮位时具有较好的准确性。
.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }
% 计算训练集上的各种评估指标
train_rmse = sqrt(mean((str2double(y_train_pred) - y_train).^2));
train_mae = mean(abs(str2double(y_train_pred) - y_train));
train_mse = mean((str2double(y_train_pred) - y_train).^2);
train_r2 = 1 - sum((str2double(y_train_pred) - y_train).^2) / sum((y_train - mean(y_train)).^2);
% 计算测试集上的各种评估指标
test_rmse = sqrt(mean((str2double(y_test_pred) - y_test).^2));
test_mae = mean(abs(str2double(y_test_pred) - y_test));
test_mse = mean((str2double(y_test_pred) - y_test).^2);
test_r2 = 1 - sum((str2double(y_test_pred) - y_test).^2) / sum((y_test - mean(y_test)).^2);
运行结果
训练集评估指标:
RMSE: 0.0039
MAE: 0.0005
MSE: 0.0000
R^2: 0.9998
测试集评估指标:
RMSE: 0.1312
MAE: 0.1085
MSE: 0.0172
R^2: -0.3809
(1)完整资源获取方式(200多种算法)
https://github.com/suthels/-/blob/main/README.md
(2)本期源代码开源位置:
https://github.com/suthels/OpenSource