仕事終わりの活動#3
昨日の続きでKNNを学習します。
端的に言うと、
箱に分類された飴ちゃん と 分類したい飴ちゃん
の2つがあります。
分類したい飴ちゃんがどの箱に入れるのかを決める手法がKNNらしい。
では実装しよう。
2つに分類された4点のポイント と 1つの点
を用意して、
1つの点が2つの内どちらになるのかをやります。
以下がpythonで実装したプログラム
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
from matplotlib.colors import ListedColormap
from matplotlib import pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
import collections
if __name__ == '__main__':
samples = np.array([[0., 1., 0.],\
[0., .5, 0.],\
[1., 1.5, -3.5],\
[1., 1., -3.]]\
)
labels = ['a','b','b', 'a']
Y = np.array([[1., 1., 0.]])
#classes, classes_index = np.unique(labels, return_inverse=True)
print("分類されたサンプルにおいてYがどこに分類されるかをやる")
dist = np.sum((Y - samples)**2, axis=1)**0.5
print("Yからの相対距離はそれぞれ",dist)
k_labels = [labels[index] for index in dist.argsort()[:2]]
print("相対距離が小さい順番から","k番目までを抽出すると")
print(k_labels)
print("重複数とともに表示すると")
print(collections.Counter(k_labels).most_common(),"から1つだけを取り出すと")
print(collections.Counter(k_labels).most_common(1),"からラベルを取り出すと")
label = collections.Counter(k_labels).most_common(1)[0][0]
print(label)
print("よってYは",label,"に分類される")
cmap_keyword = "jet"
cmap = plt.get_cmap(cmap_keyword)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
for x,y,z in samples:
ax.scatter(x,y,z, marker='o')
for x,y,z in Y:
ax.scatter(x,y,z, marker='x')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
明日は見やすいようにちゃんとグラフに出力しようかな。