2016-01-11 35 views
2

我有一组的N个数据点X = {X 1 ,...,X Ñ}和一组N个目标值/类ÿ = {y ,...,y n}。考虑到“窗口”(缺少更好的术语)的数据点(例如,数据点),构建给定的特征向量。我可能要堆叠 “的最后4个数据点”,即,x I-4,X I-3,X I-2,X I-1用于Y 的预测。scikit学习定制变压器/管道,改变X和Y

显然,对于窗口大小为4的这样的特征向量不能为前三个目标值构建,我想简单地删除它们。同样对于最后的数据点x n

这不会是一个问题,除非我想这是作为sklearn管道的一部分发生的。到目前为止,我已经成功地为其他任务编写了一些自定义变换器,但那些不能(据我所知)更改Y矩阵。

有没有办法做到这一点,我不知道或者我坚持做这个作为管道外的预处理? (这意味着,我将无法使用GridsearchCV来查找最佳窗口大小和移位。)

我试过寻找这个,但是我想出的所有是this question,它处理从X矩阵。在那里接受的答案让我想到,我想要做的并不是scikit-learn支持的,但我想确保。

回答

2

你是对的,你不能在sklearn Pipeline内调整你的目标。这并不意味着你不能进行网格搜索,但这确实意味着你可能不得不以更多的手动方式去做。我会建议您编写一个函数,在y上进行转换和过滤,然后手动循环通过ParameterGrid创建的调整网格。如果这没有意义,您可以使用代码编辑您的帖子,以获得进一步的帮助。

+0

看到示例库是的,这就是我的意思。我不能将我的管道转储到一个GridSearchCV中,我发现这是执行CV最方便的方法。我相当肯定我可以让它手动工作。谢谢 –

0

我正在努力解决类似的问题,并发现不幸的是,你不能传递变压器之间的y值。话虽如此,我用一种肮脏的方式绕过了这个问题。

我将y值存储为变换器的实例属性。这样,当管道调用fit_transform时,我可以在transform方法中访问它们。然后,变换方法传递下一个估计器预期的元组(X,self.y_stored)。这意味着我必须编写包装估算器,它非常难看,但它的工作原理!

0

我们开发了PipeGraph,这是一种管道扩展,允许用户定义像Scikit-Learn对象链一样的复杂图形。特别是,它可以通过为每个步骤定义适当的步骤链来解决变换任何变量的问题。你可以在https://mcasl.github.io/PipeGraph/auto_examples/index.html