分類アルゴリズム-ナイーブベイズ
ナイーブベイズアルゴリズムの概要
ナイーブベイズアルゴリズムは、すべての予測子が互いに独立しているという強い仮定の下でベイズの定理を適用することに基づく分類手法です。簡単に言うと、クラス内の機能の存在は、同じクラス内の他の機能の存在とは無関係であるという前提があります。たとえば、電話は、タッチスクリーン、インターネット設備、優れたカメラなどを備えている場合、スマートと見なされる場合があります。これらの機能はすべて相互に依存していますが、電話がスマートフォンである確率には独立して寄与します。
ベイズ分類では、主な関心は事後確率、つまりいくつかの観測された特徴が与えられた場合のラベルの確率を見つけることです(|)。ベイズの定理の助けを借りて、これを次のように定量的な形で表すことができます-
$$ P(L | features)= \ frac {P(L)P(features | L)} {()} $$ここで、(|)はクラスの事後確率です。
()はクラスの事前確率です。
(|)は、クラスが与えられた予測子の確率である尤度です。
()は予測子の事前確率です。
Pythonでナイーブベイズを使用してモデルを構築する
PythonライブラリであるScikitlearnは、Pythonでナイーブベイズモデルを構築するのに役立つ最も便利なライブラリです。ScikitlearnPythonライブラリの下に次の3種類のナイーブベイズモデルがあります-
ガウスナイーブベイズ
これは、各ラベルのデータが単純なガウス分布から抽出されることを前提とした、最も単純な単純ベイズ分類器です。
多項ナイーブベイズ
もう1つの有用な単純ベイズ分類器は多項ナイーブベイズであり、特徴は単純な多項分布から抽出されると想定されています。このような種類のナイーブベイズは、離散カウントを表す機能に最も適しています。
ベルヌーイナイーブベイズ
もう1つの重要なモデルは、特徴がバイナリ(0と1)であると想定されるベルヌーイナイーブベイズです。「bagofwords」モデルを使用したテキスト分類は、ベルヌーイナイーブベイズのアプリケーションになります。
例
データセットに応じて、上記で説明したナイーブベイズモデルのいずれかを選択できます。ここでは、Pythonでガウスナイーブベイズモデルを実装しています-
次のように必要なインポートから始めます-
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
ここで、Scikit learnのmake_blobs()関数を使用することにより、次のようにガウス分布を持つ点のブロブを生成できます。
from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
次に、GaussianNBモデルを使用するには、次のようにオブジェクトをインポートして作成する必要があります。
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
今、私たちは予測をしなければなりません。これは、次のようにいくつかの新しいデータを生成した後に実行できます。
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
次に、新しいデータをプロットしてその境界を見つけます-
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);
ここで、次のコード行を使用して、1番目と2番目のラベルの事後確率を見つけることができます-
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
出力
array([[0.998, 0.002],
[1. , 0. ],
[0.987, 0.013],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[0. , 1. ],
[0.986, 0.014]]
)
長所短所
長所
以下は、ナイーブベイズ分類器を使用することのいくつかの長所です-
ナイーブベイズ分類は、実装が簡単で高速です。
ロジスティック回帰のような識別モデルよりも速く収束します。
必要なトレーニングデータが少なくて済みます。
本質的に非常にスケーラブルであるか、予測子とデータポイントの数に比例してスケーリングします。
確率的な予測を行うことができ、連続データと離散データを処理できます。
ナイーブベイズ分類アルゴリズムは、バイナリ分類問題とマルチクラス分類問題の両方に使用できます。
短所
以下は、単純ベイズ分類器を使用することのいくつかの短所です-
ナイーブベイズ分類の最も重要な短所の1つは、その強力な機能の独立性です。これは、実際には、互いに完全に独立した機能のセットを持つことはほとんど不可能だからです。
ナイーブベイズ分類のもう1つの問題は、その「ゼロ頻度」です。つまり、カテゴリ変数にカテゴリがあり、トレーニングデータセットで観察されていない場合、ナイーブベイズモデルはそれにゼロ確率を割り当て、作成できなくなります。予測。
ナイーブベイズ分類の応用
以下は、ナイーブベイズ分類の一般的なアプリケーションです。
Real-time prediction −実装が容易で計算が高速なため、リアルタイムで予測を行うために使用できます。
Multi-class prediction −ナイーブベイズ分類アルゴリズムを使用して、ターゲット変数の複数のクラスの事後確率を予測できます。
Text classification−マルチクラス予測の機能により、ナイーブベイズ分類アルゴリズムはテキスト分類に非常に適しています。そのため、スパムフィルタリングや感情分析などの問題の解決にも使用されます。
Recommendation system −協調フィルタリングなどのアルゴリズムに加えて、ナイーブベイズは、目に見えない情報をフィルタリングし、ユーザーが特定のリソースを希望するかどうかを予測するために使用できるレコメンデーションシステムを作成します。