【AIプログラミング】ナイーブベイズ分類器を試してみる

ナイーブベイズ分類器、今回も分類のためのアルゴリズムを試してみるよ。

今まで見ている、線形モデルやk最近傍とは違った考え方の分類だね。

今回は、ナイーブベイズ分類器について勉強をしてみました。プログラムとして、scikit-learnの公式ドキュメントを参考に、「ガウシアンナイーブベイズ分類器」というものを試してみました。

こんな人の役に立つかも

・機械学習プログラミングを勉強している人

・scikit-learnのガウシアンナイーブベイズ分類器のプログラムを試したい人

目次

ナイーブベイズ分類器について

ナイーブベイズ分類器は、ベイズの定理という確率統計の分野の理論を機械学習のアルゴリズムとして利用したものということでした。ベイズの定理は、事象が生じるもっともらしい確率を数値とするような理論です。

利点

ナイーブベイズ分類器は、非常に早く動作するらしいです。

種類

ナイーブベイズ分類器には、いくつかの種類があるようです。

GaussianNaiveBays(ガウシアン)

連続データに利用するナイーブベイズ分類器。アヤメデータの花びらの大きさのような連続したデータに適用できる分類器です。今回はこのガウシアンでアヤメデータの分類がどれくらいの精度でできるか試してみます。

MultinominalNaiveBays(マルチノミナル)

多項分布データのためのナイーブベイズ分類器とのことでした。主に、テキストデータのカウントデータなどに適用されるらしいです。

BernoulliNaiveBays(ベルヌーイ)

データが2値のものの分布で分類を行うナイーブベイズ分類器。データ自体が2値というこのなので、アヤメデータのように、「sepal length」が2.6のように連続値になるものへの分類器ではない。これも、テキストデータの分類などに利用されるとのことでした。

ナイーブベイズの使いどころ

scikit-learnの公式ドキュメントには、アルゴリズムの使いどころをわかりやすくした図があります。

scikit-learn
Choosing the right estimator Often the hardest part of solving a machine learning problem can be finding the right estimator for the job. Different estimators are better suited for differen...

これによると、やはり、テキストデータの分類に使われるらしいですね。

数学的なベースがないから、雲をつかむような理解度・・・

だんだん雲だらけになってきたね。

ガウシアンナイーブベイズでアヤメデータを分類

importから、アヤメデータの読み込みです。

#ガウシアンナイーブベイズをでirisデータの分類
from sklearn.datasets import load_iris
#ホールドアウトのimport
from sklearn.model_selection import train_test_split
#交差検証のimport
from sklearn.model_selection import cross_val_score
#ガウシアンナイーブベイズ
from sklearn.naive_bayes import GaussianNB

import numpy as np
import pandas as pd

panda_box = load_iris()

X = panda_box.data
y = panda_box.target

#訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, stratify=y)

訓練データを交差検証します。交差検証は3分割でやりました。

3Fold Cross Validation・・・と言ってみたかった。

#ガウシアンナイーブベイズの準備
cls = GaussianNB()

#3分割で交差検証を行う。
score = cross_val_score(cls, X_train, y_train, cv=3)

print("交差検証の結果")
print(score)
print("交差検証の平均")
print("{:.4f}".format(np.mean(score)))

アヤメデータの分類については、良い分類結果となっています。

交差検証の結果
[0.97368421 0.94594595 0.97297297]
交差検証の平均
0.9642
テストデータの評価
0.9474

ロジスティック回帰と比較してみたところ、テストデータ評価では、同様の正解率となりました。ちなみに、↓はロジスティック回帰でのアヤメデータの分類正解率です。

交差検証の結果
[0.97368421 0.94594595 0.94594595]
交差検証の平均
0.9552
テストデータの評価
0.9474

ここでは、過去に記事にした、「scikit-learnのアヤメデータ」と「交差検証の流れ」を利用しています。

アヤメのデータについてはこちらをご参考ください。

ぱんだクリップ
scikit-learnのアヤメのデータ、機械学習のプログラミングで重要なデータの観測 | ぱんだクリップ 機械学習プログラミングの勉強をはじめて、まずはアヤメのデータの分類をしようとしてます。アヤメのデータはscikit-learnにすでに含まれているんだね。 アヤメのデータは...

交差検証についてはこちらをご参考ください。

ぱんだクリップ
【AIプログラミング】データ分割の方法、交差検証をやってみる | ぱんだクリップ コーサケンショー??アヤメのデータの分割をしていた時は、ホールドアウトという方法を使っていたね。 今までは、ホールドアウトという方法でデータを分割していたけれど...

まとめ:確率に基づく理論で分類する

ナイーブベイズは、ベイズの定理というものを利用して分類を行うための機械学習アルゴリズムということがわかりました。アヤメのデータや、乳がんデータでは、データの値が連続値だったのですが、テキストのデータ、例えば、文脈を理解したりと言った方向への分類の場合、データ自体が、単語の出現個数などになる時があります。こう言ったデータの違いにも注意しながら、機械学習アルゴリズムを適切に選定する必要があることも学びました。

機械学習アルゴリズムには、それぞれにとても深い理論的バックボーンがあり、それを全て理解して利用するというのはかなり大変な点があります。まずはデータに対して適用してみて、その後、チューニングしていく過程でより深く勉強して理論を知っていくという方向性を取っていくのが良いと思いました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次