科学の箱

科学・IT・登山の話題

機械学習

irisをナイーブベイズで分類

投稿日:

ナイーブベイズの概要

ナイーブベイズは教師ありの分類アルゴリズムの一つである。

計算アルゴリズムとしてはベイズ定理を用いている。

機械学習における特徴としてはいかがある

  • 実装が簡単であり、複雑なハイパーパラメータの調整は必要ない
  • 大規模なトレーニングデータを必要としない
  • 処理が高速であり、利用するコンピュータ資源が少ない
  • 大きなデータセットについても有効である(3による)
  • 取り急ぎのベンチマークとして利用できる(1, 2, 3による)

分類問題

ナイーブベイズが得意とするのは分類問題である。分類問題とは与えられたデータをあるルールによって定義されたカテゴリに分類することである。

分類問題のもっとも簡単な例として2値分類である。これはYes-No、プラス-マイナスなど2項に分類する。

分類問題の例として最も知られているのが受け取ったメールがスパムメールであるのか普通のメールであるかの分類である。また商品に関するアンケートを取って、それが商品に対してプラスのイメージかマイナスのイメージを持つか判断するのも分類問題である。

似た概念としてクラスタリングがある。しかし機械学習では分類問題とクラスタリングは異なる。

分類問題ではモデル作成者が正解のラベルを指定する。それに対して、クラスタリングでは機械学習のプロセスを通して各データの分類ラベルを生成する。

分類問題と単回帰分析の関係

機械学習で最も簡単なアルゴリズムである単回帰分析は分類問題に使えるのだろうか。これは機械学習の初心者にとっても少々わかりにく概念である。

単回帰分析は目的変数は連続値となる。そのために得られる値は理論的には-∞ < y < ∞である。それに対して分類問題の場合もっとも単純な2値分類であれば目的変数は2値である。今簡単に0と1とする。その場合には単回帰分析の結果を0もしくは1にマッピングしなければならない。

しかしそもそも0と1には数字的な関係(大小、計算)はないので、これをマッピングすることはできない。

よって単回帰分析は分類問題に適用することはできず、別のアルゴリズムを考える必要がある。分類に関しては様々なアルゴリズムがあり、この中でもっとも簡単で分かりやすい

ナイーブベイズモデル

モデルの構築

# iris データの読み込み
from sklearn.datasets import load_iris 
iris = load_iris()
print(iris.target_names)
# ['setosa' 'versicolor' 'virginica']

sklearn.datasetsはdataに説明変数、targetに目的変数が入っている。これを使ってトレーニングデータと検証データを作成する。

X_iris = iris.data
y_iris = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris,random_state=1)

 

今回はナイーブベイズで分類する。

sklearn.naive_bayes.GaussianNB — scikit-learn 0.21.3 …

こちらを見るとわかるがハイパーパラメータがない。つまりデータをナイーブベイズ分類器に放り込めばよい。

モデルからの推定値はpredictにより取得できる。

from sklearn.naive_bayes import GaussianNB
model = GaussianNB() 
model.fit(X_train, y_train) 
y_model = model.predict(X_test)

 

検証

検証する。結果として97%の高い正解率が算出された。

from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_model)
# 0.9736842105263158

どこでずれが生じているかを知るために混同行列を生成する。

混同行列はconfusion_matrix()を利用する。

sklearn.metrics.confusion_matrix — scikit-learn 0.21.3 …

第一パラメータに正解ラベルを、第二パラメータにモデルから得られたラベルを与える。

 

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_model)
print(cm)

#
[[13  0  0]
 [ 0 15  1]
 [ 0  0  9]]

さらにconfusion_matrixを可視化する。可視化のためにはseaborn.heatmapを利用する。

seaborn.heatmap — seaborn 0.9.0 documentation

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

plt.figure(figsize = (6,4))
sns.heatmap(cm, annot=True,xticklabels=iris.target_names, yticklabels=iris.target_names )
plt.show()

 

メタ情報

inarticle



メタ情報

inarticle



-機械学習
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

irisを教師なし学習で分類ーGMM

これまでは正解ラベルがある前提、つまり教師あり学習でモデルを構築した。今回は正解ラベルがない前提でモデルを構築する。 教師なし学習としては混合ガウスモデルを利用する。 内容 データの読み込み、前処理 …

no image

UCI datasets

データ分析の勉強をするときに便利なUCI datasets https://archive.ics.uci.edu/ml/datasets.html Related posts:dataanalysi …

no image

kaggle Titanic Tutorial – 3

DecitionTreeのパラメータを調整する。 まずはMaxDepthから from sklearn.model_selection import LeaveOneOut from sklearn. …

no image

会社を変える分析の力

ユーザに関する問題 不確実性 過剰期待 事前期待 分析モデルの利用 パターン 変数の数 分析の利用 予測 判別 グループ 検知 最適化 発見 探索 データ分析の必要性 なぜ誤差がでるのか Costは …

no image

線形回帰とリッジ回帰とラッソ回帰の違い

用語 線形回帰 データから平均二乗誤差を最低にするパラメータΘを求めて、直線で回帰すること $$ y = Θ_0 + Θ_1 \times x $$ コスト関数 損失関数とも呼ばれる。実際のデータと予 …

2019年10月
« 9月   11月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

side bar top



アーカイブ

カテゴリー