2017-02-03 6 views
0

私はSVM(scikit)を使用したデータのトレーニングとテストに取り組んでいます。私はSVMを訓練しており、そこからピクルスを準備しています。次に、私はそのピクルを使って自分のシステムをテストしています。まず、変数train_datatest_dataのトレーニングデータとテストデータをそれぞれ読んでいます。Python-Scikit。 SVMを使用したトレーニングとテスト

はその後、私は訓練のために使用していたコードは次のとおりです。

vectorizer = TfidfVectorizer(max_df = 0.8, 
          sublinear_tf=True, 
          use_idf=True) 
train_vectors = vectorizer.fit_transform(train_data) 
test_vectors = vectorizer.transform(test_data) 

classifier_rbf = svm.SVC() 
classifier_rbf.fit(train_vectors, train_labels) 
from sklearn.externals import joblib 
joblib.dump(classifier_rbf, 'pickl/train_rbf_SVM.pkl',1) 

再度テストしながら、私はそれぞれの変数train_datatest_dataでトレーニングデータとテストデータを読んでいます。テスト用に使用しているコードは次のとおりです。

vectorizer = TfidfVectorizer(max_df = 0.8, 
          sublinear_tf=True, 
          use_idf=True) 
train_vectors = vectorizer.fit_transform(train_data) 
test_vectors = vectorizer.transform(test_data) 
from sklearn.externals import joblib 
classifier_rbf = joblib.load('pickl/train_rbf_SVM.pkl') 
prediction_rbf = classifier_rbf.predict(test_vectors) 

このコードは正常に動作しており、正しい出力が得られます。私の質問は、テストをしたいときはいつでもトレーニングデータを読むことが義務ですか?

ありがとうございます。

答えて

2

あなたの場合、はい。 tfidfVectorizerを保存していないためです。 試験データは、意味のある予測を与えるために列車データが変換されたのとまったく同じ方法で変換されなければなりません。 列車のデータを何度も読み取らないようにするには、tfidfVectorizerも一緒に試してみてください。

また、あなたがscikit学習データに前処理を組み合わせることとトレーニングのさまざまな部分を酸洗し、読み込みを心配せずに酸洗し、簡単にunpickeできる1つのオブジェクトに推定で提供パイプラインを見てみたいことがあり

編集 - を追加しましたコード

初めての訓練は、最終的にあなたのコードに次の行を追加している間:

joblib.dump(vectorizer, 'pickl/train_vectorizer.pkl',1) 

データをテストするとき、トレーニングデータを読み込む必要はありません。すでに装着されているベクトル化ツールをロードするだけです。

classifier_rbf = joblib.load('pickl/train_rbf_SVM.pkl') 
vectorizer = joblib.load('pickl/train_vectorizer.pkl') 

test_vectors = vectorizer.transform(test_data) 
prediction_rbf = classifier_rbf.predict(test_vectors) 
+0

私は「train_vector」と「train_labels」をピックアップしました。それでも、私が 'fit_transform'の呼び出しでlineを削除した場合、それは私にはボキャブラリが当てはまらないというエラーを与えます。 – Himadri

+0

Trainvectorとtrainlabelsは問題ありません。あなたがうまくいかなければならないのは、vectorizerとclassifier_rbfです –

+0

これは私の質問に示されたコードで行ったことです。あなたは私の答えにコードを書くことができますか?ありがとうございました。 – Himadri

関連する問題