如何编码每列具有多个值的要素?需要MultiDictVectorizer吗?

时间:2016-02-15 23:46:14

标签: python scikit-learn feature-extraction dictvectorizer one-hot-encoding

我在sklearn中渲染了一些功能,但我遇到了一个问题。如果您的数据可以编码为每个项目的一个dict键,则DictVectorizer可以正常工作。如果您的商品可以包含同一列的两个或更多值,该怎么办?例如,DictVectorizer可以在像这样的项目上正常工作:

def set_locale
 current_locale = 'en' # default one
 parsed_locale = request.fullpath.split('/').last
 parsed_locale = I18n.available_locales.map(&:to_s).include?(parsed_locale.to_s) ? parsed_locale : current_locale
 I18n.locale = parsed_locale
end

但是这样的事情呢,每列有多个值?

{'a': 'b', 'b': 'c'}

单热编码的策略仍然适用,您只需要两列...... a = b和a = c。据我所知,没有这样的矢量化器存在!在这种情况下应该做什么?我是否需要创建自己的MultiDictVectorizer?

我在发布之前在blog post写了这篇文章。

2 个答案:

答案 0 :(得分:1)

这种情况至少有两种快速解决方案:

  1. 创建一个新值,表示有两个聚合值的可能性

    {'a': 'bc', 'b': 'd'}或给它另一个名字,即'bc'-->'e'

  2. 每次使用其中一个值

    复制样本

    {'a': 'b', 'b': 'd'}{'a': 'c', 'b': 'd'}

  3. 但当然这很大程度上取决于你的问题背景(案例2:重复'具有不同表现形式的样本是否正确?案例1:在概念上是可接受的另一个新特征值?)。例如,我甚至不知道该多值特征是否与N/A情况相对应。

    我已经看过你的github提案了,所以我明白这不是你想要的,但万一它可以省去你的努力。

答案 1 :(得分:0)

DictVectorizer无法处理每个键的多个值,因此我将此功能添加到其中。如果拉动被接受,这将是sklearn的一部分。如果没有,我将在MultiDictVectorizer中继承DictVectorizer,并将为此类发布一个包。

Pull request at Github

Issue in sklearn Github project