使用随机森林进行时间序列预测2025年03月17日 | 阅读 9 分钟 随机森林是一种受欢迎且有效的集成机器学习方法。 该算法经常用于通过分类和回归进行预测建模,处理有序(表格)数据集,例如电子表格或关系数据库表中的数据。 在使用随机森林算法进行时间序列预测之前,必须先将时间序列数据转换为可用于训练监督学习算法的格式。此外,它还需要采用一种称为前向验证的专用评估方法,因为 k 折交叉验证方法会产生可能存在偏差的结果。 在本教程中,您将学习如何使用随机森林学习算法进行时间序列预测。 随机森林集成决策树模型的集合称为随机森林模型。 它是使用基于决策树的自举聚合(称为 bagging)开发的,适用于分类和回归建模。 在 bagging 过程中构建多个决策树,并且每棵树都基于主训练数据的单独自举样本构建。一个实例可能出现在自举训练数据集的多个样本中,称为自举样本。自举也被称为“有放回抽样”。 由于每棵决策树都拟合到较小的自举训练数据集,因此会产生一些不同的结果,因此 bagging 是一种成功的集成方法。与标准的决策树算法(如流行的分类和回归树模型,也称为 CART)不同,随机森林集合中的树是未剪枝的,CART 会过度拟合初始训练数据集。这反而更好,因为它使每棵树更具独特性,并产生相关性或错误率较低的预测。 当聚合所有集成决策树的预测时,模型的性能会优于仅考虑单棵树的预测。 集成决策树的平均预测是回归线上的估计值。分类问题估计是得到集成决策树最多支持的类标签。
与 bagging 类似,随机森林模型涉及使用主训练数据集的自举样本构建多个决策树。 与 bagging 不同的是,随机森林模型在每次树分割时还涉及选择一组输入特征。为了选择一个分割点,在构建决策树时通常会评估每个输入属性的值。它通过压缩可以在每个分割点考虑的随机数据组的特征,促使集成中的每棵树更加不同。 结果是,集成的每棵决策树产生的预测彼此更加不同或相关性较低,这会导致预测错误。当聚合这些相关性较低的决策树的预测来生成预测时,它通常会产生比 bagge 决策树更高的准确性。 导入所需模块时间序列数据准备我们可以将时间序列数据转换为监督学习数据。 如果给定按时间顺序排列的数据序列,即时间序列数据,我们可以将其转换为监督学习问题。这可以通过将输出属性用作下一个数据点,将输入属性用作先前的时间步长来完成。 我们可以通过利用最晚时间步长的数据点来预测下一个时间步长的数据,从而将给定的时间序列数据重建为监督机器学习问题。我们可以将给定的时间序列数据重建为监督机器学习问题。 这种格式称为滑动窗口,因为它允许通过在时间上移动输入变量和预测输出的窗口来为监督机器学习模型创建新的“样本”。 给定输入和输出时间序列数据的正确维度,我们可以使用 Pandas 的 shift() 方法自动为时间序列问题生成新帧。 这将是一个有用的工具,因为它将使我们能够使用机器学习方法来检查时间序列数据的不同帧,以确定哪些帧将提供性能更好的模型。 该函数将采用表示为具有一列或多列的数组时间序列的时间序列,并根据提供的输入和输出实例数将其转换为监督机器学习问题。 代码 稍后我们将使用此函数将时间序列数据转换为应用随机森林模型。 创建数据集后,我们需要小心地拟合和评估模型。 例如,用明天的模型拟合数据集并让它预测过去的事情,这并不被认为是有效的。模型必须学会利用历史数据来预测未来。 因此,不能使用像 kfold 交叉验证那样随机化给定数据集进行评估的技术。我们倾向于采用一种称为前向交叉验证的方法。 通过选择一个阈值点,数据集首先被划分为训练集和测试集。例如,在 12 个月前的所有数据都用于训练模型,而最近的 12 个月则用于测试该模型,这在前向交叉验证中是常见的。 如果我们想创建单步预测,例如一个月,我们可以通过在排除的测试数据上训练模型并生成第一步预测来评估模型。为了更新模型并让它预测测试数据集的第二步数据,然后我们可以将我们测试数据集的实际值添加到我们的训练数据集中。 通过重复此过程,可以获得整个测试数据集的单步预测,从而可以计算出误差度量来判断模型的性能。 需要完整的监督学习数据集,以及将用作测试数据集的总行数。 然后它会遍历测试集,调用 random_forest_forecast() 函数进行单步预测。会计算出一个误差度量,并将详细信息返回以供分析。 代码 我们将定义 train_test_split() 函数来分割训练集和测试集。该函数定义如下。 代码 我们将定义 random_forest_forecast() 函数,它将使用 sklearn 库的随机森林模型,将其拟合到提供的训练数据,并返回给定测试数据集的预测值。 代码 我们已经创建了建模和预测所需的所有函数。下一步是加载我们将用于实现我们方法的数据集。 随机森林用于时间序列在最后一部分,我们将了解如何实现随机森林回归来预测时间序列数据值。 我们将使用常见的单变量时间序列数据来关注模型的运行。此外,我们仅为单变量数据准备了方法。 为了测试模型,我们将使用标准的单变量时间序列数据集来进行预测。 我们使用的代码可用于理解使用随机森林模型进行时间序列预测的过程。我们可以扩展此功能来实现这些方法来处理多变量数据以进行多变量预测,但我们需要对方法进行一些修改。 我们将使用每日女性出生人数的时间序列数据集,该数据集包含每月出生的女性人数。数据记录了三年。 可以通过以下链接下载该数据集 让我们看一下数据集。这些是原始值。 首先,让我们将此数据集加载到当前工作区并绘制它。 下面是加载和绘制它的代码。 代码 输出 ![]() 这是时间序列数据的折线图。我们看不到数据中明显的趋势或季节性。 现在将所有内容整合在一起并运行模型。 代码 输出 expected values = 42.0, predicted values = 45.583 expected values = 53.0, predicted values = 43.804 expected values = 39.0, predicted values = 41.545 expected values = 40.0, predicted values = 38.352 expected values = 38.0, predicted values = 42.782 expected values = 44.0, predicted values = 48.077 expected values = 34.0, predicted values = 42.743 expected values = 37.0, predicted values = 36.669 expected values = 52.0, predicted values = 37.75 expected values = 48.0, predicted values = 41.899 expected values = 55.0, predicted values = 43.849 expected values = 50.0, predicted values = 44.999 The MAE score is: 5.950666666666668 ![]() |
在当前的技术环境中,许多公司都被大数据所吸引。然而,过去大数据利用存储在 Hadoop 技术中的数据,并且不得不处理延迟问题。一个全新的系统可以用于处理大量...
阅读9分钟
简介 自签名证书对于本地开发很有用,但我不建议将它们用于生产应用程序。如果您希望托管公共网站,获取受信任的签名证书可能是更好的解决方案。使用自签名证书时,用户在首次访问时会收到通知,指出...
阅读 4 分钟
IPython 指的是交互式 Python。它是一个用于 Python 的交互式命令行终端。它将为 Python 计算提供一个 IPython 终端和基于 Web 的(Notebook)平台。它比标准的 Python 解释器具有更高级的功能,并且可以快速执行单行 Python 代码。Python 和...
11 分钟阅读
简介:本文将教我们如何使用 Python 清理回收站。回收站是 Windows 系统上已删除文件和文件夹的临时存储位置。已删除的文档或文件夹被移动到回收站,如果...
阅读 4 分钟
re.sub() 是 Python re(正则表达式)模块中的一个函数。它用于将字符串中所有出现的模式替换为新字符串。该函数接受三个参数:pattern:要在输入字符串中搜索的正则表达式模式。repl:...
阅读 2 分钟
介绍:在本文中,我们讨论 Python openCV 中的 calibrateHandEye()。Python 中的 OpenCV 是一个开源的计算机视觉。它是一个机器学习软件包库,广泛用于各种应用程序。Python 的 calibrateHandEye() 函数用于查找机器人之间的矩阵变换...
阅读 3 分钟
线性回归是一种统计技术,用于描述因变量与多个自变量之间的关系。本教程将讨论线性回归的基本概念及其在 Python 中的应用。为了理解该概念的基础知识...
7 分钟阅读
在本教程中,我们将学习如何在 Python 中实现接口。通常,接口不是 Python 的一部分,但我们可以使用 ABC 模块实现它。我们将了解接口如何工作以及 Python 接口创建的注意事项。接口起着至关重要的作用...
7 分钟阅读
如何在 Python 中设计一个 Hashset?我们知道 HashSet 是 Java 中一个著名的类。HashSet 用于使用哈希表存储值。在本教程中,我们将介绍 Python 中的 HashSet。我们还将学习如何设计...
阅读 8 分钟
如果你是一名开发人员,你可能知道在进行任何 Python 项目或数据科学项目时,始终在一个能使你的项目可重用和可重复的环境中工作是至关重要的,而不会给任何接手你项目的人带来问题....
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India