6

序列化 scikit-learn 分类器的最有效方法是什么?

我目前正在使用 Python 的标准 Pickle 模块来序列化文本分类器,但这会导致 pickle 非常大。序列化的对象可以是 100MB 或更大,这似乎太大了,需要一段时间来生成和存储。我用 Weka 做过类似的工作,等效的序列化分类器通常只有几个 MB。

scikit-learn 是否可能在 pickle 中缓存训练数据或其他无关信息?如果是这样,我怎样才能加快和减少序列化 scikit-learn 分类器的大小?

classifier = Pipeline([
    ('vectorizer', CountVectorizer(ngram_range=(1,4))),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(LinearSVC())),
])
4

2 回答 2

5

对于大型文本数据集,请使用散列技巧:用TfidfVectorizera替换HashingVectorizer(可能在管道中与 a 堆叠TfidfTransformer):腌制会快得多,因为您不必再​​存储词汇字典,正如最近在这个问题中讨论的那样:

如何减少 Scikit-Learn Vectorizer 的内存使用量?

于 2013-07-11T08:02:33.777 回答
4

您还可以使用joblib.dump并传递压缩。我注意到我的分类器泡菜转储使用选项 compress=3 减少了约 16 倍。

于 2015-11-11T19:49:57.800 回答