使用 Scikit-learn Pipelines,当特征依赖于其他行时,如何从时间序列数据中生成特征?
Posted
技术标签:
【中文标题】使用 Scikit-learn Pipelines,当特征依赖于其他行时,如何从时间序列数据中生成特征?【英文标题】:Using Scikit-learn Pipelines, how can features be generated from time series data when the features depend on other rows? 【发布时间】:2018-08-21 21:35:27 【问题描述】:这是一个具体的示例场景:
我想训练一个分类器来预测给定股票第二天的价格是上涨还是下跌。
我想这样做:
我知道特定股票在给定时间段内的每日收盘价。我想生成包括exponential weighted moving average 和price rate of change 在内的功能。给定日期的这些计算需要前几天的收盘价。然后我想计算一个目标变量 1 或 -1 表示第二天股价是上涨还是下跌。
生成特征和目标后,我想将数据分成训练/测试(甚至训练/验证/测试)组,然后训练和测试分类器以预测目标。
最后,我想在 sklearn 管道中实现和执行这些步骤,主要有两个原因:1.) 轻松操纵数据流和/或尝试不同的分类器和 2.) 运行网格搜索以找到好的参数在特征生成步骤和分类器中使用——例如计算指数加权移动平均值应考虑多少天,或者在随机森林分类器中应使用多少个估计器?
这是我遇到的问题:
根据我阅读的有关 sklearn 管道的内容,我需要创建自定义转换,并且可能使用 FeatureUnion 来生成特征。但是,我看到的示例都调用.fit(X_train, y_train)
,它运行管道中的每个步骤(包括生成特征)。但我的功能取决于其他可能不在 X_train 中的行。
【问题讨论】:
我不清楚你的最后一句话,你的特征依赖于 X_train 之外的行......这似乎与流水线相反,这有助于确保训练/测试/验证之间没有信息泄露。一个简单的例子来说明:如果每一行都是一个时间步长 t_x,t_0 在训练中,t_1 在测试中,在训练集中添加一个新的摘要特征,即 (t_0+t_1)/2 已经教会了模型一些关于未来的未知.我认为,如果您对它进行时间限制(在 Yr1 上训练,在 Yr2 上测试)并仅在您的训练/测试拆分后生成平均值,我认为包含移动加权平均值是很好的 @LaurenOldja 值应该在 train_test_split 之前计算,因为如果你进行随机拆分,则数据集的行之间没有逻辑顺序(X,y)。 【参考方案1】:查看tsfresh 的文档。他们甚至有一个你正在寻找的例子:using time series transforms with sklearn pipelines'
【讨论】:
以上是关于使用 Scikit-learn Pipelines,当特征依赖于其他行时,如何从时间序列数据中生成特征?的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Python 和 PyCharm 的 Kubeflow Pipelines SDK 连接到 AI Platform Pipelines
使用 Bitbucket Pipelines 和 Docker 的 Android CI