序列化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())),])
回答:
对于大型文本数据集,可以使用哈希技巧:用HashingVectorizer
替换TfidfVectorizer
(可能在管道中与TfidfTransformer
堆叠):这样pickle的速度会快得多,因为你不再需要存储词汇字典,正如最近在这个问题中讨论的那样: