我在scikit-learn中使用MultinomialNB模型训练垃圾邮件检测器。我使用DictVectorizer类将标记转换为字数(即特征)。我希望能够随着时间的推移使用新数据训练模型(在这种情况下,以聊天消息的形式传入我们的应用服务器)。为此,看起来partial_fit函数很有用。
然而,我似乎无法弄清楚如何在最初“训练”之后扩大DictVectorizer的大小。如果从未见过的新功能/单词到达,则会被忽略。我想做的是挑选当前版本的模型和DictVectorizer,并在每次我们进行新的培训课程时更新它们。这可能吗?
答案 0 :(得分:0)
在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)