これは、MLとPythonでの文書分類の私の最初の試みです。新しい文書を分類する - ランダムフォレスト、単語の束
私は最初のマネーロンダリングに関連する5000件の記事を抽出し、その後、私はマネーロンダリングに関連していない500件の記事を抽出しても、私は連結DF-
DFSのいずれか「マネーロンダリング」や
- 「その他」のラベルを付け、私は(句読点とストップワード、下部ケースなどを取り除く)
を前処理しないし、次に以下のように言葉原理の袋に基づくモデルを養う両方:
vectorizer = CountVectorizer(analyzer = "word", tokenizer = None, preprocessor = None, stop_words = None, max_features = 5000) text_features = vectorizer.fit_transform(full_df["processed full text"]) text_features = text_features.toarray() labels = np.array(full_df['category']) X_train, X_test, y_train, y_test = train_test_split(text_features, labels, test_size=0.33) forest = RandomForestClassifier(n_estimators = 100) forest = forest.fit(X_train, y_train) y_pred = forest.predict(X_test) accuracy_score(y_pred=y_pred, y_true=y_test)
それは(私に99%をあまりにも高い精度を与えていても)今まで正常に動作します。しかし、私は完全に新しいテキスト文書でこれをテストしたいと思っています。私はそれをベクトルとforest.predict(test)
をすれば、それは明らかに言う:
ValueError: Number of features of the model must match the input. Model n_features is 5000 and input n_features is 45
私は、これは全く新しい記事を分類することができるように克服するかどうかはわかりません。
ベクトル化関数は、テキストのコーパスを(多次元の)空間にマッピングします。あなたはチェックするべきですが、私の視点では、マッピング関数はコーパス依存であるため、テキストの最初のコーパスではない新しいテキストを追加すると、以前のマッピングはこの新しいテキスト。これがあなたのケースでは、まったく新しいテキストで、コードが実行されない理由です。あなたの質問を解決するためのML /統計的方法がありますが、プログラミングの質問よりも統計的に難しいと思います。 – probaPerception
あなたのベクタライザを再フィットしているようです。訓練の段階では、ベクタライザとクラシファイアを合わせることを忘れないでください。予測ステージでは、ベクトル化器で変換を呼び出し、分類器で予測します。 – bogs
@probaPerceptionあなたが正しいです、新しい記事がモデルに収まるはずでした。それ以外の場合は意味がありません。 – pawelty