序列化scikit-learn分类器的最有效方法是什么?
我目前正在使用Python的标准Pickle模块来序列化text classifier,但这会导致一个巨大的泡菜。序列化对象可能是100MB或更多,这似乎过多,需要一段时间来生成和存储。我和Weka做过类似的工作,等效的序列化分类器通常只有几MB。
是否scikit-learn可能会在pickle中缓存训练数据或其他无关信息?如果是这样,我怎样才能加快并减少序列化scikit-learn分类器的大小?
classifier = Pipeline([
('vectorizer', CountVectorizer(ngram_range=(1,4))),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC())),
])
答案 0 :(得分:5)
对于大型文本数据集,请使用散列技巧:将TfidfVectorizer
替换为HashingVectorizer
(可能与管道中的TfidfTransformer
堆叠在一起):它会更快地腌制你不必再像以前在这个问题中所讨论的那样存储词汇表了:
答案 1 :(得分:4)
您也可以使用joblib.dump并传递压缩。我注意到我的分类器pickle转储使用选项compress = 3减少了~16倍。