任何二进制单热编码只能识别训练中看到的值,因此在安装过程中未遇到的功能将被忽略。 对于实时,如果您在一秒钟内拥有数百万条记录,并且功能具有非常高的基数,则需要使用数据更新hasher / mapper。
我们如何对hasher进行增量更新(而不是每次我们处理新的特征值对时计算整个fit())?在这里解决这个问题的建议方法是什么?
答案 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
。
为避免与大量功能发生哈希冲突,您应使用FeatureHasher
值n_features
。
f = FeatureHasher(n_features=2**30)
此外,如果稍后重新实例化FeatureHasher
,则必须使用相同的n_features值进行兼容的功能映射。
这确实使您的模型必须支持稀疏功能集。对于SGDClassifier
,使用sparsify()
方法进行设置。