[matplotlib animation] 97. k近傍法によるクラス分類で近傍点数に応じて変化する決定境界を表示する

matplotlib

はじめに

sklearnのneighbors.KNeighborsClassifierによるk近傍法クラス分類で、sklearn.datasets.make_blobsで作成したデータに対してクラス分類を行い、決定境界を表示する。そして、この決定境界が近傍点として取り扱うデータ数を変化させた時にどのように変化するかをmatplotlibのFuncAnimationで表示する方法について説明する。

解説

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

バージョン

データの生成

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

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

random_state=24とすることで上下に分離したデータ群を作成した。データを表示すると以下のようになる。

決定境界の表示

細かい間隔の格子状データをテストデータとして分類を行い、その分類結果を塗りつぶし等高線で表示することで決定境界を表示する。詳細は下記で解説した。

[scikit-learn] 10. k近傍法によるクラス分類で決定境界を表示する(KNeighborsClassifier)
sklearnのneighbors.KNeighborsClassifierでk近傍法によるクラス分類をすることができる。ここではsklearn.datasets.make_blobsで作成したデータに対してクラス分類を行い、決定境界を表示する方法について説明する。

近傍データ数を1とした時の結果を図示すると以下のようになる。

近傍点数を変化させて分類データの収集

最初にから(empty)のリストZsを作成して、k=1から20まで変化させてクラス分類した結果をZsに追加していく。

アニメーションの設定

最初に表示する図の設定

ax.contourf()をcontfとしておく。

アニメーション関数の設定

ax.contourf()はcontf.collectionsにしてremove()で消すことで古い塗りつぶし等高線を消すことができる。Z はZsのリストから取得して、等高線用に形状をreshapeで2次元に変換する。そのZでcontourfを描写する。これを繰り返すことでアニメーションとする。

アニメーションの表示

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

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

参考

Nearest Neighbors Classification — scikit-learn 0.24.1 documentation
sklearn.neighbors.KNeighborsClassifier — scikit-learn 0.24.1 documentation
Using matplotlib.animate to animate a contour plot in python
I have a 3D array of data (2 spatial dimensions and 1 time dimension) and I'm trying to produce an animated contour plot using matplotlib.animate. I'm using th...

コメント