我正在使用scikit-learn中的MultinomialNB模型训练垃圾邮件检测器。我使用DictVectorizer类将令牌转换为字数(即功能)。我希望能够随着时间的流逝使用新数据到达模型来训练模型(在这种情况下,以传入我们的应用服务器的聊天消息的形式)。为此,看来partial_fit函数将很有用。

但是,我似乎无法弄清楚的是DictVectorizer最初经过“训练”后如何扩大其尺寸。如果出现了从未见过的新功能/单词,它们将被忽略。我想做的是腌制当前版本的模型和DictVectorizer,并在每次进行新的培训时都对其进行更新。这可能吗?

最佳答案

documentation中,他们使用字典来完成DictVectorizer的学习阶段。您可能可以将新功能添加到原始词典中并执行fit_transform
这样,您就可以将值添加到DictVectoriser中。

请注意partial_fit方法,它是一种heavy treatment。如方法文档所述,存在处理开销。

from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer(sparse=False)
D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
X = v.fit_transform(D)

# Learn and do treatment

# when new data come (value is a dictionary)
D.append(values)
X = v.fit_transform(D) # do the fit again

# 2 choices,
# wait for more modification before learning
# or learn each time you have modification (not really performant)

10-04 15:40