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より若干性能が良く、特に非ゼロ特徴量が多数ある場合に強い。