logo

ナイーブ ベイズ分類器アルゴリズム

  • ナイーブ ベイズ アルゴリズムは教師あり学習アルゴリズムであり、以下に基づいています。 ベイズの定理 分類問題を解決するために使用されます。
  • 主に使用されるのは、 テキスト分類 これには高次元のトレーニング データセットが含まれます。
  • Naïve Bayes Classifier は、迅速な予測を行うことができる高速な機械学習モデルの構築に役立つ、シンプルで最も効果的な分類アルゴリズムの 1 つです。
  • これは確率的分類器であり、オブジェクトの確率に基づいて予測することを意味します。。
  • ナイーブ ベイズ アルゴリズムの一般的な例をいくつか示します。 スパムフィルタリング、感情分析、記事の分類

なぜナイーブベイズと呼ばれるのでしょうか?

Naïve Bayes アルゴリズムは、Naïve と Bayes という 2 つの単語で構成され、次のように説明できます。

    ナイーブ: 特定の特徴の発生が他の特徴の発生から独立していると仮定するため、ナイーブと呼ばれます。たとえば、色、形、味に基づいて果物を識別する場合、赤くて球形で甘い果物はリンゴであると認識されます。したがって、それぞれの特徴は、互いに依存することなく、個別にリンゴであることの識別に寄与します。ベイズ: ベイズの定理の原理に依存するため、ベイズと呼ばれます。

ベイズの定理:

  • ベイズの定理は次のようにも知られています。 ベイズの法則 または ベイズの法則 、事前知識による仮説の確率を決定するために使用されます。それは条件付き確率に依存します。
  • ベイズの定理の公式は次のように与えられます。
ナイーブ ベイズ分類器アルゴリズム

どこ、

P(A|B) は事後確率です : 観測された事象 B に対する仮説 A の確率。

P(B|A) は尤度確率です : 仮説の確率が正しいと仮定した場合の証拠の確率。

P(A) は事前確率です : 証拠を観察する前の仮説の確率。

オンクリックJavaScript

P(B) は限界確率です : 証拠の確率。

ナイーブベイズの分類器の働き:

Naïve Bayes の分類器の仕組みは、以下の例を参考にすると理解できます。

次のデータセットがあるとします。 気象条件 および対応するターゲット変数 ' 遊ぶ '。したがって、このデータセットを使用して、気象条件に応じて特定の日にプレーするかどうかを決定する必要があります。したがって、この問題を解決するには、次の手順に従う必要があります。

  1. 指定されたデータセットを頻度表に変換します。
  2. 指定された特徴の確率を見つけて尤度テーブルを生成します。
  3. ここで、ベイズの定理を使用して事後確率を計算します。

問題 : 天気が晴れたら、プレーヤーはプレーするべきですか?

解決 : これを解決するには、まず以下のデータセットを検討します。

見通し 遊ぶ
0 雨の はい
1 晴れ はい
2 曇り はい
3 曇り はい
4 晴れ いいえ
5 雨の はい
6 晴れ はい
7 曇り はい
8 雨の いいえ
9 晴れ いいえ
10 晴れ はい
十一 雨の いいえ
12 曇り はい
13 曇り はい

気象条件の頻度表:

天気 はい いいえ
曇り 5 0
雨の 2 2
晴れ 3 2
合計 10 5

尤度テーブルの気象条件:

天気 いいえ はい
曇り 0 5 5/14= 0.35
雨の 2 2 4/14=0.29
晴れ 2 3 5/14=0.35
全て 4/14=0.29 10/14=0.71

ベイズの定理を適用すると:

P(はい|晴れ)= P(晴れ|はい)*P(はい)/P(晴れ)

P(晴れ|はい)= 3/10= 0.3

P(晴れ)= 0.35

P(はい)=0.71

したがって、P(はい|晴れ) = 0.3*0.71/0.35= 0.60

P(いいえ|晴れ)= P(晴れ|いいえ)*P(いいえ)/P(晴れ)

P(晴れ|NO)= 2/4=0.5

P(いいえ)= 0.29

P(晴れ)= 0.35

したがって、P(いいえ|晴れ)= 0.5*0.29/0.35 = 0.41

上記の計算からわかるように、 P(はい|晴れ)>P(いいえ|晴れ)

したがって、晴れた日には、プレーヤーはゲームをプレイできます。

ナイーブ ベイズ分類器の利点:

  • Naïve Bayes は、データセットのクラスを予測するための高速かつ簡単な ML アルゴリズムの 1 つです。
  • これは、バイナリ分類とマルチクラス分類に使用できます。
  • 他のアルゴリズムと比較して、マルチクラス予測で優れたパフォーマンスを発揮します。
  • 最も人気のある選択肢です テキスト分類の問題

ナイーブ ベイズ分類器の欠点:

  • Naive Bayes は、すべての特徴が独立しているか無関係であると想定しているため、特徴間の関係を学習できません。

ナイーブ ベイズ分類器のアプリケーション:

  • のために使用されます 信用スコアリング
  • で使用されています 医療データの分類
  • で使用できます リアルタイムの予測 なぜなら、Naïve Bayes Classifierは熱心に学習するからです。
  • などのテキスト分類に使用されます。 スパムフィルタリング そして 感情分析

単純ベイズ モデルの種類:

単純ベイズ モデルには次の 3 種類があります。

    ガウス: ガウス モデルは、特徴が正規分布に従うことを前提としています。これは、予測子が離散値ではなく連続値を取る場合、モデルはこれらの値がガウス分布からサンプリングされたものであると想定することを意味します。多項式: 多項ナイーブ ベイズ分類器は、データが多項分布している場合に使用されます。これは主に文書の分類問題に使用され、特定の文書がスポーツ、政治、教育などのどのカテゴリに属する​​かを意味します。
    分類器は、予測子の単語の頻度を使用します。ベルヌーイ: ベルヌーイ分類器は多項分類器と同様に機能しますが、予測子変数は独立したブール変数です。特定の単語が文書内に存在するかどうかなど。このモデルは文書分類タスクでも有名です。

Naïve Bayes アルゴリズムの Python 実装:

次に、Python を使用して単純ベイズ アルゴリズムを実装します。したがって、このために、「」を使用します ユーザーデータ ' データセット 、これは他の分類モデルで使用しました。したがって、Naive Bayes モデルを他のモデルと簡単に比較できます。

実装する手順:

  • データの前処理ステップ
  • Naive Bayes をトレーニング セットに当てはめる
  • テスト結果を予測する
  • 結果のテスト精度(混同行列の作成)
  • テストセットの結果を視覚化します。

1) データの前処理ステップ:

このステップでは、コード内でデータを効率的に使用できるように、データを前処理/準備します。これは、データ前処理で行ったのと似ています。このコードを以下に示します。

 Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) 

上記のコードでは、「」を使用してデータセットをプログラムにロードしました。 データセット = pd.read_csv('user_data.csv') 。読み込まれたデータセットはトレーニング セットとテスト セットに分割され、特徴変数がスケーリングされました。

データセットの出力は次のようになります。

ナイーブ ベイズ分類器アルゴリズム 1

2) Naive Bayes をトレーニング セットに当てはめる:

前処理ステップが完了したら、Naive Bayes モデルをトレーニング セットに適合させます。以下はそのコードです。

 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

上記のコードでは、 ガウスNB分類器 それをトレーニング データセットに適合させます。要件に応じて他の分類子を使用することもできます。

出力:

 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) テストセットの結果の予測:

次に、テスト セットの結果を予測します。このために、新しい予測変数を作成します。 y_pred 、予測関数を使用して予測を行います。

 # Predicting the Test set results y_pred = classifier.predict(x_test) 

出力:

ナイーブ ベイズ分類器アルゴリズム 2

上記の出力は、予測ベクトルの結果を示しています。 y_pred そして実数ベクトル y_test 。一部の予測が実際の値と異なり、不正確な予測であることがわかります。

4) 混同行列の作成:

次に、混同行列を使用して単純ベイズ分類器の精度を確認します。以下はそのコードです。

 # Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) 

出力:

ナイーブ ベイズ分類器アルゴリズム 3

上記の混同行列の出力でわかるように、7+3= 10 個の間違った予測と、65+25=90 個の正しい予測があります。

5) トレーニング セットの結果を視覚化します。

次に、Naive Bayes Classifier を使用してトレーニング セットの結果を視覚化します。以下はそのコードです。

 # Visualising the Training set results from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

出力:

ナイーブ ベイズ分類器アルゴリズム 4

上記の出力では、Naive Bayes 分類器が細かい境界でデータ ポイントを分離していることがわかります。これは私たちが使用したガウス曲線です ガウスNB コード内の分類子。

6) テストセットの結果を視覚化します。

 # Visualising the Test set results from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

出力:

ナイーブ ベイズ分類器アルゴリズム 5

上記の出力は、テスト セット データの最終出力です。ご覧のとおり、分類器は「購入済み」変数と「未購入」変数を分割するガウス曲線を作成しました。混同行列で計算したいくつかの間違った予測があります。しかし、それでもかなり優れた分類器です。