見出し画像

仕事終わりの活動#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()

明日は見やすいようにちゃんとグラフに出力しようかな。




この記事が気に入ったらサポートをしてみませんか?