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

多组时间序列预测

时间序列的应用你可以认为世界上发生的每一件事都是一个时间序列的一部分,时间序列的应用可以很广泛,目前时间序列有一些应用:股票预测、自然语言处理模型:因为语言本身就可以看作一个序列,


时间序列的应用

你可以认为世界上发生的每一件事都是一个时间序列的一部分,时间序列的应用可以很广泛,目前时间序列有一些应用:股票预测、自然语言处理模型:因为语言本身就可以看作一个序列,如 can you pleace come here? 说了前四个字,让你预测最后一个字。预测视频:给你一帧,让你预测下一个动作。PPT Slides:提供前一个Slides,预测下一个Slides讲什么?这个预测比较复杂,存在逻辑上的连贯性。大家可以看出时间序列的预测有各种各样的形式,有可能是比较困难的。

 


时间序列预测

时间序列预测需要做些什么?主要是在数据中发现时变的规律。左图有两个随机性比较强的时间序列,我们如何从中发现规律,可以使用右边的图来演示。第一个是观测,可以把它演变成趋势,它还包括周期性的信号,最后还有一些随机的因素,后面三部分(趋势、周期、随机)合起来构成了最上方的信号。

时间序列预测任务是发现数据的时变规律,在不同的抽象层次。如:钟表有12-hourcycle,hour cycle,还有minutecycle, 他在不同层次上,由时针、分针、秒针的位置产生的时间序列,我们需要学习三个层次的规律。

 


技术挑战

举个例子:视频预测中有两帧图,在图像识别中,假设每一帧里面有M个像素,图像识别的任务就是从M的像素中找到规律。如果要预测,从第一帧(M个)到第二帧(M个),学习空间就维度有MM个。如果要更准确一点,用前面N帧来预测下一帧,就有(MN)M 大的空间。如果之前每一帧都有一个输入X,那么这个学习空间将十分大(M(N+X)*M)。大家可以看到M个像素的图像识别任务,放到时间序列中将十分复杂,很难去学。所以时间序列学习的挑战还是比较多的:


  • 非线性

  • 高维度导致十分大

  • 寻找的规律是有层次的

 


模型分析

传统模型的一个代表是ARIMA模型,它的用途十分广泛,尤其是社会现象的应用,如库存量预测,销售量预测。ARIMA分为三个部分:AR:Auto regressive 、MA:Moving Average、 I:Integration filter。

Auto regressive 数学公式中第一项是常量,最后一项是随机噪声,中间一项是说当前yt由之前t-1个y乘系数γ所决定的,找到前面i个时间点的值,乘以系数再相加。不同的γ可以产生不同的时间序列。

Moving Average 也是由常量均值、随机量以及用过去i个点残差值学一个模型。将这两部分合起来就得到一个复杂一些的模型,这个复杂的模型就能产生更复杂一点的时间序列,换句话讲就可以用这个模型学习一个更复杂的时间序列。

Integration filter 核心是将ARMA模型中的y换成 Δy,也就是difference的项。这个的好处是:一个时间序要学趋势、学周期再去学随机量就比较复杂,怎么简化这个过程呢?只要做个一阶的difference ,去学 Δy , 实际上是去掉了趋势因素。所以大家可以注意,处理时间序列经常用的方法的是:不去预测y,去预测 Δy。 从术语上说,把序列做了一个stationary。

 


Hidden Markov Model

在神经网络之前,语音识别用的都是Hidden Markov Model(HMM)。观测到X1到Xt,y1到yt是隐藏的内部状态。模型有两个假设:第一个假设 Markov property:internal state 只由前一个状态决定,所以只走一步。

第二个假设是当前的观测值只由当前的隐藏状态决定。它其实把时间序列的预测分为很多小部分,也是约束性很强的一个模型。模型虽然很简单,但是十分有效,因为自然界很多事物都遵循马尔科夫假设。

stationary是指系统经过一系列的变化又回到了原点。如果有趋势项,很可能就回不到原点,做了difference 之后就去掉趋势因素。

 


Chain Conditional Random Field

CRF的主要改进是,当前的internalstate,不仅仅与当前的观测值有关,也与之前的观测值有关。所以这个网络的假设没有那么强。下面三个都是CRF网络,只是假设强度不一样。

例如中间的网络,每个时间点的internal state,与当前,与前一个时间点的观测值都相关,这个网络就更复杂了。最下面一种是与所有的观测量都有关系,假设更弱了,所以它的表达能力是最强的,但是也是很难学的。

CRF模型实际上是约束最少的,有的假设在HM模型中是不成立的就需要用到CRF,而且很多网络的最后一层是用CRF来做的。

 


神经网络

先举两个例子,看一下神经网络做时间序列预测是怎么搭的。第一个是一个语言模型,它的核心的神经网络是LSTM——长短记忆网络。如给定一句话:to be or not ,要做的是给你一个词,预测下一个词。这个网络分为三层:Embeding layer 、LSTM Lyaer、Output Layer。

 

再看一个神经网络的应用,给你一个视频,然后产生字幕、或者描述视频中的人物在做什么,基本的结构叫做Encoder /Decoder Architec。下图中左边是Encoder,Encoder去看你的视频,用LSTM串起来,流到右边是 Decoder,Decoder出来的标签是:A man is talking。

下面看一下神经网络的结构,最基本的 Recurrent Neural Network 。它分为两个部分:1. Intertnal State Transition 2.Output Transition Network 。 Intertnal State Transition 假设他有个内部状态,内部状态是指它自身有一个状态变化的规则,内部状态在某一个状态的时候会产生一个输出,这个输出是由softmax来实现,完全相对于与HMM,HMM是两个Transition matrix , RNN是两个神经网络。

看一下RNN的一个变种——长短记忆网络(LSTM),它把RNN的每一个cell的结构做的更加复杂。RNN内部状态从左边流到右边只有一根线,也就是说只有一个\一组状态会被传到下一步,LSTM实际上是有两根线在传,最上面的一根叫做长期记忆,这条线没有加很多非线性的东西,之前在神经网络上学到的东西在这一步很容易被传到下一步去,这就是长期记忆的一个概念:以前学的东西很容易被记住。有了长期记忆之后会做一个Gate,去控制长期记忆的强度。

另一部分,除了控制长期记忆之外,跟短期记忆有个相加的过程,此外对短期记忆有个非线性的变化,然后与长期记忆相加。即一部分是长期记忆,还有一部分是短期记忆,然后将两部分相结合,结合是根据神经网络里的weight去学的。

这样的结构,给他一个输入,一旦给定一个标签,那么在长期记忆下更重要还是短期记忆更重要,学的过程中会自己去分配。传下去的记忆等于长期记忆乘以遗忘系数,加上新的记忆乘新的记忆scaling factor。最后会有一些Output layer,它也做了非线性的变化。理论上说他分成了两部分,长期记忆和短期记忆。神经网络的实现,就是以上讲的具体的一些公式。

下面我们看一下LSTM。

刚才我们看到的是把LSTM 串起来,实际上也可以把它叠加起来。有很多层LSTM,当前层的LSTM 的输出可以做下一层的输入,最后可以做成很大的LSTM 的网络,网络更大就可以学更deep 的feature。

Gated Convolutional Network (GCN)

接下来提一下现在比较流行的模型:Gated Convolutional Network(GCN),也是用在时间序列的学习上。比如说现在有一段文章,sliding window 是10,把十个单词拿出来,然后做embedding,将十个单词的embdding的拼起来,然后在拼起来的sequence上做CNN,图像做出来之后再去做预测。实际上把序列学习的问题转化成CNN可以做的问题。

神经网络模型相对于LSTM还有更多的模型:Gated Recurrent Network,GRN是LSTM 的一个变种。 还有大家可能听说过的Attention Network,也是LSTM 的一个变种。 Bidirectional LSTM 也就是说在做LSTM时不仅可以从左往右传还可以从右往左传,然后两边传的结果做concate,再来做预测。这样对某些应用还是比较好的,比如说给你一句话:Stacking LSTM helps to learn deep features,把‘helps’去掉让你去填空,如果单一的从左往右是不够的,需要结合两边的信息,从左往右从右往左传都有。

刚才我们介绍了传统模型,进阶模型,神经网络模型。时间序列预测还有很多模型:SupportVector Regression , Gaussian Process ,Tree and Boosting ,Graphical Models。具体用哪一个模型要看具体的应用,要看哪一个模型的假设正好和模型match上。

 

文章来源: https://zhuanlan.zhihu.com/p/32957812



推荐阅读
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 清华大学出版社 | 杨丹:基于MATLAB机器视觉的黑色素瘤皮肤癌检测技术及源代码分析(第1689期)
    清华大学出版社 | 杨丹:基于MATLAB机器视觉的黑色素瘤皮肤癌检测技术及源代码分析(第1689期) ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • PyCharm 作为 JetBrains 出品的知名集成开发环境(IDE),提供了丰富的功能和强大的工具支持,包括项目视图、代码结构视图、代码导航、语法高亮、自动补全和错误检测等。本文详细介绍了 PyCharm 的高级使用技巧和程序调试方法,旨在帮助开发者提高编码效率和调试能力。此外,还探讨了如何利用 PyCharm 的插件系统扩展其功能,以满足不同开发场景的需求。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
author-avatar
唯心-C_436
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有