ScikitLearn-ナイーブベイズによる分類

ナイーブベイズ法は、ベイズの定理を適用することに基づく教師あり学習アルゴリズムのセットであり、すべての予測子が互いに独立している、つまり、クラス内の特徴の存在が同じ内の他の特徴の存在から独立しているという強い仮定があります。クラス。これはナイーブな仮定であるため、これらのメソッドはナイーブベイズメソッドと呼ばれます。

ベイズの定理は、クラスの事後確率、つまりラベルといくつかの観測された特徴の確率を見つけるために、次の関係を示しています。$ P \ left(\ begin {array} {c} Y \ arrowvert features \ end {array} \ right )$。

$$ P \ left(\ begin {array} {c} Y \ arrowvert features \ end {array} \ right)= \ left(\ frac {P \ lgroup Y \ rgroup P \ left(\ begin {array} {c } features \ arrowvert Y \ end {array} \ right)} {P \ left(\ begin {array} {c} features \ end {array} \ right)} \ right)$$

ここで、$ P \ left(\ begin {array} {c} Y \ arrowvert features \ end {array} \ right)$はクラスの事後確率です。

$ P \ left(\ begin {array} {c} Y \ end {array} \ right)$は、クラスの事前確率です。

$ P \ left(\ begin {array} {c} features \ arrowvert Y \ end {array} \ right)$は、クラスが与えられた予測子の確率である尤度です。

$ P \ left(\ begin {array} {c} features \ end {array} \ right)$は、予測子の事前確率です。

Scikit-learnは、さまざまな単純ベイズ分類器モデル、つまりガウス、多項、補集合、ベルヌーイを提供します。それらはすべて、主に$ P \ left(\ begin {array} {c} features \ arrowvert Y \ end {array} \ right)$の分布、つまりクラスが与えられた予測子の確率に関して行う仮定によって異なります。

シニア番号 モデルと説明
1 ガウスナイーブベイズ

GaussianNaïveBayes分類器は、各ラベルのデータが単純なガウス分布から抽出されていることを前提としています。

2 多項ナイーブベイズ

特徴が単純な多項分布から引き出されることを前提としています。

3 ベルヌーイナイーブベイズ

このモデルの前提は、機能が本質的にバイナリ(0と1)であるということです。BernoulliNaïveBayes分類のアプリケーションは、「bagofwords」モデルを使用したテキスト分類です。

4 ナイーブベイズを補完する

これは、多項ベイズ分類器によって行われた厳しい仮定を修正するために設計されました。この種のNB分類器は、不均衡なデータセットに適しています

単純ベイズ分類器の構築

Scikit-learnデータセットにナイーブベイズ分類器を適用することもできます。以下の例では、GaussianNBを適用し、Scikit-leranのbreast_cancerデータセットをフィッティングしています。

Import Sklearn
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
   print(label_names)
   print(labels[0])
   print(feature_names[0])
   print(features[0])
train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)
from sklearn.naive_bayes import GaussianNB
GNBclf = GaussianNB()
model = GNBclf.fit(train, train_labels)
preds = GNBclf.predict(test)
print(preds)

出力

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1
   1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 
   1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 
   1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 
   1 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 
   0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 
   1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 
   1 1 1 1 0 1 0 0 1 1 0 1
]

上記の出力は、基本的に悪性および良性の腫瘍クラスからの予測値である一連の0と1で構成されています。