web-dev-qa-db-ja.com

多項ナイーブベイズパラメータのアルファ設定? scikit-learn

単純ベイズ分類を行うときにアルファのパラメータを設定する方法を知っている人はいますか?

例えば。最初に単語のバッグを使用して特徴行列を作成し、行列の各セルは単語の数であり、次にtf(項頻度)を使用して行列を正規化しました。

しかし、単純ベイズを使用して分類器モデルを構築するときは、多項N.Bを使用することを選択します(これは正しいと思います。ベルヌーイとガウス分布ではありません)。デフォルトのアルファ設定は1.0です(ドキュメントには、ラプラススムージングであると記載されていますが、何であるかわかりません)。

結果は本当に悪いです。たとえば、ポジティブクラス(ターゲットクラス)を見つけたのは21%だけです。しかし、alpha = 0.0001(ランダムに選択)を設定すると、結果は95%の再現率スコアを取得します。

その上、多項NB をチェックしました。これは、アルファの問題によるものだと思います。単語の数を特徴として使用した場合、アルファ= 1は結果に影響を与えないためです。 tfは0-1の間にあるため、alpha = 1はこの式の結果に実際に影響します。

また、tfを使用せず、単語の袋の数のみを使用した結果をテストしました。結果も95%なので、アルファ値の設定方法を知っている人はいますか?特徴行列としてtfを使用する必要があるためです。

ありがとう。

9
HAO CHEN

多項ナイーブベイズでは、alphaパラメーターは hyperparameter として知られているものです。つまり、モデル自体の形式を制御するパラメータです。ほとんどの場合、ハイパーパラメータの最適値を決定する最良の方法は、データに対するモデルのパフォーマンスを評価するために 相互検証 を使用して、可能なパラメータ値に対して グリッド検索 を使用することです。各値で。 scikit-learnでこれを行う方法の詳細については、上記のリンクをお読みください。

9
jakevdp

なぜアルファが使用されるのですか?

NB P(Y = 1 | W)またはP(Y = 0 | W)(二項分類を考慮)でクエリポイントを分類する場合、ここでWは単語のベクトルW = [w1、w2、 w3 .... wd] d =機能の数

だから、トレーニング時にこれらすべての確率を見つけるために
P(w1 | Y = 1)* P(w2 | Y = 1)* ..... P(wd | Y = 1))* P(Y = 1)

Y = 0についても上記と同じことを行う必要があります。

ナイーブベイズの公式については、これを参照してください( https://en.wikipedia.org/wiki/Naive_Bayes_classifier

テスト時に、トレインセットに存在しないWordに遭遇した場合、クラスに存在する確率はゼロであると考えてください。これにより、確率全体が0になり、これは良くありません。

トレーニングセットにW * Wordが存在しないことを考慮してください

P(W*|Y=1) = P(W*,Y=1)/P(Y=1)

_      = Number of training points such that w* Word present and Y=1 / Number of training point where Y=1
      = 0/Number of training point where Y=1
_

したがって、この問題を取り除くために、ラプラス平滑化を行います。分子と分母のフィールドにアルファを追加します。

_     = 0 + alpha / Number of training point where Y=1 + (Number of class labels in classifier * alpha)
_
  1. それは現実の世界で起こります。上記の式(P(W|Y=1) = P(W、Y = 1)/ P(Y = 1))のように、いくつかの単語は非常に少ない回数で何度も発生するか、異なる方法で考えます。分子フィールドと分母フィールドが小さい場合は、外れ値やノイズの影響を受けやすいことを意味します。ここでもアルファは、アルファが増加するにつれて尤度確率を一様分布に移動するのに役立ちます。

したがって、アルファはハイパーパラメータであり、グリッド検索(jakevdpで説明)やランダム検索などの手法を使用して調整する必要があります。 ( https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624

0
Gopu_Tunas