【问题标题】:Using sklearn DictVectorizer in real-time systems在实时系统中使用 sklearn DictVectorizer
【发布时间】:2016-04-02 01:06:30
【问题描述】:

任何二进制 one-hot 编码都只知道训练中看到的值,因此在拟合期间未遇到的特征将被静默忽略。 对于实时,您在一秒钟内拥有数百万条记录,并且功能具有非常高的基数,您需要使用数据更新您的哈希/映射器。

我们如何对哈希器进行增量更新(而不是在每次遇到新的特征值对时计算整个 fit())?解决这个问题的建议方法是什么?

【问题讨论】:

    标签: python machine-learning scikit-learn sparse-matrix


    【解决方案1】:

    sklearn.feature_extraction.FeatureHasher 的美妙之处在于它不需要调用 fit。它是无状态的,可以在不提前知道词汇表的情况下转换字典。

    例子:

    from sklearn.feature_extraction import FeatureHasher
    
    print "Feature Hasher 1"
    f = FeatureHasher()
    mat = f.transform([{"A":1, "B":2}])
    print "Indicies:",mat.indices
    print "Values:", mat.data
    
    print
    
    print "Feature Hasher 2"
    f = FeatureHasher()
    mat = f.transform([{"B":2, "C":3}])
    print "Indicies:",mat.indices
    print "Values:", mat.data
    

    生产:

    Feature Hasher 1
    Indicies: [628086 849870]
    Values: [-2.  1.]
    
    Feature Hasher 2
    Indicies: [196981 628086]
    Values: [-3. -2.]
    

    如您所见,即使使用新功能哈希器 "B" 始终映射到 628086

    为避免与大量特征发生哈希冲突,您应该使用具有较大 n_features 值的 FeatureHasher

    f = FeatureHasher(n_features=2**30)
    

    此外,如果您稍后重新实例化 FeatureHasher,请务必为兼容的特征映射使用相同的 n_features 值。

    这确实使您的模型有必要支持稀疏特征集。对于SGDClassifier,这是使用sparsify() 方法设置的。

    见:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.sparsify

    【讨论】:

    • 我对 FeatureHasher 很熟悉,但它不会(以高概率)产生哈希冲突的影响吗?
    • 省略我的评论,我现在看到,对于少量功能,它可能会导致哈希冲突,这不是我的情况。但是,我认为 sklearn 有一个错误(请参阅此处 [链接] (stackoverflow.com/questions/33982717/…) 和此处 [链接] (github.com/scikit-learn/scikit-learn/issues/4878)
    • 我刚刚回答了这个问题。检查我的答案。 :-)
    • 就哈希冲突而言,您是正确的。可能存在哈希冲突,我知道在某些情况下,哈希冲突实际上有些优势,因为它们有助于提供一种正则化形式。我听说在垃圾邮件检测的情况下,它实际上能够从产生哈希冲突的垃圾字符串中受益。这里有一些关于如何避免碰撞的讨论。 github.com/JohnLangford/vowpal_wabbit/wiki/…
    • 我在答案中添加了有关哈希空间大小的附加信息。
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2020-12-25
    • 2018-10-04
    • 2015-10-20
    • 2014-02-03
    • 2014-08-06
    • 2014-10-28
    相关资源
    最近更新 更多