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 添加新功能的主要内容,如果未能解决你的问题,请参考以下文章

向 Sklearn 分类器添加功能

从 sklearn.pipeline.Pipeline 获取转换器结果

sklearn GridSearchCV 与管道

sklearn GridSearchCV 与管道

从 sklearn 中的 Pipeline 对象返回系数

如何使用 Sklearn 管道进行参数调整/交叉验证?