在实时系统中使用sklearn DictVectorizer

时间:2015-12-28 07:13:10

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

任何二进制单热编码只能识别训练中看到的值,因此在安装过程中未遇到的功能将被忽略。 对于实时,如果您在一秒钟内拥有数百万条记录,并且功能具有非常高的基数,则需要使用数据更新hasher / mapper。

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

1 个答案:

答案 0 :(得分:0)

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

为避免与大量功能发生哈希冲突,您应使用FeatureHashern_features

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