はじめに
sklearnの
でk近傍法によるクラス分類をすることができる。ここではneighbors
.KNeighborsClassifiersklearn.datasets.make_blobs
で作成したデータに対してクラス分類を行い、決定境界を表示する方法について説明する。
解説
モジュールのインポートなど
バージョン
データの生成
make_blobsによりデータを作成する。make_blobsについては下記記事で解説した。
![](https://sabopy.com/wp/wp-content/uploads/2021/01/centers-1-160x90.png)
random_state=4とすることで上下に分離したデータ群を作成した。データを表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_1-1.png)
格子状データの作成
細かい間隔の格子状データをテストデータとして分類を行い、その分類結果を塗りつぶし等高線で表示することになる。ここではmeshgridとnp.arangeで間隔が0.05の格子状データを作成する。
k近傍法(k=1)の適用
n_neighborsは近傍点として扱うデータ数の数を指定する。ここでは1とした。
neighbors.KNeighborsClassifierで分類器を作成し、clf.fit(X, y)により訓練用データを分類器に学習させる。
clf.predict()で分類器による予測をテストデータに対して行う。ここではnp.concatenate((xx.ravel()[:,np.newaxis], yy.ravel()[:,np.newaxis]),axis=1)
としたデータを入れる。データの形状は(12760, 2)となっている。
Zは1次元の配列で返るので、reshapeでxxと同じ形状にする。
結果の表示
ax.contourf(xx, yy, Z,levels,cmap="turbo",alpha=0.5)
で塗りつぶし等高線の境界として、決定境界を表示することができる。
contourにすれば線のみを表示できる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_k1-1.png)
k=3の場合
近傍データ数を3とした時の決定境界は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_k3-1.png)
k=5の場合
近傍データ数を5とした時の決定境界は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_k5-1.png)
k=7の場合
近傍データ数を7とした時の決定境界は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_k7-1.png)
k=1,3,5,7の結果をまとめて表示
k=1,3,5,7の結果をまとめて表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/02/knn2_2-1.png)
参考
![](https://scikit-learn.org/stable/_static/scikit-learn-logo-small.png)
![](https://scikit-learn/stable/_images/sphx_glr_plot_release_highlights_0_24_0_thumb.png)
コメント