2012-04-04 21 views
46

訓練されたクラシファイアをどのように保存するか少し混乱します。同様に、使用するたびにクラシファイアを再トレーニングするのは明らかに実際には悪くて遅いですが、必要なときにどのように保存して再度ロードするのですか?コードは以下のとおりです。お手伝いをいただきありがとうございます。私はNLTK Naive Bayes ClassifierでPythonを使用しています。Naive Bayesの訓練されたクラシファイアをNLTKに保存

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) 
+2

いくつかの持続性戦略を求めていますか? DBに保存する場合と同じように、ファイルと読み込みを再度実行しますか?データをピクルして後で再度読み込むことはできます。 – EdChum

答えて

80

チェックアウト、簡単なgithubのプロジェクトを開始しました:

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() 
+0

すでにピクルされたモデルを使って私のモデルを再トレーニングしたいのですが、どうすればいいですか?インポートピクル f = open( 'my_classifier.pickle'、 'rb') classifier = pickle.load(f) .....その後ですか? – Mohsin

5

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

私は保存するには、コードhere

+0

ありがとう@ luke14free、それを使用する方法のドキュメントがありますか?前もって感謝します。 – Istvan

+0

私はあなたがコードを見ていますが、まだcythonを実装していません –

0

を漬けClassiferリトレインするには:

f = open('originalnaivebayes5k.pickle','rb') 
classifier = pickle.load(f) 
classifier.train(training_set) 
print('Accuracy:',nltk.classify.accuracy(classifier,testing_set)*100) 
f.close() 
関連する問題