线性回归预时间序列预测
时间序列预测问题
- 线性回归方法
- 什么是线性回归方法
- 滞后影响
- 多元线性回归
- 怎么用线性回归方法
- 为什么要使用线性回归方法
从kanggle看到的一个教程(原文 ),主要讲解了如何进行时间序列预测,本文采用该教程部分内容外加一些个人理解。时间允许的情况下最好去看下原文 。
kaggle上还有很多其他的教程,初学者看一下挺好的。最近浏览了一遍,整体感觉语言比较凝练,却又通俗易懂,是不错的教程。每节还附带有练习,除了有时候网速问题,其它的都挺完美。
滞后和时间步长是时间序列特有的特征,滞后表示当前状态对后续状态的影响,(时间序列问题假数据设存在滞后影响,因为只有这样才能进行预测,这点不同于散点数据),时间步长是是指前后两个时间点之间的差值。
线性回归方法
什么是线性回归方法
大家学过函数,牛顿时代的给出的函数传统定义是:因变量根据自变量变动而变动的规律。很自然的认为时间序列自变量就是时间,因变量就是各种观测数据,虽然实际上并不止如此,但不妨以此为切入点。
如果我们像伽利略、开普勒等大师一样观察到了足够多的天体运行数据,那么数据背后的规律,也就是天体运行规律是不是也就慢慢的能找到了?找到规律是不是就能进行预测了?因此,回归方法就是找到一个能够很好的拟合现有数据的函数。
为了找到完美的拟合函数,我们从最简单的情况出发,由简入繁慢慢的改进直到能够完美的拟合。
最简单的情况就是用一个直线拟合数据,也就是直线公式
y=w∗x+b(1)y = w*x+b (1)y=w∗x+b(1)
其中y代表观测值,x代表时间,w代表权重(weight),b表示截距(这个截距通常只起到一个上下偏移的作用)。
由于无法获得伽利略等大师的数据,此处引用Kaggle给出的硬皮书销售数量的例子。数据如下,Date表示时间,Hardcover就是硬皮书的销售量。
Hardcover | |
---|---|
Date | |
2000-04-01 | 139 |
2000-04-02 | 128 |
2000-04-03 | 172 |
2000-04-04 | 139 |
2000-04-05 | 191 |
你会发现时间这个格式无法带入到公式(1)里进行计算啊,为了解决这个问题,我们可以给虚拟变量(time dummy),也就是给时间编个号。
Hardcover | Time | |
---|---|---|
Date | ||
2000-04-01 | 139 | 0 |
2000-04-02 | 128 | 1 |
2000-04-03 | 172 | 2 |
2000-04-04 | 139 | 3 |
2000-04-05 | 191 | 4 |
好了,现在x就是Time列,y就是Hardcover列,那么公式里的w和b怎么确定呢?这个问题有点难,不妨先思考如果给出w,b的两个可能的值,例如(w=1,b=5)和(w=2,b=3),那么怎么评价这两个直线的好坏呢?这就是说给有序对(w,b)一个度量,也就是给出一个值来表示整体拟合度,说人话就是给每个(w,b)打一个分,看分数决定那个好。
【假装有图,回头补上】。
我们用y^\hat{y}y^表示预测值,那么$|\hat{y_1}-y_1| 表示单个值预测的偏差,因此平均误差表示单个值预测的偏差,因此平均误差表示单个值预测的偏差,因此平均误差\frac{|\hat{y_1}-y_1| + \dots + |\hat{y_n}-y_n| }{n}$ 的值越大说明越差,即分数越低越好,于是我们有了
(w=1,b=5)和(w=2,b=3)的分数分别为(假装有数)。给这个方法起个名字叫平均绝对误差。同样的,(y1^−y1)2n\frac{(\hat{y_1}-y_1)^2 }{n}n(y1^−y1)2 也是如此,这个方法名字叫均方误差。
那么原来的问题就变成了如何寻找最小的均方误差的直线。有个叫最小二乘法(ordinary least squares)的方法可以解决这个问题。这是另外一个故事了,知道这个方法可以就行了,不是本文重点。计算完成后,结果如下图所示,(你会发现图上有时间编号到了30,原因是上边数据只节选了几个意思一下而已)
滞后影响
更进一步,如果像下表Lag_1列一样,把因变量滞后一个时间步长,然后把Lag_1作为因变量,是不是就能表示滞后影响,也就是今天的销量对明天销量的影响。
Hardcover | Lag_1 | |
---|---|---|
Date | ||
2000-04-01 | 139 | NaN |
2000-04-02 | 128 | 139.0 |
2000-04-03 | 172 | 128.0 |
2000-04-04 | 139 | 172.0 |
2000-04-05 | 191 | 139.0 |
同样,采用最小二乘法计算得到结果如下图所示。
多元线性回归
上述分别说明了时间的影响和滞后影响,那么能不能同时考虑两者同时的影响,这样预测的值是不是更加准确呢?
y=w1∗x1+w2∗x2+b(2)y = w_1*x_1+w_2*x_2+b (2)y=w1∗x1+w2∗x2+b(2)
公式(2)表示了两个影响因素下的一般公式。
怎么用线性回归方法
这里主要介绍python中的计算方法。简单来说就是调包,具体如下。
from sklearn.linear_model import LinearRegression# Training data
#X = df.loc[:, ['Time']] # features
X = df.loc[:, ['Time']].values.reshape(-1,1) # features, 高版本要加reshape
y = df.loc[:, 'NumVehicles'] # target# Train the model
model = LinearRegression()
model.fit(X, y)# Store the fitted values as a time series with the same time index as
# the training data
y_pred = pd.Series(model.predict(X), index=X.index)
为什么要使用线性回归方法
- 直接用于预测
如果线性回归能够很好的拟合数据,多加一个时间变量就可以得到预测值。
这是拟合在预测中的作用。 - 用于初步分析各影响因素的影响力
线性回归预时间序列预测相关推荐
- 5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型
时间序列预测在最近两年内发生了巨大的变化,尤其是在kaiming的MAE出现以后,现在时间序列的模型也可以用类似MAE的方法进行无监督的预训练 Makridakis M-Competitions系列( ...
- 序列每天从1开始_时间序列预测一
什么是时间序列: 时间序列可以看作是普通的二维的无序的特征矩阵向时间空间的拓展,相对来说多了仅仅一个维度但也是非常重要的时间维度: 时间序列是按时间顺序进行的一系列观察,通常包括了连续性时间序列数据和 ...
- 时间序列预测方法及多步预测方法汇总
本文转载自 https://zhuanlan.zhihu.com/p/471014006 时间序列多步预测方法 https://zhuanlan.zhihu.com/p/390093091 时间序列预 ...
- 时间序列预测方法_让我们使用经典方法预测您的时间序列
时间序列预测方法 时间序列预测 (Time Series Forecasting) 背景 (Background) We learned various data preparation techni ...
- 季节性ARIMA:时间序列预测
SARIMAX (seasonal autoregressive integrated moving average with exogenous regressor)是一种常见的时间序列预测方法,可 ...
- 时间序列预测方法总结
前言 对时间序列数据预测模型做个简单的分类,方便日后对其进一步研究,理清楚技术更新发展方向. 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征. 预测场景 单步预 ...
- 时间序列预测任务的模型选择最全总结
在第一部分,将了解多种时间序列的模型,如 经典的时间序列模型 监督学习模型 基于深度学习的模型 在第二部分,将建立几个时间序列模型来预测股市的应用案例,并了解一些时间序列建模技术.这些模型将相互比较, ...
- 时间序列预测背景知识
时间序列预测背景知识 1.时间序列预测简介(introduction) 2.时间序列可视化 3.判断预测法 4.线性回归模型 5.时间序列分解 1.时间序列预测简介(introduction) 1.1 ...
- 统计学——时间序列预测
统计学(第6版) 贾俊平 读书笔记 第13章 时间序列分析和预测 时间序列是同一现象在不同时间上的相继观测值排列而成的序列.本书中用t表示所观察的时间,Y表示观察值,则Yi( i =1, 2, -, ...
最新文章
- 2020中国高校毕业生薪资排行出炉!原来有这么多双非院校薪资这么高!
- oracle的delete语句加速,Oracle delete语句调优一例
- IDEA只修改代码提示为不区分大小写
- 主流Java数据库连接池比较及前瞻
- Matplotlib图例中文乱码
- HDU 3932 模拟退火
- Spring Bean范围
- 不重复的两两比较(洛谷P5728题题解,Java语言描述)
- 深度学习-TF函数-layers.concatenate用法
- ReactNative设置字体不随系统字体大小变化
- SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求
- python绘制子图去掉x轴坐标值_python – 关闭图形的所有子图的轴
- Objective-C中的typedef枚举是什么?
- 【译】三层架构代码生成器(NetTierGenerator)
- ps 自动生成html代码,详解使用PS中直接生成html网页保存样式的步骤
- Warning: [antdv: LocaleProvider] `LocaleProvider` is deprecated. Please use `local
- 实战 | OpenCV如何将不同轮廓合并成一个轮廓(附Python / C++源码)
- 通向架构师的道路(第十八天)万能框架 Spring ( 一 )
- DCDC开关电源电磁兼容(五)EMI滤波器的设计步骤(内有每一步如何设计详解)
- 【Windows】Windows装机软件