0

scikit-learnでNaive Bayes(MultinominalNB)を使用して小さなテキスト(つぶやき)を分類しています。 私の列車データには1000個の機能があり、テストデータには1200個の機能があります。 列車データとテストデータの両方に500の機能が共通しているとします。Naive Bayes目に見えない機能がscikitを処理するlearn

MultinominalNBがscikitで目に見えない機能に対応していない学び、そして私にエラーを与える、なぜ私が疑問に思う:

Traceback (most recent call last): 
    File "/Users/osopova/Documents/00_KSU_Masters/01_2016_Spring/Twitter_project/mda_project_1/step_4.py", line 60, in <module> 
    predict_Y = classifiers[i].predict(test_X) 
    File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 65, in predict 
    jll = self._joint_log_likelihood(X) 
    File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 672, in _joint_log_likelihood 
    return (safe_sparse_dot(X, self.feature_log_prob_.T) 
    File "/Library/Python/2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot 
    return fast_dot(a, b) 
ValueError: matrices are not aligned 

答えて

2

あなたが機能を命名する任意の参照を渡さないので、それは目に見えない機能を処理しません。あなたはなぜ1つのケースに1200のフィーチャーを、別のフィーチャーに1000のフィーチャーを持っていますおそらく、テスト環境にはトレーニングに含まれていないオブジェクトが存在していた可能性があります。しかし、Naive Bayesは1000のうちどれが失われているのか把握していますか?この実装(配列を入力と仮定した場合のみ可能です)では、トレーニングセット内の列に対応しないすべての列を削除し、有効な場所にゼロの列を追加することが義務です他の方法で、そして最も重要なのは、あるセットの "i番目の"カラムが、同じワード/オブジェクトの出現を同じにしていることを確認することです。したがって、あなたのケースでは実際に使用できるカラムはわずか500個です。Naive Bayesはこれらを見つける方法についての情報はありません。テストシナリオでは、列車で使用されたのと同じ1000の機能を提供する必要があります。したがって、列車では見られない700列を削除し、有効な場所に500列のゼロを追加することを意味します。

特に、scikit-learnは、多くのデータ前処理ユーティリティを提供します(これはCountVectorizerなど)。

関連する問題