web-dev-qa-db-ja.com

scikit-learnを使用した単純ベイズ分類器でのカテゴリデータと連続データの混合

Python=でscikit-learnを使用して、特定の顧客の性別を予測する分類アルゴリズムを開発しています。とりわけ、単純ベイズ分類器を使用したいのですが、私の問題は、カテゴリデータ(例:「オンラインで登録」、「電子メール通知を受け入れる」など)と継続データ(例:「年齢」、「メンバーシップの長さ」など)の混合。以前はscikitをあまり使用していませんでしたが、 Gaussian Naive Bayesは連続データに適しており、ベルヌーイNaive Bayesはカテゴリカルデータに使用できます。ただし、モデルにbothカテゴリカルデータと連続データを入れたいので、方法がわかりませんこれを処理するために。どんなアイデアでも大歓迎です!

49
user1499144

少なくとも2つのオプションがあります。

  • 各連続変数のパーセンタイルを計算し、パーセンタイルをビン境界として使用して連続変数をビニングすることにより、すべてのデータをカテゴリ表現に変換します。たとえば、人の身長の場合、「非常に小さい」、「小さい」、「通常」、「大きい」、「非常に大きい」のビンを作成し、各ビンにトレーニングセットの母集団の約20%が含まれるようにします。 scikit-learnでこれを自動的に実行するユーティリティはありませんが、複雑すぎて自分で行うことはできません。次に、固有の多項式NBをデータのカテゴリカル表現に当てはめます。

  • データの連続部分にガウシアンNBモデルとカテゴリカル部分に多項式NBモデルを独立して適合させます。次に、クラスを取得することによりすべてのデータセットを変換します。新しい機能としての割り当て確率(_predict_proba_メソッドを使用):np.hstack((multinomial_probas, gaussian_probas))そして、新しい機能に新しいモデル(たとえば、新しいガウスNB)を再フィットします。

45
ogrisel

簡単な答え:結果を掛ける!!それは同じだ。

特徴のすべてのペア間の独立性の「単純な」仮定を使用したベイズの定理の適用に基づくナイーブベイズ-つまり、他の特徴を保持せずに特定の特徴に依存するベイズ確率を計算します-つまり、アルゴリズムは1つの特徴の各確率を乗算します2番目の特徴からの確率(そして、私たちは分母を完全に無視します-これは単なる正規化関数なので)。

だから正しい答えは:

  1. カテゴリー変数から確率を計算します。
  2. 連続変数から確率を計算します。
  3. 1.と2.を掛けます。
8
Yaron