首页 > 解决方案 > HashingVectorizer 与 TfidfVectorizer 导出文件大小

问题描述

我正在使用以下内容生成模型:

from sklearn.linear_model import SGDClassifier
text_clf = OnlinePipeline([('vect', HashingVectorizer()),
 ('clf-svm', SGDClassifier(loss='log', penalty='l2', alpha=1e-3, max_iter=5, random_state=None)),
])

当我使用以下导出此模型时:

from sklearn.externals import joblib
joblib.dump(text_clf, 'text_clf.joblib')

text_clf.joblib的是45MB。当我替换HashingVectorizer()TfidfVectorizer()重新导出时,我的模型是 9kb。

为什么会有这样的文件差异,并且无论如何要减少 HashingVectorizer 导出的大小。

标签: pythonmachine-learningscikit-learn

解决方案


HashingVectorizer是无状态的,因此不会在内存中保留任何内容。它是从传递HashingVectorizerSGDClassifier.

默认情况下,根据数据计算的特征数为

n_features=1048576

因此,SGDClassifier必须为所有这些功能保存coef_intercept_变量。如果您的问题是多类的,这将会增加。对于大于 2 的类,存储将按类数增加。

需要有关TfidfVectorizer功能的更多详细信息。在这种情况下,它的大小TfidfVectorizer.vocabulary_只有 9kb,它的大小是多少?您可以通过以下方式访问它:

len(text_clf.named_steps['vect'].vocabulary_)

推荐阅读