k-NN法でアヤメ識別

  • by

k-NNで識別

シンプルでありながら協力な学習ツールであるk-NN法(k-nearest neighbor method)を機械学習に触れながら、pythonとgoogle colabを使って解説します。

Contents

  1. 識別
  2. k-NN法
  3. 実装
  4. まとめ

1. 識別について

識別とは「物事を見分ける(=分類する)こと」です。
もっと厳密に言えば、対象が有限個の既知のクラスのどれに当てはまるかを
判断すること
を指します。

例えば、猫を見た時に毛の色、長さ、サイズ、顔の形状や体型から
どの種類かあてることなどもあげられます。(Fig. 1)

Fig. 1 識別の例(猫の種類)

この識別をコンピュータにやらせよう、といった時に役に立つ方法は
たくさんありますが、k-NN法はその一つです。

2. k-NN法

k-NN法(k-Nearest Neighbor method)は未知のデータに対して、既知のデータを参照して識別をします。

具体例として一つの未知データを対象に、
AとBの2種類のクラスのどちらに分類されるのか見分けることを考えます。
対象とするデータは2つの特徴量があるとします。
この特徴量の情報をプロットするとFig. 1の左のような図が得られます。
この図のように各特徴量を各次元に落とし込んで、データをプロットした空間を特徴空間と言ったりします。
この空間内において、未知データは距離が近いデータのクラスを参照します。
参照するデータの数がkで表されており、k=1なら一番近いものだけ、k=3であれば3番目まで使います(Fig. 1)。
単純な多数決ではなく、近い順に重みを変更してより近いものの影響を大きくすることもできます。

Fig. 1 k-NN法の考え方

3. 実装

今回対象としているアヤメ(iris)のデータ(Fig. 2)ですが、
scikit learnのパッケージ内にあるものを利用します。
三種類のアヤメの、花弁と萼片、それぞれの長さと幅が記録されています。
データ数は1種類につき50個、計150個のデータがあります。

Fig. 2 アヤメのデータ分類
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix

iris = load_iris()
X = iris.data
y = iris.target

knn = KNeighborsClassifier(n_neighbors=3)
y_pred = cross_val_predict(knn, X, y, cv=10)
confusion_matrix(y, y_pred)

scikit learnはGoogle Colabにはじめから入っているので、
導入する必要ありません。

流れとしては、

  1. データ読み込み(9~11行目)
  2. k-NN法の適用(学習)(13, 14行目)
  3. 精度の表示(混同行列)(15行目)

となっております。

今回はCV法をつかってirisデータに対するk-NN法の識別精度を評価しました。
CV法(交差確認法; Cross Validation method)はデータ数が少ない場合によく用いられる評価指標です。

データをm個に分割し、(m-1)個を学習に、
残りの一つで評価するのを繰り返し、それぞれの結果を平均して精度を求めます(Fig. 3)。

Fig. 3 CV法のイメージ

今回はm=10(プログラム内14行目 cv=10)です。
したがって150個のデータを10個に分割するので、
135個のデータで学習し、15個のデータで評価、
これを10回繰り返します。

結果の表示には混同行列を用いました。
混同行列の見方はFig. 4に示します。
対角成分が大きければ大きいほど正答率が高いです。

Fig. 4 混同行列の見方

4. まとめ

今回はアヤメのデータ・セットを対象にk-NN法で識別をしました。
結果、9割超えの精度で識別することができました。
近いクラスをそのまま使うというシンプルさがありますが、
場合によっては高い精度を実現できるアルゴリズムだと思います。

おまけ
近傍点の数を変化させたときの正答率の変化(Fig. 5)

Fig. 5 アヤメ識別における近傍点数と正答率の変化

しのぶれど

バラ。

撮影時に名前を控えていなかった(愚か)ので
ネットで似ているバラを調べた。
ブルーバユーかもしれない。

というか種類が膨大すぎる。
精度高い識別器つくってほしい。

コメントを残す

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