2017-02-21 7 views
0

クラスタ化されたドキュメントのセットがあります。各ドキュメントにはラベルが付いています。私はこれに基づいて分類器を作って訓練してテストして、うまく動作するようにして、新しい文書/テキストを与えると適切なクラスターに落ちたかったのです。だから、私はcountVectorizerを使ってドキュメントをフィーチャに変換しました。私はこのcountVectorizerが、私が提供した一連の文書(1000以上の文書)のすべての単語のユニークなセットを取ることを知っています。 私はKNNまたはNavieBayesのいずれかの分類器を作成しましたが、今は新しいテキストファイルまたはドキュメントを持っています。これをフィーチャに変換する必要があります。しかし、もし私がcountVectorizerに単一のdocumnetを与えれば、私はほんの少しの単語しか持たないでしょうし、それに基づいて、すべての機能はトレーニングとテストのドキュメントとは異なるでしょう。 私が与える非常に同じ文書に対して同じcountVectorizerオブジェクトを使用する方法はありますか? 親切に私、任意の提案やこれを行う方法を案内しますか?クラシファイアアルゴリズムを使用して単一テキストを分類する方法

def classifierNaviaBayes(self): 
    count_vectorizer = CountVectorizer(binary='true') 
    train_documents = count_vectorizer.fit_transform(self.training_documents) 
    classifier = BernoulliNB().fit(train_documents, self.training_labels) 

    "Test Phase" 
    count_worng_prediction = 0 
    for i in range(0,len(self.test_documents)): 
     print("The predicted value is ",classifier.predict(count_vectorizer.transform([self.test_documents[i]]))) 
     print("The expected value is ", self.test_labels[i]) 
     predicted_result = classifier.predict(count_vectorizer.transform([self.test_documents[i]]))[0] 
     expected_result = self.test_labels[i] 
     if predicted_result != expected_result: 
      count_worng_prediction +=1 

    print("The percentage of prediction accuracy is ",(100-(count_worng_prediction/len(self.test_documents))*100)) 

私も同じcountVertorizerをテストデータに使用しています。したがって、以下のコードが動作しています。

答えて

0

CountVectorizer.transformを使用すると、テストドキュメントを分類する正しい方法です。トレーニングデータに適合したベクタライザを使用してテストセットを変換すると、テストセットの新しいボキャブラリは使用されません。あなたはhere

+0

OK]をクリックして、私は訓練されたデータとの私の分類器の準備ができていると言うの疎な特徴に合わせて方法の詳細を読むことができます

(モデルは異なる語彙に訓練されたとしてベクトライザーをフィッティングしても、意味がありません)。そして、私はそれぞれのラベルに分類する必要がある新しい文書を1つ持っています。私はfit_transformを行ったのと同じcount_vertorizerに渡すべきですか?私は新しいcount_vectorizerを作成し、新しい文書の変換を呼び出すと、それは私とエラーを与えたので。 #fit_transformと同じ行列構築戦略を使用します。 NotFittedError:CountVectorizer - 語彙が適合しませんでした。 –

+0

トレーニングデータに適合した同じcount_vectorizerを使用する必要があります。 – Rubbal

関連する問題