7天微课程day1——时间序列与监督学习

声明:

  1. 本文是系列课程的第一课
  2. 本文是对机器学习网站课程的翻译
  3. 尊重原作者,尊重知识分享者

时间序列预测与监督学习

时间序列预测可以被构建成监督学习问题,进而可以应用各种常见的机器学习算法。

通过本文你将学会:

  • 什么是监督学习?机器学习中的预测算法是如何工作的。
  • 滑动窗口方法及其在时间序列中的应用。
  • 如何使用滑动窗口处理多变量(multivariate)时间序列和时间序列的多步(multi-step)预测。

监督学习

监督学习占了机器学习的半壁江山。

Y = f(X)

监督学习的目标是输入 X X ,获得Y。在此之前,需要先通过已知的训练集 (X,Y) ( X , Y ) 学习一个映射函数 f() f ( )

下面是一个监督学习数据集的例子,通过 X X 预测y

X, y
5, 0.9
4, 0.8
5, 1.0
3, 0.7
4, 0.9

为什么叫监督学习?
因为这个学习过程一直有数据做引导,就像老师引导学生。

算法不断的对训练数据中的 X X 作出预测,并通过训练数据中的y不断被修正,当获得一个满意的结果时,结束迭代。

监督学习可以分为两类:分类(classification)和回归(regression)。

  • 分类:输出是离散的,是类别,如“红”和“蓝”、“正常”和“异常”。
  • 回归:输出是连续的,是数值,回归问题又被称为预测。上面的监督学习的例子属于回归问题。

滑动窗口在时间序列中的应用

时间序列是有多个时间步的观测值组成的序列。将前几个时间步的值作为 X X ,当前时间步的值作为y,时间序列预测就转化成了监督学习中的回归问题。

举个例子,我们有如下的时间序列:

time, measure
1, 100
2, 110
3, 108
4, 115
5, 120

用前一刻的值预测当前时刻的值,则:

X, y
?, 100
100, 110
110, 108
108, 115
115, 120
120, ?

将上面两者作比较,可以发现:

  • 在监督学习中,输入 X X 是前一时刻的值,输出y是当前值。
  • 时间序列的顺序信息在监督学习中得以保留。
  • 第一个时间步没有前一刻的信息,我们将会去掉第一行。
  • 最后一行只有输入 X X ,改行将不会参与到模型训练中。

这种使用先前时间步的值预测当前时刻值的方法称为滑动窗口方法(sliding window method),又称窗口法或滞后法(lag method)。滑动窗口法是将时间序列转化为监督学习问题的常用方法。

使用滑动窗口处理多变量时间序列

如果在一个时刻有多个观测值会怎样?

一般来说,时间序列可分为:

  • 单变量时间序列:一个时刻一个值,如温度序列和上面的例子。
  • 多变量时间序列:一个时刻多个值。

自然,多变量时间序列更难分析。

下面,我们继续使用滑动窗口处理多变量时间序列。假设有如下数据,每一个时刻有两个观测值measure1measure2,并且我们只对measure2感兴趣。

time, measure1, measure2
1, 0.2, 88
2, 0.5, 89
3, 0.7, 87
4, 0.4, 88
5, 1.0, 90

预测当前时刻的measure2,对于当前时刻的measure1=>如果两个变量相关的话,need it !!!上一刻的measure2=>need it!!!上一刻的measure1=>如果两个变量相关的话,最好也把它带上。

X1, X2, X3, y
?, ?, 0.2 , 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?

同样的,在训练过程中,第一行和最后一行要去掉。

如果我们同时对measure1和measure2感兴趣呢?
easy!

X1, X2, y1, y2
?, ?, 0.2, 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?

注意这次跟前面的不同在于X1,X2,X3,y变成了 X1,X2,y1,y2 X 1 , X 2 , y 1 , y 2

Unfortunately,大多数机器学习方法或人工神经网络搞不定多输出问题,需要一些改进才行。

用滑动窗口处理多步预测

如果要预测当前时刻和未来几个时刻怎么办?

依此,时间序列又可以分为:

  • 单步预测:预测当前时刻值。
  • 多步预测:预测从当前时刻开始多个时刻值。

前面的例子都是单步预测。

有很多对多步预测建模的方法,现在,我们只介绍滑动窗口法。有下列数据:

time, measure
1, 100
2, 110
3, 108
4, 115
5, 120

假设,我们要用时刻 t t 预测时刻t+1和时刻 t+2 t + 2 。即1 =>(2, 3),2=>(3, 4),3=>(4, 5)…

X1, y1, y2
? 100, 110
100, 110, 108
110, 108, 115
108, 115, 120
115, 120, ?
120, ?, ?

再次同样的,第一行和最后一行不参与训练。

Certainly,只用一个值来预测两个值是有点太难了,可以用n个先前时刻的值来预测,n的取值要是具体问题而定。

想知道在Python中怎样将时间序列转化成监督学习问题吗?参考下面的博客或者其译文。
How to Convert a Time Series to a Supervised Learning Problem in Python

### 时间序列预测中的特征工程技术方法 在时间序列预测中,有效的特征工程能够显著提升模型性能。通过精心设计的特征提取过程,可以更好地捕捉数据中的潜在模式和趋势。 #### 特征构建 为了提高预测准确性,可以从原始时间序列数据中创建多种类型的特征: - **滞后特征 (Lag Features)**:利用历史观测值作为新特征。例如,如果每有一个观测值,则前一、前两等的历史观测都可以成为新的输入变量[^1]。 - **滚动统计量 (Rolling Statistics)**:计算过去一段时间内的统计数据,如均值、标准差、最大最小值等。这些指标有助于描述局部变化的趋势和波动情况[^2]。 - **日期时钟特性 (Date and Time Features)**:对于具有周期性的现象尤为重要。可从中抽取年份、月份、星期几甚至小时分钟秒这样的细粒度信息来帮助解释季节性和日常规律。 #### 外部因素引入 除了内部结构外,考虑外部影响也是增强模型表达能力的关键一步: - **节假日效应**:特定节日往往会对销售量或其他经济活动造成特殊冲击,在建模时应适当加入这类二元标志位或者量化后的强度评分。 - **宏观经济环境**:当研究对象受到更广泛的市场条件制约时,比如股票价格走势可能关联于利率水平变动等因素,那么获取并整合此类宏观层面的信息就显得尤为必要。 ```python import pandas as pd def create_features(df): df['lag_7'] = df['value'].shift(7) df['rolling_mean'] = df['value'].rolling(window=30).mean() # Extract date features df['year'] = df.index.year df['month'] = df.index.month df['day_of_week'] = df.index.dayofweek return df.dropna() data = pd.read_csv('time_series_data.csv', parse_dates=['date'], index_col='date') enhanced_df = create_features(data) ``` #### 数据预处理 良好的前期准备工作同样不可忽视: - **缺失值填补**:采用插值法或者其他合理策略补充不完整的记录,防止因为空缺而导致后续操作失败或偏差增大。 - **异常点检测修正**:识别那些远离正常范围的数据点,并决定如何处理它们——可能是删除也可能是调整至邻近样本位置附近。 通过对上述几个方面的综合考量和技术手段的应用,可以在很大程度上改善时间序列预测的效果,使得所建立起来的算法更加贴近实际需求和发展态势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值