49

訓練された分類器をどのように保存するかについて、少し混乱しています。のように、使用するたびに分類器を再トレーニングすることは明らかに非常に悪くて遅いですが、どうすればそれを保存し、必要なときに再度ロードすることができますか?コードは以下のとおりです。よろしくお願いします。NLTKナイーブベイズ分類器でPythonを使用しています。

classifier = nltk.NaiveBayesClassifier.train(training_set)
# look inside the classifier train method in the source code of the NLTK library

def train(labeled_featuresets, estimator=nltk.probability.ELEProbDist):
    # Create the P(label) distribution
    label_probdist = estimator(label_freqdist)
    # Create the P(fval|label, fname) distribution
    feature_probdist = {}
    return NaiveBayesClassifier(label_probdist, feature_probdist)
4

3 に答える 3

92

保存する:

import pickle
f = open('my_classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()

後でロードするには:

import pickle
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
于 2012-04-04T22:05:23.033 に答える
5

同じ問題を経験しましたが、ELEFreqDistr NLTKクラスであるため、オブジェクトを保存できません。とにかくNLTKは地獄のように遅いです。トレーニングはまともなセットで45分かかり、私は独自のバージョンのアルゴリズムを実装することにしました(pypyで実行するか、.pyxに名前を変更してcythonをインストールします)。同じセットで約3分かかり、jsonとしてデータを保存するだけです(より高速で優れたpickleを実装します)。

簡単なgithubプロジェクトを開始しました、ここのコードをチェックしてください

于 2012-04-04T18:39:43.140 に答える
1

漬物の分類器を再訓練するには:

f = open('originalnaivebayes5k.pickle','rb')
classifier = pickle.load(f)
classifier.train(training_set)
print('Accuracy:',nltk.classify.accuracy(classifier,testing_set)*100)
f.close()
于 2018-01-31T12:30:56.797 に答える