Sklearn Pipeline 添加新功能
Posted
技术标签:
【中文标题】Sklearn Pipeline 添加新功能【英文标题】:Sklearn Pipeline to add new features 【发布时间】:2020-09-25 23:29:00 【问题描述】:假设我有一个包含大量数字特征的数据集。我不确定在模型中使用数值特征的最佳方法是什么,因此我决定对它们应用不同的转换并将这些结果添加到数据集中。这些转换可以是 MinMax Scaling、StandardScaling、LogTransform,......任何你能想到的。
所以基本上,在原始数据中,我可能只有“Value_in_Dollars”特征,经过所有转换后,我还希望在数据集中拥有转换后的特征:
"Value_in_Dollars_MinMax", "Value_in_Dollars_SS", "Value_in_Dollars_Log"
除了原来的列。
我知道如何手动执行此操作,但如何在 Sklearn 管道中执行此操作?这甚至可能吗?
【问题讨论】:
您可以尝试使用“named_steps”的输出,并以您喜欢的方式将转换后的值添加到数据集 【参考方案1】:使用FeatureUnion
可能还有ColumnTransformer
,例如
union = FeatureUnion([("MinMax", MinMaxScaler()),
("SS", StandardScaler()),
("Log", FunctionTransformer(np.log1p)])
proc = ColumnTransformer([('trylots', union, ['Value_In_Dollars'])],
remainder='passthrough')
【讨论】:
很好,我很好奇这一切看起来会如何包装到一个管道中。这行得通吗? 还有,有没有一种方法可以创建自定义转换,从而在单个管道中创建新功能?类似于pipeline([('make_bin', lambda x: 0 if x < 5 else 1)])
。
对于您的第一个问题,是的,您可以使用proc
作为管道中的一个步骤。您的第二个问题似乎应该是一个新问题,只是文档很容易回答:看看FunctionTransformer
,可能连同这里的想法。
谢谢!我会检查一下。我想我会通过更多搜索找到它,但我认为在这里放一个面包屑可能对社区有用。以上是关于Sklearn Pipeline 添加新功能的主要内容,如果未能解决你的问题,请参考以下文章