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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习笔记: 时间序列 分解 STL -> 正文阅读

[人工智能]机器学习笔记: 时间序列 分解 STL

1 前言

STL(’Seasonal and Trend decomposition using Loess‘ ) 是以LOSS 作为平滑方式的时间序列分解

? ? ? ? LOSS可以参考机器学习笔记:局部加权回归 LOESS_UQI-LIUWJ的博客-CSDN博客

2 STL分解大致流程和思路

2.1 主体流程

时间序列分解-STL分解法 - 钮甲跳 - 博客园 (cnblogs.com)?中展示了一张STL方法内循环的流程图,我觉得说得蛮好的,附上方便理解

????????STL分为内循环(inner loop)与外循环(outer loop),其中内循环主要做了趋势拟合与周期分量的计算;外层循环主要用于调节robustness weight。这些在之后会详细提到。

?2.2 记号说明?

为了方便后文阐述,这里给定几个需要用到的符号:

Yvv时刻的时间序列数据(v∈[1,n])

Tv

v时刻的 趋势分量

T_{v}^{(k)}内循环第k-1次结束时的趋势分量(初始的T_v^{(0)}为0)
Svv时刻的 周期分量
S_v^{(k)}内循环第k-1次结束时的周期性分量
Rvv时刻的 余项
n_i内层循环数
n_o外层循环数
n_p时间序列的周期 (一个周期内有几个样本)
n_s内循环第二步中的LOESS平滑参数 (截取多长的步骤来进行加权滑动平均)
n_l内循环第三步中的LOESS平滑参数(周期)
n_t内循环第六步中的LOESS平滑参数(趋势)

-?

2.3 内循环

2.3.1 第一步 去趋势

减去上一轮结果的趋势分量

?2.3.2 周期子序列平滑

将一个周期内不同时刻的数据汇聚到一块,形成一个子序列(每个周期相同位置的样本点)

比如 1,1+T,1+2T,....这些形成一个子序列;2,2+T,2+2T,....这些形成一个子序列。。。

那么这里我们时间序列周期为n_p,所以一共有n_p个时间序列

?????????我们用平滑参数为n_s的LOSSES,对每个子序列进行局部加权回归,同时每个子序列向前向后各延展一个数值。

? ? ? ? 然后把这n_p各回归后的时间序列按照时间顺序排列,我们记为(这是一个从1-n_p

到N+n_p?的时间序列)

2.3.3 周期子序列的低通量过滤

? ? ? ? 这里的低通过滤,个人理解是只考虑就近的一些时刻数据的影响

????????对上一个步骤(2.3.2)的结果序列依次做长度为n_pn_p,3的滑动平均。

????????

? ? ? ? 然后做平滑参数为n_l的LOESS,得到一个从1到N的序列

? ? ? ? 相当于把中的周期特征给过滤掉了。或者说的趋势分量

2.3.4 求得周期分量

2.3.5 去周期分量

2.3.6 趋势平滑?

?对于去除周期之后的序列做平滑参数为n_t的LOESS回归,得到趋势分量

?

2.4 外循环

主要用于调节robustness weight。如果数据序列中有outlier,则余项会较大?

于是我们定义:

对于位置为v的数据点,其robustness weight为

其中B函数为

然后每一次迭代的内循环中,在Step 2与Step 6中做LOESS回归时,邻域权重(neighborhood weight)需要乘以ρv,以减少outlier对回归的影响

?2.5? 流程总结

outer loop:
	计算robustness weight;

	inner loop:
		Step 1 去趋势;
		Step 2 周期子序列平滑; (一次LOSSES)
		Step 3 周期子序列的低通量过滤; (三次滑动平均,一次LOSSES)
		Step 4 去除平滑周期子序列趋势; (计算周期分量)
		Step 5 去周期;                   
		Step 6 趋势平滑;    (计算趋势分量)

????????为了使得算法具有足够的鲁棒性,所以设计了内循环与外循环。

????????特别地,当内循环次数n(i)足够大时,内循环结束时趋势分量与周期分量已收敛;若时序数据中没有明显的outlier,可以将外循环次数n(o)设为0。

? ? ? ?

????????论文中给出的一种收敛条件为:

????????设U_v^{(k)}U_v^{(k+1)}是连续的趋势项或者季节项的迭代,那么如果U满足,则可认为已经收敛

?3 STL的优缺点

?与经典的 SEATS 和 X11 分解方法相比,STL 有几个优点:

  • 与 SEATS 和 X11 不同,STL 将处理任何类型的季节性数据,而不仅仅是月度和季度数据。
  • 季节性成分允许随时间变化,变化的速度可以由用户控制。
  • 趋势周期的平滑度也可以由用户控制。
  • 它对异常值具有鲁棒性(即,用户可以指定鲁棒分解),因此偶尔的异常观察不会影响趋势周期和季节性分量的估计。( 但是,它们可能会影响其余部分。 )

另一方面,STL 也有一些缺点:

  • 它不会自动处理交易日或日历变化
  • 它只提供时间序列加法分解。

?4 R语言实现

library(forecast)

y<-ts(c(5,3,3.1,3.2,3.3,3.4,3.5,3.3,3.2,4,4.1,4.2,
         6,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,
         10,9,8,8.5,8.4,8.5,8.6,8.7,8.8,8.9,9,9.5),
       start = 2020,
       frequency = 12)

stl(y,t.window=13,s.window='periodic',robust=TRUE)

# Call:
# stl(x = y, s.window = "periodic", t.window = 13, robust = TRUE)

#Components
            seasonal    trend     remainder
#Jan 2020  1.71219724 3.281861  5.941485e-03
#Feb 2020 -0.36509768 3.360281  4.816495e-03
#Mar 2020 -0.34451579 3.438701  5.814699e-03
#Apr 2020 -0.31611143 3.518979 -2.867522e-03
#May 2020 -0.28997941 3.599257 -9.277401e-03
#.....
#Dec 2022  0.37439646 9.123976  1.627939e-03


library(ggplot2)
autoplot(stl(y,t.window=13,s.window='periodic',robust=TRUE))

?????????使用 R语言的STL 时要选择的两个主要参数是趋势周期窗口 (t.window) 和季节性窗口 (s.window)。 这些控制趋势周期和季节性成分的变化速度。

???????? 较小的值允许更快速的变化。

????????t.window 和 s.window 都应该是奇数;

???????? t.window 是估计趋势周期时要使用的连续观测数; s.window 是用于估计季节性分量中每个值的连续年数。(LOSSES的平滑参数)

???????? 用户必须指定 s.window,因为没有默认值。 将其设置为无限等效于强制季节性分量是periodic的(即,每年都是相同的)。

????????指定 t.window 是可选的,如果省略,将使用默认值。

4.1 获得某个分量

应该说所有R语言中的时间序列分解都可以这么做

dec=stl(y,t.window=13,s.window='periodic',robust=TRUE)

trendcycle(dec)
#趋势分量

seasonal(dec)
#周期分量

remainder(dec)
#其他分量

seasadj(dec)
#去掉周期分量之后的部分

参考文献

时间序列分解-STL分解法 - 钮甲跳 - 博客园 (cnblogs.code

时间序列分解算法:STL - Treant - 博客园 (cnblogs.com)

STL——以鲁棒局部加权回归作为平滑方法的时间序列分解方法_snowdroptulip的博客-CSDN博客_stl分解

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 20:26:47-

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