はじめに
sklearnの
でk近傍法によるクラス分類をすることができる。ここではneighbors
.KNeighborsClassifiersklearn.datasets.make_blobs
で作成したデータに対してクラス分類を行い、決定境界を表示する方法について説明する。
解説
モジュールのインポートなど
バージョン
データの生成
make_blobsによりデータを作成する。make_blobsについては下記記事で解説した。
random_state=4とすることで上下に分離したデータ群を作成した。データを表示すると以下のようになる。
格子状データの作成
細かい間隔の格子状データをテストデータとして分類を行い、その分類結果を塗りつぶし等高線で表示することになる。ここでは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にすれば線のみを表示できる。
k=3の場合
近傍データ数を3とした時の決定境界は以下のようになる。
k=5の場合
近傍データ数を5とした時の決定境界は以下のようになる。
k=7の場合
近傍データ数を7とした時の決定境界は以下のようになる。
k=1,3,5,7の結果をまとめて表示
k=1,3,5,7の結果をまとめて表示すると以下のようになる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント