之前我们说的ARIMA直接套用就可以,因为包里面自动把它化成t-1,t-2。。。的形式了,

但如果我们要变量选择的话,还是先转化成监督学习问题吧(shift...)

转换成监督学习问题参考:https://machinelearningmastery.com/category/time-series/

from pandas import Series
from pandas import DataFrame
# load dataset
series = Series.from_csv('seasonally_adjusted.csv', header=None)
# reframe as supervised learning
dataframe = DataFrame()
for i in range(12,0,-1):
dataframe['t-'+str(i)] = series.shift(i)
dataframe['t'] = series.values
print(dataframe.head(13))
dataframe = dataframe[13:]
# save to new file
dataframe.to_csv('lags_12months_features.csv', index=False)

结果长这样:

t-12   t-11         t-10    t-9     t-8           t-7       t-6     t-5  \
1961-01-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN     NaN
1961-02-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN     NaN
1961-03-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN     NaN
1961-04-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN     NaN
1961-05-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN     NaN
1961-06-01    NaN    NaN    NaN    NaN     NaN     NaN     NaN   687.0
1961-07-01    NaN    NaN    NaN    NaN     NaN     NaN   687.0   646.0
1961-08-01    NaN    NaN    NaN    NaN     NaN   687.0   646.0  -189.0
1961-09-01    NaN    NaN    NaN    NaN   687.0   646.0  -189.0  -611.0
1961-10-01    NaN    NaN    NaN  687.0   646.0  -189.0  -611.0  1339.0
1961-11-01    NaN    NaN  687.0  646.0  -189.0  -611.0  1339.0    30.0
1961-12-01    NaN  687.0  646.0 -189.0  -611.0  1339.0    30.0  1645.0
1962-01-01  687.0  646.0 -189.0 -611.0  1339.0    30.0  1645.0  -276.0

t-4     t-3           t-2     t-1       t
1961-01-01     NaN     NaN     NaN     NaN   687.0
1961-02-01     NaN     NaN     NaN   687.0   646.0
1961-03-01     NaN     NaN   687.0   646.0  -189.0
1961-04-01     NaN   687.0   646.0  -189.0  -611.0
1961-05-01   687.0   646.0  -189.0  -611.0  1339.0
1961-06-01   646.0  -189.0  -611.0  1339.0    30.0
1961-07-01  -189.0  -611.0  1339.0    30.0  1645.0
1961-08-01  -611.0  1339.0    30.0  1645.0  -276.0
1961-09-01  1339.0    30.0  1645.0  -276.0   561.0
1961-10-01    30.0  1645.0  -276.0   561.0   470.0
1961-11-01  1645.0  -276.0   561.0   470.0  3395.0
1961-12-01  -276.0   561.0   470.0  3395.0   360.0
1962-01-01   561.0   470.0  3395.0   360.0  3440.0

1.随机森林选择重要程度高的变量

这里简单提一下,随机森林回归树是根据啥选择重要变量的呢,每一棵树,我都利用RSS最小建立一棵树的原则,这样每个特征分裂都有对应的RSS减少量,500颗树平均起来,算出每一个特征RSS的减少量,越大代表重要程度越高,详细介绍可以参考:统计学习导论:基于R的应用。

注意选变量的时候,树的数目一定要多~~~~n_estimators=500,顺便设置个随机种子

from pandas import read_csv
from sklearn.ensemble import RandomForestRegressor
from matplotlib import pyplot
# load data
dataframe = read_csv('lags_12months_features.csv', header=0)
array = dataframe.values
# split into input and output
X = array[:,0:-1]
y = array[:,-1]
# fit random forest model
model = RandomForestRegressor(n_estimators=500, random_state=1)
model.fit(X, y)
# show importance scores
print(model.feature_importances_)
# plot importance scores
names = dataframe.columns.values[0:-1]
ticks = [i for i in range(len(names))]
pyplot.bar(ticks, model.feature_importances_)
pyplot.xticks(ticks, names)
pyplot.show()

结果如下:

[ 0.21642244  0.06271259  0.05662302  0.05543768  0.07155573  0.08478599
  0.07699371  0.05366735  0.1033234   0.04897883  0.1066669   0.06283236]

2.RFE

最常用的包装法是递归消除特征法(recursive feature elimination,以下简称RFE)。递归消除特征法使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。在sklearn中,可以使用RFE函数来选择特征。

    我们下面以经典的SVM-RFE算法来讨论这个特征选择的思路。这个算法以支持向量机来做RFE的机器学习模型选择特征。它在第一轮训练的时候,会选择所有的特征来训练,得到了分类的超平面wx˙+b=0wx˙+b=0后,如果有n个特征,那么RFE-SVM会选择出ww中分量的平方值w2iwi2最小的那个序号i对应的特征,将其排除,在第二类的时候,特征数就剩下n-1个了,我们继续用这n-1个特征和输出值来训练SVM,同样的,去掉w2iwi2最小的那个序号i对应的特征。以此类推,直到剩下的特征数满足我们的需求为止。

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestRegressor
from matplotlib import pyplot
# load dataset
dataframe = read_csv('lags_12months_features.csv', header=0)
# separate into input and output variables
array = dataframe.values
X = array[:,0:-1]
y = array[:,-1]
# perform feature selection
rfe = RFE(RandomForestRegressor(n_estimators=500, random_state=1), 4)
fit = rfe.fit(X, y)
# report selected features
print('Selected Features:')
names = dataframe.columns.values[0:-1]
for i in range(len(fit.support_)):if fit.support_[i]:print(names[i])
# plot feature rank
names = dataframe.columns.values[0:-1]
ticks = [i for i in range(len(names))]
pyplot.bar(ticks, fit.ranking_)
pyplot.xticks(ticks, names)
pyplot.show()

上面使用了RF作为基本分类器去选择,最终只要4个

结果:

Selected Features:
t-12
t-6
t-4
t-2

上面这个图代表变量重要性的排序排序,选出来的四个变量排序都是1

当然刘建平大神博客还介绍了其他的变量选择方法,也是都可以用一下的

https://machinelearningmastery.com/feature-selection-time-series-forecasting-python/

时间序列--重要变量选择相关推荐

  1. Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择

    全文下载:http://tecdat.cn/?p=22319 本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估.为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方 ...

  2. R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择分类心肌梗塞数据模型案例...

    全文下载链接:http://tecdat.cn/?p=21444 在本文中,逻辑logistic回归是研究中常用的方法,可以进行影响因素筛选.概率预测.分类等,例如医学研究中高通里测序技术得到的数据给 ...

  3. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主 ...

  4. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...

  5. 【运筹学】人工变量法总结 ( 人工变量法解的分析 | 标准型变换 | 构造单位阵 | 目标函数引入 M | 计算检验数 | 选择入基变量 | 选择出基变量 | 中心元变换 | ) ★★

    文章目录 一.人工变量法及解的分析 二.案例 三.线性规划标准型变换 四.人工变量法构造单位阵 五.初始单纯形表 六.初始单纯形表 : 计算非基变量检验数 七.初始单纯形表 : 最优解判定 八.初始单 ...

  6. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第二次迭代 | 中心元变换 | 检验数计算 | 最优解判定 | 选择入基变量 | 选择出基变量 )

    文章目录 一.第二次迭代 : 中心元变换 二.第二次迭代 : 单纯形表 三.第二次迭代 : 计算检验数 四.第二次迭代 : 最优解判定 五.第二次迭代 : 选择入基变量 六.第二次迭代 : 选择出基变 ...

  7. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第一次迭代 | 中心元变换 | 检验数计算 | 选择入基变量 | 选择出基变量 )

    文章目录 一.第一次迭代 : 中心元变换 二.第一次迭代 : 单纯形表 三.第一次迭代 : 计算检验数 四.第一次迭代 : 最优解判定 五.第一次迭代 : 选择入基变量 六.第一次迭代 : 选择出基变 ...

  8. 【运筹学】线性规划数学模型 ( 单纯形法 | 第一次迭代 | 方程组同解变换 | 计算新单纯形表 | 计算检验数 | 入基变量选择 | 出基变量选择 )

    文章目录 一.初始基可行解后第一次迭代 二.迭代后新的单纯形表 三.方程组同解变换 四.生成新的单纯形表 五.解出基可行解 六.计算检验数 σj\sigma_jσj​ 并选择入基变量 七.计算 θ\t ...

  9. UA MATH567 高维统计专题1 稀疏信号及其恢复7 LASSO的预测误差与变量选择一致性

    UA MATH567 高维统计专题1 稀疏信号及其恢复7 LASSO的预测误差与变量选择一致性 Prediction Error Variable Selection Consistency Pred ...

最新文章

  1. .net 应用迁移到Mono 工具 (Moma)
  2. [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)
  3. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)
  4. 改变Jupyter的默认项目路径
  5. 字中字效果-html5实例
  6. 《Java程序设计》第四次学习总结
  7. 选择CA厂商的加密证书
  8. 学习(踩坑)记录——新建工程
  9. 计算机软件实习项目四 —— 校园一卡通管理系统 (代码实现) 12-27
  10. Element-UI省市区(县)三级联动---基于VUX移动框架的x-address组件
  11. 软件测试——测试用例之场景法
  12. 什么是自然语言处理(NLP)?
  13. BCD码和ASCII码的相互转换
  14. 记一个windows预览体验计划0x800bfa07错误问题
  15. 日本公平贸易委员会结束对App Store的调查,苹果再次宣布整改
  16. 笔记本建立WIFI热点的bat命令
  17. 微信支付宝借刷脸支付抢占线下支付市场
  18. 8. 【gRPC系列学习】resetTransport建立TCP连接流程
  19. Android扮猪吃虎
  20. Jupyter Notebook/Python

热门文章

  1. 怎么在服务器里做一个金币系统,如何在Reworld里存储玩家的金币
  2. gis插入的文本怎么搞成两行_没有电脑怎么做PPT?用手机这样做!比电脑做出来的还要精美...
  3. windows系统如何连接蓝牙耳机
  4. Android开发----实现应用启动页
  5. 2023,滴滴“摸着自动驾驶过河”
  6. 散布矩阵(scatter_matrix)及相关系数(correlation coefficients)实例分析
  7. 次世代3D游戏场景贴图绘制技巧,高效学建模!
  8. 柬埔寨插画师AlienQueen——时髦的插图风格,丰富多彩,充满细节
  9. 竞争压力大,vivo重视中低端手机
  10. 极客战记---冰山之杀手