Python で scikit-learn を使用して、特定の顧客の性別を予測する分類アルゴリズムを開発しています。とりわけ、単純ベイズ分類器を使用したいのですが、私の問題は、カテゴリ データ (例: 「オンライン登録済み」、「メール通知を受け入れる」など) と連続データ (例: 「年齢」、「長さ」) が混在していることです。メンバーシップ」など)。私は以前にscikitをあまり使用したことがありませんが、ガウス単純ベイズは連続データに適しており、ベルヌーイ単純ベイズはカテゴリデータに使用できると思います。ただし、モデルにカテゴリデータと連続データの両方が必要なため、これを処理する方法がよくわかりません。どんなアイデアでも大歓迎です!
6 に答える
少なくとも2つのオプションがあります。
各連続変数のパーセンタイルを計算し、パーセンタイルをビンの境界として使用して連続変数をビニングすることにより、すべてのデータをカテゴリ表現に変換します。たとえば、人の身長については、「非常に小さい」、「小さい」、「通常」、「大きい」、「非常に大きい」のビンを作成し、各ビンにトレーニングセットの人口の約20%が含まれるようにします。scikit-learnでこれを自動的に実行するユーティリティはありませんが、自分で実行するのはそれほど複雑ではありません。次に、データのこれらのカテゴリ表現に一意の多項NBを適合させます。
データの連続部分にガウスNBモデルを、カテゴリ部分に多項NBモデルを独立して適合させます。次に、クラス割り当て確率(
predict_proba
メソッドを使用)を新しい機能として取得することにより、すべてのデータセットを変換します。np.hstack((multinomial_probas, gaussian_probas))
次に、新しい機能に新しいモデル(たとえば、新しいガウスNB)を再適合させます。
簡単な答え: 乗算結果!! それは同じだ。
ベイズの定理の適用に基づくナイーブ ベイズは、特徴のすべてのペア間の独立性の「単純な」仮定を使用します。これは、特定の特徴に依存するベイズ確率を、他の特徴を保持せずに計算することを意味します。つまり、アルゴリズムは、1 つの特徴からの各確率を2 番目の機能からの確率 (分母は単なる正規化であるため、完全に無視します)。
したがって、正しい答えは次のとおりです。
- カテゴリ変数から確率を計算します。
- 連続変数から確率を計算します。
- 1 と 2 を掛けます。
次の手順が必要です。
- カテゴリ変数から確率を計算します (からの
predict_proba
メソッドを使用BernoulliNB
) - 連続変数から確率を計算します (からの
predict_proba
メソッドを使用GaussianNB
) - 1 と 2 を掛けます。AND
- 事前確率で割る(同じなのでfrom
BernoulliNB
または fromのいずれか) AND THENGaussianNB
- 4. を 4 の合計 (クラス全体) で割ります。これが正規化のステップです。
データから学習したものを使用する代わりに、独自の事前確率を追加する方法を理解するのは簡単です。