1
+ {
2
+ "nbformat" : 4 ,
3
+ "nbformat_minor" : 0 ,
4
+ "metadata" : {
5
+ "colab" : {
6
+ "name" : " KNN Algorithm" ,
7
+ "provenance" : [],
8
+ "collapsed_sections" : [],
9
+ "include_colab_link" : true
10
+ },
11
+ "kernelspec" : {
12
+ "name" : " python3" ,
13
+ "display_name" : " Python 3"
14
+ }
15
+ },
16
+ "cells" : [
17
+ {
18
+ "cell_type" : " markdown" ,
19
+ "metadata" : {
20
+ "id" : " view-in-github" ,
21
+ "colab_type" : " text"
22
+ },
23
+ "source" : [
24
+ " <a href=\" https://colab.research.google.com/github/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/16.%20KNN%20Algorithm/KNN%20Algorithm.ipynb\" target=\" _parent\" ><img src=\" https://colab.research.google.com/assets/colab-badge.svg\" alt=\" Open In Colab\" /></a>"
25
+ ]
26
+ },
27
+ {
28
+ "cell_type" : " markdown" ,
29
+ "metadata" : {
30
+ "id" : " zd6X4p1HtmJo" ,
31
+ "colab_type" : " text"
32
+ },
33
+ "source" : [
34
+ " ## KNN Algorithm\n " ,
35
+ " [강의 노트](https://github.com/ndb796/Python-Data-Analysis-and-Image-Processing-Tutorial/blob/master/16.%20KNN%20Algorithm/Python%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%EA%B3%BC%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20-%20KNN%20Algorithm.pdf)"
36
+ ]
37
+ },
38
+ {
39
+ "cell_type" : " markdown" ,
40
+ "metadata" : {
41
+ "id" : " 3kbmRDiPv4P_" ,
42
+ "colab_type" : " text"
43
+ },
44
+ "source" : [
45
+ " K-Nearest Neighbor\n " ,
46
+ " \n " ,
47
+ " * KNN은 비지도학습(Unsupervised Learning)의 가장 간단한 예시입니다.\n " ,
48
+ " * 다양한 레이블의 데이터 중에서, 자신과 가까운 데이터를 찾아 자신의 레이블을 결정하는 방식입니다."
49
+ ]
50
+ },
51
+ {
52
+ "cell_type" : " code" ,
53
+ "metadata" : {
54
+ "id" : " Kce7P2rKtmxe" ,
55
+ "colab_type" : " code" ,
56
+ "colab" : {
57
+ "base_uri" : " https://localhost:8080/" ,
58
+ "height" : 322
59
+ },
60
+ "outputId" : " 6b728ff5-3e93-4c5a-e280-73c549427272"
61
+ },
62
+ "source" : [
63
+ " import cv2\n " ,
64
+ " import numpy as np\n " ,
65
+ " from matplotlib import pyplot as plt\n " ,
66
+ " \n " ,
67
+ " # 각 데이터의 위치: 25 X 2 크기에 각각 0 ~ 100\n " ,
68
+ " trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)\n " ,
69
+ " # 각 데이터는 0 or 1\n " ,
70
+ " response = np.random.randint(0, 2, (25, 1)).astype(np.float32)\n " ,
71
+ " \n " ,
72
+ " # 값이 0인 데이터를 각각 (x, y) 위치에 빨간색으로 칠합니다.\n " ,
73
+ " red = trainData[response.ravel() == 0]\n " ,
74
+ " plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')\n " ,
75
+ " # 값이 1인 데이터를 각각 (x, y) 위치에 파란색으로 칠합니다.\n " ,
76
+ " blue = trainData[response.ravel() == 1]\n " ,
77
+ " plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')\n " ,
78
+ " \n " ,
79
+ " # (0 ~ 100, 0 ~ 100) 위치의 데이터를 하나 생성해 칠합니다.\n " ,
80
+ " newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)\n " ,
81
+ " plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')\n " ,
82
+ " \n " ,
83
+ " knn = cv2.ml.KNearest_create()\n " ,
84
+ " knn.train(trainData, cv2.ml.ROW_SAMPLE, response)\n " ,
85
+ " ret, results, neighbours, dist = knn.findNearest(newcomer, 3)\n " ,
86
+ " \n " ,
87
+ " # 가까운 3개를 찾고, 거리를 고려하여 자신을 정합니다.\n " ,
88
+ " print(\" result : \" , results)\n " ,
89
+ " print(\" neighbours :\" , neighbours)\n " ,
90
+ " print(\" distance: \" , dist)\n " ,
91
+ " \n " ,
92
+ " plt.show()"
93
+ ],
94
+ "execution_count" : 9 ,
95
+ "outputs" : [
96
+ {
97
+ "output_type" : " stream" ,
98
+ "text" : [
99
+ " result : [[1.]]\n " ,
100
+ " neighbours : [[1. 0. 1.]]\n " ,
101
+ " distance: [[ 25. 97. 148.]]\n "
102
+ ],
103
+ "name" : " stdout"
104
+ },
105
+ {
106
+ "output_type" : " display_data" ,
107
+ "data" : {
108
+ "image/png": "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\nAAAASUVORK5CYII=\n",
109
+ "text/plain" : [
110
+ " <Figure size 432x288 with 1 Axes>"
111
+ ]
112
+ },
113
+ "metadata" : {
114
+ "tags" : []
115
+ }
116
+ }
117
+ ]
118
+ }
119
+ ]
120
+ }
0 commit comments