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

matplotlib

はじめに

本記事では、scikit-learnのk近傍法(KNeighborsClassifier)を使用して、人工データに対するクラス分類と決定境界の可視化を行います。特に、k値(近傍点数)の変化に伴う決定境界の変動をmatplotlibのFuncAnimationでアニメーション表示する方法を解説します。

解説

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

バージョン

データの生成

make_blobsを使用してデータを生成します。make_blobsの詳細については下記記事で解説しています。

[scikit-learn] 1. make_blobsによる分類用データの生成
scikit-learnのmake_blobs関数を使って分類モデルのテスト用データを簡単に作成する方法を解説します。クラスタの数、特徴量の次元数、データ点の分散などのパラメータを調整して、様々な分類問題に対応したデータセットを生成できます。

random_state=24を指定することで上下に明確に分離したデータ群を生成しました。生成したデータを可視化すると、以下のような分布が得られます。

決定境界の表示

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

[scikit-learn] 10. k近傍法によるクラス分類で決定境界を表示する(KNeighborsClassifier)
scikit-learnのKNeighborsClassifierを使ったk近傍法の実装方法と決定境界の可視化手順を解説。make_blobsで生成したデータを用いてクラス分類を行い、その結果をグラフィカルに表示する方法を紹介しています。

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

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

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

アニメーションの設定

最初に表示する図の設定

ax.contourf()をcontfとしておきます。

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

ax.contourf()を使用した後、contf.collectionsからremove()メソッドで古い塗りつぶし等高線を消去できます。Zは保存されたZsリストから取得し、reshapeで2次元に変換して等高線表示に適した形状にします。このZを使ってcontourfで描画し、このプロセスを繰り返すことでアニメーションを作成します。

アニメーションの表示

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

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

まとめ

本記事では、scikit-learnのKNeighborsClassifierを使用したk近傍法によるクラス分類と、近傍点数の変化に伴う決定境界の変動をアニメーション表示する方法を解説しました。k値の選択によって決定境界がどのように変化するかを視覚的に理解することで、機械学習モデルのパラメータ調整の重要性を学ぶことができます。この実装方法は、他の分類アルゴリズムの可視化にも応用可能です。

参考

Nearest Neighbors Classification
This example shows how to use KNeighborsClassifier. We train such a classifier on the iris dataset and observe the diffe...
KNeighborsClassifier
Gallery examples: Classifier comparison Caching nearest neighbors Nearest Neighbors Classification Comparing Nearest Nei...
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...

コメント