如何添加功能到scikit-learn DictVectorizer?

时间:2015-04-09 23:25:20

标签: python machine-learning scikit-learn spam-prevention naivebayes

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

然而,我似乎无法弄清楚如何在最初“训练”之后扩大DictVectorizer的大小。如果从未见过的新功能/单词到达,则会被忽略。我想做的是挑选当前版本的模型和DictVectorizer,并在每次我们进行新的培训课程时更新它们。这可能吗?

1 个答案:

答案 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)