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

随机森林时间序列预测实现|随机森林在潮位数据预测中的应用

近年来,随着人工智能技术的迅速发展,机器学习在各行各业的应用逐渐深入。特别是在时间序列预测领域,随机森林(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


http://www.kler.cn/a/556120.html

相关文章:

  • 【Linux-网络】HTTP的清风与HTTPS的密语
  • STM32MP157A单片机移植Linux驱动深入版
  • 矩阵-旋转图像
  • Oops! 更改field的数据类型,影响到rabbitmq消费了...(有关于Java序列化)
  • 探秘IP地址与MAC地址:网络世界的身份标识
  • kafka-集群缩容
  • 书生大模型实战营12-InternVL 多模态模型部署微调
  • 最小生成树算法深度解析:Kruskal与Prim算法及Python实现
  • 为啥vue3设计不直接用toRefs,而是reactive+toRefs
  • jdk-arthas使用
  • LeetCode 501.二叉搜索树中的众数
  • GCC头文件搜索顺序详解
  • 《Operating System Concepts》阅读笔记:p62-p75
  • 《重构-》
  • 力扣LeetCode: 2209 用地毯覆盖后的最少白色砖块
  • 基于windows的docker-desktop安装kubenetes以及dashboard
  • 【消息队列】认识项目
  • 信创浪潮下,以 OpManager筑牢安全运维防线
  • TDengine 产品组件: taosd
  • Apache Spark 的主要特点