2.6 アルゴリズム3 ナイーブベイズクラス分類器

  • 線形モデルよりさらに高速に訓練ができる。
    • 汎化性能は劣る場合がある。
  • scikit-learnに実装されているナイーブベイズクラス分類器は3種。
    • GaussianNB: 任意の連続値データに適用できる。
    • BernoulliNB: 2値データを仮定している。
    • MultinomialNB: カウントデータを仮定している。
      • カウントデータ…文章中の単語の出現回数など、個々の特徴量の値が何かのカウントであるもの。
  • BernoulliNBは特徴量毎に非ゼロの場合をカウントする。
import numpy as np
X = np.array([[0, 1, 0, 1],
              [1, 0, 1, 1],
              [0, 0, 0, 1],
              [1, 0, 1, 0]])
y = np.array([0, 1, 0, 1])
counts = {}
for label in np.unique(y):
  counts[label] = X[y == label].sum(axis=0)
print("非ゼロの特徴量のカウント:\n{}".format(counts))
 ## 非ゼロの特徴量のカウント:
 ## {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}
  • MultinominalNBはクラスごとの個々の特徴量の平均値を考慮に入れる。
  • GaussianNBは平均値に加えて標準偏差も考慮する。
  • 予測式の形は線形モデルと同じになるが、coef_\(w\)とは若干意味が異なる。

2.6.1 利点、欠点、パラメータ

  • MultinomialNBとBernoulliNBは唯一のパラメータとしてalphaを持つ。
  • alphaを大きくするとモデルの複雑さが減るが、alphaを変化させてもアルゴリズムの性能はそれほど変化しない。しかし、場合によっては精度を多少上げることができる。
  • GaussianNBは高次元データに対して用いる場合が多い。
  • MultinomialNBはBernoulliNBより若干性能が良く、特に非ゼロ特徴量が多数ある場合に強い。