IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Competition09-时间序列 -> 正文阅读

[人工智能]Competition09-时间序列

1 时间序列

1.1 简单定义

时间序列是按时间顺序索引的一系列数据点。

一般基于如下假设:

  • 数据文件中标签的值表示以等间隔时间进行的连续测量值。
  • 假设数据存在相关性,然后通过建模找到对应的相关性,并利用它进行预测未来的数据走向。

1.2 常见问题

  • 从变量变量角度,可以分为单变量时间序列和多变量时间序列
    • 单变量时间序列指仅具有的单个时间相关变量,所以仅受时间因素的影响。可能受到相关性、趋势性、周期性和循环性等因素的影响。一般该类问题可以看做是多变量时间序列的一部分。
    • 多变量时间序列具有多个时间相关变量,目标除了受到时间的影响外,还受到了其他因素影响。
  • 从预测目标角度,可以分为单步预测和多步预测
    • 单步预测是仅在训练集的时间基础上添加一个时间单位就可以作为测试集。实际上是一个普通回归问题,只不过输入变量不再是独立的特征变量,而是在时间线上有关系。
    • 多步预测需要多添几个时间单位作为测试集。一般有两种解决方法:
      • 第一种,step by step,以单步预测为基础,预测后就作为真实值加入训练集对下一个时间单位进行预测。缺点:误差累加。
      • 第二种,一次预测出所有时间步的结果,即看做多输出回归问题。这样避免了误差的累加,但是训练一对多的模型,加大了训练难度。、

1.3 交叉验证

一般来说为了模型稳定性,我们选择交叉验证。由于时间序列中包含时间结构,在保留这种结构的同时不能在折叠出现数据穿越的情况,使用滚动交叉验证

  • 思想是,使用初始时间到t时刻用来训练,然后从 t 到 t+n 时刻的数据用于线下验证,并计算批评价指标;
  • 接下训练数据扩展到 t+n 时刻,然后使用 t+n 到 t+2n时刻的数据进行验证;
  • 重复上面的步骤,直到达到最后一个标签值。验证次数可以自由控制,多次验证结果取平均值得到最终线下验证结果。

1.4 基本规则方法

由于数据中存在噪声或者由于发生了某些突发情况,导致模型不能学习到所有信息,使用规则方法能带来帮助。

  • 加权平均

    加权平均就是先获取最近 N 个时间单位的值,如果数据存在周期性,也可以环比提取,即昨天、上周、上个月对应单位的值;然后将提取出的数据加权求和,通常离当前时间点越近的数据重要程度越高。一般来说,N 值一般考虑短期历史数据。加权平均公式如下:
    y t = 1 N ( w 1 × y t ? 1 + w 2 × y t ? 2 + ? + w N × y t ? N ) y_t = \frac{1}{N}(w_1 \times y_{t-1} + w_2 \times y_{t-2} + \cdots +w_N \times y_{t-N}) yt?=N1?(w1?×yt?1?+w2?×yt?2?+?+wN?×yt?N?)
    y y y 为当前时间单位的数值。

    对于 N 值得选择和权重的确定是困难的,所以可以通过简单地线性搜索来确定 N 值和权重,线下验证进行最优搜索方式的公式是:
    θ ˉ = a r g ? m a x θ ∑ i = 1 N s c o r e ( y i , p r e d i ) \bar \theta = arg \ \mathop{max}_{\theta} \sum^N_{i=1} score(y_i, pred_i) θˉ=arg?maxθ?i=1N?score(yi?,predi?)

  • 指数平滑

    在时间预测问题中,距离预测单位越近的时间点越重要。将每个时间单位的权重按照指数及进行衰减,并最终进行加权,这种方法称为指数平滑。其公式为:
    y ^ t = a ∑ n = 0 t ( 1 ? a ) n y t ? n \hat y_t = a \sum_{n=0} ^ t (1 -a)^n y_{t - n} y^?t?=an=0t?(1?a)nyt?n?
    其中, y ^ t \hat y_t y^?t? 是第 t t t 个时间点经过上面指数平滑后得到的值, y t ? n y_{t - n} yt?n? 为第 t ? n t - n t?n 个时间点上的实际值, n n n 是取当前时刻的前 n n n 个历史数据。 a a a 可理解为可调节参数, a ∈ ( 0 , 1 ) a \in (0, 1) a(0,1) ,也称为记忆衰减因子。

2 时间序列模式

2.1 趋势性

趋势性就是在很长一段时间内呈现数据持续上升或者下降的变动,不仅线性的,周期也可以。一般可以分为一介趋势和二阶趋势进行构造。一阶主要为相邻时间单位的数据分差、比例,反应相邻时间单位数据变化程度;二阶在一阶基础上进一步构建,主要反应一阶变化快慢。

2.2 周期性

周期性是指一段时间序列内重复出现的波动,很多时间序列预测问题都存在周期性。

周期性可以通过环比表现,也就是说周期中相同位置的数据更相似。

2.3 相关性

时间序列中的相关性又称为自相关性,描述的是某一段序列存在相关性,这是必然的,否则就无法预测未来了。

2.4 随机性

随机性是除了上面三个毛事之外的随机扰动。针对随机性:(1) 可以通过简单的异常标注来解决,比如特殊日期、活动; (2) 进行预处理,删除异常值。

3 特征值提取方式

主要围绕时间序列的延迟(历史信息数据)展开,可以分为两类历史平移窗口统计两种。还有序列熵特征和额外补充的其他特征。

3.1 历史平移

时间序列数据存在前后关系,比如今天的气温受昨天的影响。也就是说,时间序列中越相近的标签,其相关性越高。借助这个特性构造历史平移特征,即直接将历史记录作为特征。

具体的,如果当前时刻为 t t t ,那么可以将 t ? 1 、 t ? 2 、 ? t ? n t - 1 、t - 2、\cdots t - n t?1t?2?t?n 时刻的值作为特征,这个值可以是标签值,也可以是与标签值存在关联性的值。

3.2 窗口统计

不同于历史平移从单个序列单位中提取特征,窗口统计是从多个序列单位中提取特征,窗口统计可以反映区间内序列数据的情况。比如最大值、最小值、均值、中位数和方差。窗口大小不固定。

3.3 序列熵特征

熵用来反映数据的确定性,用来挖掘数据序列的稳定性,计算公式为:
e n t r o p y ( X ) = ? ∑ i = 1 N P { x = x i } ln ? P { x = x i } entropy(X) = -\sum^N_{i=1} P\{x=x_i\}\ln P\{x=x_i\} entropy(X)=?i=1N?P{x=xi?}lnP{x=xi?}
代码的简单实现:

import math
import collections
def entropy(nums):
    count = collections.Counter(nums)
    n = len(nums)
    for k,v in count.items():
        count[k] = v / n
    res = 0
    for v in count.values():
      res -= v * math.log(v, 2)
    return res
res1 = entropy([1,2,1,2,1,2,1,2,1,2,1])
res2 = entropy([1,1,2,1,2,2,2,2,1,1,1])
res3 = entropy([1, 2, 1, 2, 1, 2, 1, 2, 1, 2 ])
res4 = entropy([1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1 ])
res5 = entropy([1, 2, 3, 4, 2, 1, 2, 4, 3, 2, 3, 4, 1, 1, 1 ])
res6 = entropy([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ])

print(res1, res2,res3, res4,res5, res6)

3.4 其他特征

除了上面三个外,还有很多常用特征,分为两类:

  • 时间特征:比如小时、天、周,一天中的某个时间段(如上午,下午),距离某日还有几天,是否为节假日;
  • 统计特征:基本的统计特征有最大值、最小值、均值、中位数、方差、标准差、偏度、峰值,另外还有一阶差分、二阶差分、比例相关特征。

4 模型多样性

一般来说,将以下这些模型都跑一边,首先可以找到好的单模,其实为后面的模型融合做准备。

4.1 传统的时序模型

差分自回归平滑平均模型(ARIMA)是一种常见的时序模型。它包括自回归模型(AR),p是自回归系数,移动平均模型(MA),q是移动平均窗口大小,d是成为稳定序列所进行的差分次数;I代表积分,表示数值以被当前值和先前值之间的差值替换(这个微分过程可能已经执行了不止一次)。

三次指数平滑主要是基于数据趋势性和季节性的描述,而ARIMA模型主要描述的数据之间的相互关系。它中的三部分的目的就是使模型更加容易拟合历史数据,能够在较大时间范围内获得较高的准确性。

  • 参数确定

    p、d和q均为非负数,首先进行d阶差分,将时间序列数据转换为平稳时间序列,然后分为求得平稳时间序列的ACF图和PACF图,通过这个两个图得到最佳的阶层p和阶数q。

4.2 树模型

树模型是比较通用的模型,当趋势性和季节性相对稳定,并且噪声较小的时候,树模型是非常合适的。可以通过一些处理来降低时间序列的趋势性,使之变得平稳。

使时间序列转换为平稳序列的方法有对数处理、一阶差分、季节性差分等。一般而言,先进行平稳性调整,然后进行训练,最后结果再进行转换即可。这三种方法可以单独使用,也可以组合。

4.3 深度学习模型

  • 卷积神经网络
  • 长短期记忆网络
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:22:35  更:2022-04-09 18:24:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 4:20:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码