6

scikit-learn分類子をシリアル化する最も効率的な方法は何ですか?

私は現在、テキスト分類子をシリアル化するために Python の標準 Pickle モジュールを使用していますが、これは非常に大きな pickle になります。シリアル化されたオブジェクトは 100MB 以上になる可能性があり、これは大きすぎると思われ、生成と保存に時間がかかります。私は Weka で同様の作業を行いましたが、同等のシリアル化された分類子は通常、数 MB しかありません。

scikit-learn は、トレーニング データやその他の無関係な情報をピクルにキャッシュしている可能性がありますか? もしそうなら、シリアル化された scikit-learn 分類子のサイズを高速化して縮小するにはどうすればよいですか?

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

2 に答える 2

5

TfidfVectorizer大規模なテキスト データセットの場合は、ハッシュ トリックを使用します:を aに置き換えますHashingVectorizer(パイプラインで a とスタックされる可能性TfidfTransformerがあります): この質問で最近説明したように、語彙辞書を保存する必要がなくなるため、ピクルがはるかに高速になります。 :

Scikit-Learn ベクトライザーのメモリ使用量を減らすにはどうすればよいですか?

于 2013-07-11T08:02:33.777 に答える
4

joblib.dumpを使用して圧縮を渡すこともできます。オプション compress=3 を使用すると、分類子のピクル ダンプが最大 16 倍減少することに気付きました。

于 2015-11-11T19:49:57.800 に答える