热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

时间序列过程(深度随机森林)

随机森林一般不受统计假设、预处理负担、处理缺失值的影响,因此被认为是最实用解决方案的重要起点!Jeremy声称随机森林不适合时间序列数据!通过这篇文章,我们将探索解决随机森林外推问


随机森林一般不受统计假设、预处理负担和缺失值的影响,因此被认为是最实用解决方案的重要出发点!


在杰瑞米霍华德教授讲授的fast.ai机器学习入门课程中,介绍了随机森林中的外推问题。Jeremy声称随机森林不适合时间序列数据!通过这篇文章,我们将探索解决随机森林外推问题的技巧。


然而,我刚刚开始使用谷歌商店预测或出租车费预测等Kaggle竞赛开始使用时间序列数据。令我惊讶的是,我在随机森林中遇到了一个缺点。随机森林不能很好地拟合时间序列分析中经常遇到的增减趋势,比如季节性!


让我用一个例子来说明推断。


让我们为此创建一个复合数据集。(注意:当问题卡住时,创建一个复合数据集,自己尝试!-杰里米的建议)。


x=np.linspace(0,1,num=50)


x是我们的输入,它线性分布在0和1之间,是一个大小为50的向量。


我们的因变量‘y’是‘x’的线性函数,带有一些随机噪声以增加方差。随机噪声在一定程度上模仿了真实世界的场景。


y=x np.random.uniform(-0.2,0.2,x.shape)


让我们画出x和y。




很明显,“X”和“Y”之间存在线性关系,并且呈上升趋势。


这可能与实际用例中的增长趋势——非常相似,例如10月、11月和12月的销售增长,或者2019年的世界人口增长等。


杰里米声称,用这样的数据拟合随机森林不会给我们带来好的结果。然后,让我们试试随机森林,看看会发生什么!


X_train,X_val=x[:40],x[40:]


y_train,y_val=y[:40],y[40:]




我们将把我们的随机森林回归应用于训练数据,并首先探索它与X_train预测的关系,然后是X_val






我们的随机森林似乎在训练数据方面做得非常好!


现在,让我们进入有趣的部分,预测X_val。记住,我们的随机森林以前从未见过这个数据。当我们预测和验证数据时,你预计会发生什么?




我们的随机森林无法预测它从未见过的价值!它预测所有验证数据的因变量值为0.65。


为什么预测值明显小于我们验证集的实际值,而它对训练数据却非常有效呢?要回答这个问题,可能需要深入研究随机森林的运行模式。我们将从艾姆斯住房数据中获得帮助来解释答案。


随机森林构成决策树(弱分类器),它本身是关于训练数据的二元分裂(决策)的组合。直觉上,你可以认为这是一种将你最近的邻居分组的奇怪方式。决策树将可能属于同一个价格类别的房子聚集在一起,即通过对房子进行分组,将昂贵的房子与便宜的房子分开。整体质量7.5、居住面积1970.5的房屋(67个样板间/间)集中在底部叶节点。对于落在叶子中验证集的任何房子,预测值是67个样本的平均值,即12.775。


随机森林由决策树(弱分类器)组成,它是二叉树(决策树)对训练数据的组合。直觉上,你可以认为这是一种将你最近的邻居分组的奇怪方式。决策树对可能属于同一价格类别的房屋进行分组,即通过对房屋进行分组来区分昂贵的房屋和便宜的房屋。居住面积OverallQua7.5 1970.5的房屋(67个样板间/房屋)在底部叶节点分组在一起。对于落在叶子中验证集的任何房子,预测值是67个样本的平均值,即12.775。



ass="pgc-img-caption">一个简单的决策树(Ames住房数据)

对于任何随机森林以前没有见过的数据,它最多只能预测它以前见过的训练值的平均值。如果验证集由大于或小于训练数据点的数据点组成,那么随机森林无法推断和理解数据中的增长/下降趋势,因此它将为我们提供平均结果。

因此,随机森林模型对于时间序列数据不能很好地扩展,可能需要在生产中不断更新,或者使用一些超出我们训练集范围的随机数据进行训练。

回答诸如“明年的销售额会是多少?”,“五年后人口会是多少?”,“50年后全球气温会是多少?”或者“我希望在未来三个月内卖出多少套手套?”“在使用随机森林时变得非常困难。

如何解决这个外推问题?

1.寻找其他选择

在这种情况下拟合线性模型或神经网络可能足以预测具有增加/减少趋势的数据。

当我在相同的数据集上拟合线性回归模型时,结果是这样的。也可以拟合一个可用于需求预测或任何其他类型的时间序列图的神经网络。

2.在训练随机森林时忽略数据的时间序列成分

另一种可能的方法来改进泛化(我们说如果一个模型很好地预测它以前没有见过的数据,机器学习中的一个主要挑战是创建可泛化且通用的强大机器学习(ML)模型):我们的模型能够预测未来的数据是不使用可能与时间成分相关的数据中的特征。我们的输入矩阵可能具有各种用于预测因变量的特征。如果我们不将时间相关的特征用于我们的预测,我们的随机森林模型将能够很好地泛化!

举一个例子,Kaggle上的the Bluebook for Bulldozers竞赛,其目的是预测未来几个月重型设备的“价格”。在检查竞赛的特征重要性时,我们得到下表:

最重要的特征是Age,YearMade和SaleDayofyear都是时间依赖的!这可能也是一个很好的时机来表明验证LRMSE得分为0.249366,具有上述特征重要性。

如果我们放弃这些依赖于时间的特征,我们的验证分数会发生什么改变呢?它下降到0.210967!

我们的模型更好地泛化,因此,我们看到验证集的LRMSE有所减少。

进一步改进:使用随机森林进一步改进预测的另一个想法是使用时间序列预测来flatten季节性,然后使用随机森林进行预测。


推荐阅读
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战?
    Cosmos生态系统为何迅速崛起,波卡作为跨链巨头应如何应对挑战? ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 阿里面试题解析:分库分表后的无限扩容瓶颈与解决方案
    本文探讨了在分布式系统中,分库分表后的无限扩容问题及其解决方案。通过分析不同阶段的服务架构演变,提出了单元化作为解决数据库连接数过多的有效方法。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
author-avatar
手机用户2502925983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有