71

Naive Bayes Classifier を使用して、数千のドキュメントを 30 の異なるカテゴリに分類しています。Naive Bayes Classifier を実装し、いくつかの機能選択 (主に不要な単語のフィルタリング) を使用して、約 30% のテスト精度と 45% のトレーニング精度を得ました。これはランダムよりもはるかに優れていますが、より良くしたいと考えています。

私はNBでAdaBoostを実装しようとしましたが、かなり良い結果が得られるようには見えません. 精度が向上する可能性のある NB の拡張機能を他に知っていますか?

4

6 に答える 6

104

私の経験では、適切にトレーニングされた Naive Bayes 分類器は、通常、驚くほど正確です (そしてトレーニングが非常に高速で、私が今まで使用したどの分類器ビルダーよりも著しく高速です)。

したがって、分類子の予測を改善したい場合は、いくつかの場所を調べることができます。

  • 分類子を調整します(分類子の調整可能なパラメーターを調整します)。

  • ある種の分類器の組み合わせ手法(アンサンブル、ブースティング、バギングなど) を適用します。またはあなたができる

  • 分類器に渡されたデータを見てください。データを追加するか、基本的な解析を改善するか、データから選択した機能を絞り込みます。

w/r/t ナイーブ ベイジアン分類器では、パラメーターの調整は制限されています。データ、つまり前処理の品質と機能の選択に集中することをお勧めします。

I. データ解析 (前処理)

私はあなたの生データが各データポイントの生テキストの文字列のようなものであると仮定します.一連の処理ステップにより、各オフセットが1つの機能に対応するように、各文字列を各データポイントの構造化ベクトル(1D配列)に変換します(通常は単語) であり、そのオフセットの値は周波数に対応します。

  • ステミング: 手動またはステミング ライブラリを使用して? 人気のあるオープンソースのものは、Porter、Lancaster、および Snowball です。したがって、たとえば、特定のデータ ポイントにProgrammer、program、progamming、programmedという用語がある場合、ステマーはそれらを 1 つのステム (おそらくprogram ) に縮小するため、そのデータ ポイントの用語ベクトルの値は 4 になります。これはおそらくあなたが望むものです。

  • 同義語の検索: ステミングと同じ考え方 - 関連する単語を 1 つの単語に折りたたみます。そのため、同義語ファインダーは、開発者、プログラマー、コーダー、およびソフトウェア エンジニアを特定し、それらを 1 つの用語にまとめることができます。

  • ニュートラル ワード: クラス間で同様の頻度を持つ単語は、特徴がよくありません


Ⅱ.機能選択

NBC の典型的な使用例を考えてみましょう。スパムのフィルタリング。どのように失敗するかをすぐに確認でき、それを改善する方法もすぐに確認できます。たとえば、平均以上のスパム フィルターには、すべて大文字の単語の頻度、タイトルの単語の頻度、タイトルの感嘆符の出現など、微妙な特徴があります。さらに、最良の特徴は多くの場合、単一の単語ではなく、単語のペアやより大きな単語グループなどです。

III. 特定の分類子の最適化

30 クラスの代わりに「1 対多」方式を使用します。つまり、2 つのクラスの分類子 (クラス A と「その他すべて」) から始めて、「その他すべて」のクラスの結果が に返されます。クラス B と「その他すべて」に分類するためのアルゴリズムなど。

フィッシャー法(おそらく単純ベイズ分類器を最適化する最も一般的な方法です。) 私にとって、フィッシャーは入力確率の正規化(より正確には標準化) と考えられます。NBC は特徴確率を使用して「ドキュメント全体」の確率を構築します。 . フィッシャー法は、ドキュメントの機能のカテゴリの確率を計算し、これらの機能の確率を組み合わせて、その組み合わせた確率をランダムな機能セットの確率と比較します。

于 2010-08-13T20:55:25.670 に答える
6

このようにSGDClassifierを使用し、正則化の強度に関して調整することをお勧めします。

また、 TFIFVectorizerのパラメーターを調整して、使用している TFIDF の式を調整してみてください。

  • 私は通常、テキスト分類の問題について、SVM または Logistic Regressioinをトレーニングした場合、1 対すべてが NB よりも優れていることを確認します。スタンフォードの人々による長い文書に関するこの素晴らしい記事でわかるように、SVM は NB よりも優れています。SVMとNBを組み合わせた論文(NBSVM)のコードはこちら

  • 次に、TFIDF 式を調整します (例: サブリニア tf、smooth_idf)。

  • l2 または l1 正規化 (Tfidfvectorization のデフォルト) を使用してサンプルを正規化します。これは、異なるドキュメントの長さを補正するためです。

  • 多層パーセプトロンは、多くのテキスト分類問題に固有の非線形性が導入されるため、通常、NB や SVM よりも良い結果が得られます。Theano/Lasagne を使用して高度な並列処理を実装しました。これは使いやすく、ここからダウンロードできます。

  • l1/l2/elasticnet の正則化を調整してみてください。これは、SGDClassifier/SVM/ロジスティック回帰に大きな違いをもたらします。

  • tfidfvectorizer で構成可能なn-gramを使用してみてください。

  • ドキュメントに構造がある場合 (例:タイトルがある場合)、パーツごとに異なる機能を使用することを検討してください。たとえば、ドキュメントのタイトルに word1 が含まれている場合は、ドキュメントに title_word1 を追加します。

  • ドキュメントの長さを特徴として使用することを検討してください(単語数や文字数など)。

  • ドキュメントに関するメタ情報(作成時間、作成者名、ドキュメントの URL など) の使用を検討してください。

  • 最近、 FacebookはFastText 分類コードを公開しました。これは、多くのタスクで非常にうまく機能します。ぜひ試してみてください。

于 2016-11-24T02:31:43.603 に答える
0

一般的な場合の単純ベイズ分類器を改善

  1. 確率の対数を入力機能として取得します

確率を乗算して確率を計算すると、結果が非​​常に小さくなるため、確率空間を対数確率空間に変更します。ログ確率機能に変更すると、アンダーランの問題に取り組むことができます。 予測 y の式

  1. 相関する機能を削除します。

Naive Byes は、機能間に相関関係がある場合に独立性の仮定に基づいて機能します。これは、1 つの機能が他の機能に依存することを意味し、仮定が失敗することを意味します。相関関係の詳細については、こちらを参照してください

  1. 膨大なデータではなく、十分なデータで作業する

単純ベイズはロジスティック回帰よりも必要なデータが少なくて済みます。相互作用ではなく、出力変数と分離した各属性の確率的関係を理解するためのデータのみが必要だからです。

  1. ゼロ周波数エラーの確認

テスト データ セットにゼロ周波数の問題がある場合は、平滑化手法「ラプラス補正」を適用して、テスト データ セットのクラスを予測します。

これ以上は以下の記事で詳しく説明されていますので、以下の記事を参照してください。

  1. machinelearningmastery サイトの投稿
  2. Analyticvidhya サイトの投稿
于 2020-09-29T17:53:04.193 に答える
-2

それらの間の相関が少ない機能を選択します。一度にさまざまな機能の組み合わせを使用してみてください。

于 2016-11-11T07:26:22.747 に答える
-2

n のサイズを小さく保つことで、NB を作成して高精度の結果を得ることができます。そしてコアでは、nサイズが大きくなるにつれて精度が低下し、

于 2014-01-24T17:49:31.077 に答える