我正在向量化sklearn中的某些功能,但我遇到了一个问题。如果您的数据可以编码为每个项目一个字典键,则 DictVectorizer 效果很好。如果项目可以在同一列中具有两个或多个值,该怎么办?例如,DictVectorizer在这样的项目上工作得很好:
{'a': 'b', 'b': 'c'}
但是像这样的东西,每列有多个值呢?
{'a': ['b','c'], 'b': 'd'}
一热编码的策略仍然可以适用,你只需要两列......a=b 和 a=c。据我所知,不存在这样的矢量化器!在这种情况下应该怎么做?我需要创建自己的多词典矢量化器吗?
在发布之前,我在这里的一篇博客文章中写过这个。
这种情况,至少有两种快速的解决方案:
创建一个新值,该值表示具有两个聚合值的可能性
{'a': 'bc', 'b': 'd'}
或给它另一个名字,即'bc'-->'e'
每次取其中一个值时复制样本
{'a': 'b', 'b': 'd'}
和{'a': 'c', 'b': 'd'}
但是,当然,这在很大程度上取决于您问题的上下文(情况2:"复制"具有不同表现形式的样本是否正确?情况1:在概念上是否可以接受该功能的另一个新值?(。例如,我什至不知道该多值特征是否对应于N/A
情况。
我已经看过你的 github 提案,所以我知道这不是你想要的,但以防万一它可以节省你的精力。
DictVectorizer 无法处理每个键的多个值,因此我正在为其添加此功能。如果拉取被接受,这将是sklearn的一部分。如果没有,我将在MultiDictVectorizer中对DictVectorizer进行子类化,并为此类发布一个包。
Github 上的拉取请求
sklearn Github项目中的问题