首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >管道异构数据

管道异构数据
EN

Data Science用户
提问于 2020-04-14 09:02:51
回答 1查看 122关注 0票数 1

我正面临一个我不知道如何解决的问题,但由于我是个初学者,可能有一个简单的解决方案我找不到。

我正在处理泰坦尼克数据集,我想使用管道(以避免使用交叉验证的数据泄漏)。因此,我使用两个管道(一个用于数字,一个用于分类)+ FeatureUnion()。

有什么问题吗?在数值管道中,我填充年龄的NaN值,然后为该变量创建一些桶。该管道的结果将是包含所有数值特征+1分类变量的数据。对于编码分类变量,我对分类变量使用管道,然后使用FeatureUnion连接两个数据集。但问题是,我在数值管道中创建的新变量没有进入分类管道,结果是一个包含一个未被编码的范畴变量的数据文件。我怎么才能解决这个问题?

代码:

代码语言:javascript
运行
复制
num_pipeline = Pipeline(steps = [
('selector', DataFrameSelector(numerical_features)),
('imputer', df_imputer(strategy="median")), #Numerical
('new_variables', df_new_variables()) #Numerical
])

cat_pipeline = Pipeline(steps = [
('selector', DataFrameSelector(categorical_features)),
('label_encoder', MultiColumnLabelEncoder()) #Categorical
])

full_pipeline = FeatureUnion(transformer_list=[
("num_pipeline", num_pipeline),
("cat_pipeline", cat_pipeline)
]) 

谢谢您抽时间见我

诚挚的问候

编辑:

我考虑使用ColumnTransformer,因为我认为在我的示例中它更适合,因为我必须对不同的列应用不同的转换,但问题是,当使用ColumnTransformer时,输出将是一个没有列名的数组,如果我们想使用特性选择,这将很难处理。这就是为什么我选择管道而不是ColumnTransformer。

谈到在进入管道之前创建桶的选项,我不能这样做,因为它是基于我正在处理的缺少值的变量创建的。

在这种情况下,最好的选择是什么?

EN

回答 1

Data Science用户

回答已采纳

发布于 2020-04-14 10:13:19

方法1:在转换

之前创建特性

如果您想要基于一个数值变量创建一个分类变量,然后在cat_pipeline中处理它,则需要在列转换器之前创建它。

实现一个变压器(称为“水桶”?)这将接受p变量并将其转换为p+1 (如果您想要添加分类表示并保留初始的数值特性)。这个变压器是你管子的第一步。

然后,创建一个ColumnTransformer (我认为它更适合您的情况,但没有足够的细节来确定。我建议你肯定是阅读这篇文章 )。第二个转换是管道中的第二个步骤。

每个分支都根据其应该输出的内容提供信息,因为特性创建(斗式)是在列转换器之前完成的。

方法2:在转换

中创建特性

否则,您可以创建两个主要路径:

  • 一个分支只输出分类特性,不管输入类型如何。
  • 另一个只输出数字特征,不管输入类型如何。

您可能希望在某些分支中重用您的特性选择器,我只想说明两种可能的方法

希望这能有所帮助

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/72286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档