gpt4 book ai didi

python - 在实时系统中使用 sklearn DictVectorizer

转载 作者:行者123 更新时间:2023-11-28 19:15:06 27 4
gpt4 key购买 nike

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

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

最佳答案

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

关于python - 在实时系统中使用 sklearn DictVectorizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34489173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com