[scikit-learn] 9. k近傍法によるクラス分類(KNeighborsClassifier)

matplotlib

はじめに

sklearnのneighbors.KNeighborsClassifierでk近傍法によるクラス分類をすることができる。ここではsklearn.datasets.make_blobsで作成したデータに対してクラス分類を行った例について説明する。

解説

モジュールのインポートなど

バージョン

データの生成

make_blobsによりデータを作成する。make_blobsについては下記記事で解説した。

[scikit-learn] 1. make_blobsによる分類用データの生成
sklearnのdatasets.make_blobsでクラスタリング用のデータを作成することができる。データポイントはガウス分布に従い生成する。ここでは各種パラメータが生成データに及ぼす影響について説明する。

cluster_std=.5とし、ばらつきの小さいデータ群を作成した。

訓練用、テスト用データの分離

train_test_splitにより、データを訓練用とテスト用に分ける。訓練用をX_train, Y_trainとし、テスト用をX_test, Y_testとする。100こあるデータはtrain:test=75:25の比で分離される。

データの表示

訓練用データの表示

テスト用データの表示

k近傍法の適用

n_neighborsは近傍点として扱うデータ数の数を指定する。
neighbors.KNeighborsClassifierで分類器を作成し、clf.fit(X_train, Y_train)により訓練用データを分類器に学習させる。
clf.predict(X_test)で分類器による予測をテストデータに対して行う。

予測の正解率は1.0なので全て正しく分類されていることになる。

結果の表示

訓練用データの緑の点の近くにテスト用のオレンジのデータがあり、赤の訓練用データのところに紫のテスト用データがあることが確認できる。

データのばらつきが大きい場合

データの作成

cluster_std=2.0としてばらつきの大きいデータを作成する。訓練用データをテスト用データは以下のようになる。

k近傍法の適用

近傍点はさっきと同じ3として、分類した。
分類の結果をプロットすると以下のようになる。

不正解なデータ点の確認

scoreは0.92なので間違っているデータ数は2ことなる。

違うところのインデックスはnp.whereでわかる。

正解データを予測データの右隣にプロットすると下記のようになる。予測が元データと異なる部分が2箇所あることがわかる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

sklearn.neighbors.KNeighborsClassifier — scikit-learn 0.24.2 documentation
sklearn.model_selection.train_test_split — scikit-learn 0.24.2 documentation

コメント