{"id":6973,"date":"2019-05-22T11:50:46","date_gmt":"2019-05-22T02:50:46","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6973"},"modified":"2020-05-28T10:30:08","modified_gmt":"2020-05-28T01:30:08","slug":"python%ea%b3%bc-opencv-47-knnk-nearest-neighbour%ec%9d%98-%ec%9d%b4%ed%95%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6973","title":{"rendered":"Python\uacfc OpenCV \u2013 47 : kNN(k-Nearest Neighbour)\uc758 \uc774\ud574"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_ml\/py_knn\/py_knn_understanding\/py_knn_understanding.html#knn-understanding \uc785\ub2c8\ub2e4.<\/p>\n<p>kNN\uc740 \uac10\ub3c5\ud559\uc2b5(Supervised Learning)\uc744 \ud1b5\ud55c \uac00\uc7a5 \ub2e8\uc21c\ud55c \ubd84\ub958 \uc54c\uace0\ub9ac\uc998 \uc911\uc5d0 \ud558\ub098\uc785\ub2c8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud55c \uc544\uc774\ub514\uc5b4\uc758 \uc2dc\uc791\uc810\uc740 \uacf5\uac04 \uc0c1\uc758 \uc2dc\ud5d8 \ub370\uc774\ud130\uc640 \uac00\uc7a5 \uac00\uae4c\uc6b4 \uac83\ub4e4\uc744 \ubb36\ub294\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ud1b5\ud574 \ubcfc \uc218 \uc788\uc8e0.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/knn_theory.png\" alt=\"\" width=\"220\" height=\"199\" class=\"aligncenter size-full wp-image-6974\" \/><\/p>\n<p>\uc704\uc758 \uc774\ubbf8\uc9c0\uc5d0\ub294 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uacfc \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc989 2\uac1c\uc758 \uadf8\ub8f9\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uac01 \uadf8\ub8f9\uc744 \ud074\ub798\uc2a4(Class)\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \uc774\uc81c \uc0c8\ub85c\uc6b4 \uc694\uc18c(\ucd08\ub85d\uc0c9 \uc6d0)\uc774 \ub098\ud0c0\ub0ac\uc2b5\ub2c8\ub2e4. \uc774 \uc0c8\ub85c\uc6b4 \uc694\uc18c\ub294 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uc73c\ub85c \ubd84\ub958\ub420\uae4c\uc694, \uc544\ub2c8\uba74 \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc73c\ub85c \ubd84\ub958 \ub420\uae4c\uc694? \uc774\ub97c kNN \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud574 \ubcf4\uc790\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud55c\uac00\uc9c0 \ubc29\ubc95\uc740 \uc774 \ucd08\ub85d\uc0c9 \uc6d0\uacfc \uac00\uc7a5 \uac00\uae4c\uc6b4 \uc774\uc6c3\uc744 \ucc3e\ub294 \uac83\uc785\ub2c8\ub2e4. \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c\ub294 \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uacfc \uac00\uc7a5 \uac00\uae5d\ub2e4\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc774 \ucd08\ub85d\uc0c9 \uc6d0\uc740 \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc73c\ub85c \ubd84\ub958\ub429\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 \uc624\uc9c1 \uac00\uc7a5 \uac00\uae4c\uc6b4 \uc774\uc6c3\uc5d0 \uc758\ud55c \ubd84\ub958\uc774\ubbc0\ub85c \ub2e8\uc21c\ud788 &#8216;\uac00\uc7a5 \uac00\uae4c\uc6b4 \uc774\uc6c3(Nearest Neighbour)&#8217; \uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 \uc5ec\uae30\uc5d0\ub294 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc774 \uac00\uc7a5 \uac00\uae4c\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774 \ucd08\ub85d\uc0c9 \uc6d0 \uc8fc\uc704\uc5d0\ub294 \uc544\uc8fc \ub9ce\uc740 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uc774 \uc874\uc7ac\ud55c\ub2e4\uba74 \uc5b4\ub5a8\uae4c\uc694? \uadf8\ub7ec\uba74 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uc740 \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\ubcf4\ub2e4 \ub354 \ub9ce\uc740 \uc601\ud5a5\ub825\uc744 \ucd08\ub85d\uc0c9 \uc6d0\uc5d0 \uc8fc\uace0 \uc788\ub2e4\uace0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uac00\uc7a5 \uac00\uae4c\uc6b4 \uac83\ub9cc\uc73c\ub85c\ub294 \ucda9\ubd84\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \uc5b4\ub5a4 k-Nearest \uad70\uc774\ub77c\ub294 \uac1c\ub150\uc744 \uac80\uc0ac\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub9bc\uc5d0\uc11c, 3 Nearest \uad70, \uc989 k=3\uc774\ub77c\uace0 \ud569\uc2dc\ub2e4. \ucd08\ub85d\uc0c9 \uc6d0\uacfc \uac00\uc7a5 \uac00\uae4c\uc6b4 3(k\uac12)\uac1c\ub97c \ucde8\ud569\ub2c8\ub2e4.\uadf8\ub7ec\uba74 2\uac1c\uc758 \ube68\uac04\uc0c9\uacfc 1\uac1c\uc774 \ud30c\ub780\uc0c9\uc774 \uc788\uace0 \ucd08\ub85d\uc0c9\uc740 \ud558\ub098 \ub354 \ub9ce\uc740 \ube68\uac04\uc0c9\uc73c\ub85c \ubd84\ub958\ub429\ub2c8\ub2e4. k=7\uc774\ub77c\uba74? 5\uac1c\uc774 \ud30c\ub780\uc0c9\uacfc 2\uac1c\uc758 \ube68\uac04\uc0c9\uc774 \uc874\uc7ac\ud558\uace0 \ud30c\ub780\uc0c9\uc73c\ub85c \ubd84\ub958\ub429\ub2c8\ub2e4. k\uac12\uc744 \ubcc0\uacbd\ud558\ub294 \uac83\uc774 \uc804\ubd80\uc785\ub2c8\ub2e4. \uc7ac\ubbf8\uc788\ub294 \uac83\uc740 \ub9cc\uc57d k=4\uc77c\ub54c\uc785\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 2\uac1c\uc758 \ube68\uac04\uc0c9\uacfc 2\uac1c\uc758 \ud30c\ub780\uc0c9\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc560\ub9e4\ud574\uc9c0\uc8e0. \uadf8\ub798\uc11c k\uac12\uc740 \ud640\uc218\ub85c \uc7a1\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubd84\ub958 \ubc29\ubc95\uc744 k-Nearest Neighbor\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0 \uc5b8\uae09\ud55c kNN\uc5d0\uc11c\ub294 k\uac1c\uc758 \uc774\uc6c3 \ubaa8\ub450\ub97c \ub3d9\uc77c\ud558\uac8c \ub2e4\ub8e8\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac8c \ub9de\ub294 \uac83\uc77c\uae4c\uc694? \uc608\ub97c \ub4e4\uc5b4, k=4\uc778 \uacbd\uc6b0\uc5d0 \ubd84\ub958\uac00 \uc560\ub9e4\ud574 \uc9c4\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc880\ub354 \uc0b4\ud3b4\ubcf4\uba74, 2\uac1c\uc758 \ube68\uac04\uc0c9\uc740 \ub2e4\ub978 2\uac1c\uc758 \ud30c\ub780\uc0c9\ubcf4\ub2e4 \uc880\ub354 \uac00\uae5d\uc2b5\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 \ube68\uac04\uc0c9\uc5d0 \ub354 \ub9ce\uc740 \uac00\uc911\uce58\ub97c \uc918\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc218\ud559\uc801\uc73c\ub85c \uc5b4\ub5bb\uac8c \uc124\uba85\ud560\uae4c\uc694? \uac00\uae4c\uc6b4 \uc694\uc18c\ub4e4\uc5d0 \ub300\ud574 \uadf8 \uac70\ub9ac\uc5d0 \ub530\ub77c \uacc4\uc0b0\ub41c \uac00\uc911\uce58\ub97c \uc918\uc57c \ud569\ub2c8\ub2e4. \uac00\uae4c\uc6b4 \uc694\uc18c\uc5d0\ub294 \ub354 \ub192\uc740 \uac00\uc911\uce58\ub97c, \uc0c1\ub300\uc801\uc73c\ub85c \uba40\ub9ac \uc788\ub294 \uc694\uc18c\uc5d0\ub294 \ub0ae\uc740 \uac00\uc911\uce58\ub97c \ub9d0\uc774\uc8e0. \uacb0\uad6d \uac00\uc7a5 \ub192\uc740 \uac00\uc911\uce58\uc758 \ud569\uc744 \uac00\uc9c0\ub294 \ucabd\uc73c\ub85c \ubd84\ub958\ub420 \uc218 \uc788\ub294\ub370, \uc774\ub97c Modified kNN\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc5ec\uae30\uc5d0 \uba87\uac00\uc9c0 \uc911\uc694\ud55c \uac83\uc744 \ubc1c\uacac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uacf5\uac04 \uc0c1\uc5d0 \ubd84\ud3ec\ub418\ub294 \ube68\uac04\uc0c9\uacfc \ud30c\ub780\uc0c9 \uc694\uc18c \uc804\uccb4\uc5d0 \ub300\ud55c \uc815\ubcf4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc0c8\ub85c\uc6b4 \uc694\uc18c\uc640 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \uac01 \uc694\uc18c \uc0ac\uc774\uc758 \uac70\ub9ac\ub97c \uad6c\ud574\uc57c \ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uadf8\ub798\uc11c \ub9e4\uc6b0 \ub9ce\uc740 \uc694\uc18c\uac00 \uc874\uc7ac\ud560 \uacbd\uc6b0 \ub354 \ub9ce\uc740 \uba54\ubaa8\ub9ac\uc640 \ub354 \ub9ce\uc740 \uacc4\uc0b0 \uc2dc\uac04\uc774 \ud544\uc694\ud560 \uac83\uc785\ub2c8\ub2e4.<\/li>\n<li>kNN\uc5d0\ub294 \uc5b4\ub5a4 \ud615\ud0dc\uc758 \ud6c8\ub828\uacfc \uc900\ube44\uac00 \ud544\uc694\uce58 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>OpneCV\uc5d0\uc11c kNN\uc744 \uc0b4\ud3b4\ubd05\uc2dc\ub2e4.<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \uba3c\uc800 \uc55e\uc11c \uc0b4\ud3b4\ubcf8 \uadf8\ub9bc\ucc98\ub7fc 2\uac1c\uc758 \uad70\uc73c\ub85c \uad6c\uc131\ub41c \ub2e8\uc21c\ud55c \uc608\ub97c \ud65c\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uae00\uc5d0\uc11c \uc880\ub354 \ubcf5\uc7a1\ud55c \uc608\ub97c \ucc98\ub9ac\ud560 \uac83\uc774\uad6c\uc694.<\/p>\n<p>\ube68\uac04\uc0c9 \uad70\uc740 Class-0(0\uc774\ub77c \ud45c\uae30)\uc774\ub77c\uace0 \ud558\uace0, \ud30c\ub780\uc0c9 \uad70\uc740 Class-1(1\uc774\ub77c\uace0 \ud45c\uae30)\uc774\ub77c\uace0 \ud569\uc2dc\ub2e4. 25\uac1c\uc758 \uc694\uc18c\ub97c \uc0c8\uc131\ud558\uace0 \uac01 \uc694\uc18c\uc5d0 \ub300\ud574 Class-0\uacfc Class-1 \uc911 \ud558\ub098\ub85c \uc815\ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 Numpy\uc5d0\uc11c \ub09c\uc218 \uc0dd\uc131\uc790\uac00 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2dc\uac01\ud654\ub294 Matplotlib\uac00 \uc720\uc6a9\ud569\ub2c8\ub2e4. \ube68\uac04\uc0c9 \uad70\uc740 \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc73c\ub85c, \ud30c\ub780\uc0c9 \uad70\uc740 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uc73c\ub85c \ud45c\uc2dc\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport cv2\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\n# Feature set containing (x,y) values of 25 known\/training data\r\ntrainData = np.random.randint(0,100,(25,2)).astype(np.float32)\r\n\r\n# Labels each one either Red or Blue with numbers 0 and 1\r\nresponses = np.random.randint(0,2,(25,1)).astype(np.float32)\r\n\r\n# Take Red families and plot them\r\nred = trainData[responses.ravel()==0]\r\nplt.scatter(red[:,0],red[:,1],80,'r','^')\r\n\r\n# Take Blue families and plot them\r\nblue = trainData[responses.ravel()==1]\r\nplt.scatter(blue[:,0],blue[:,1],80,'b','s')\r\n\r\nplt.show()\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \ub09c\uc218\ub97c \uc0ac\uc6a9\ud588\uc73c\ubbc0\ub85c \uc2e4\ud589 \uacb0\uacfc\ub294 \ub9e4\ubc88 \ub2e4\ub985\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/knn_opencv0.png\" alt=\"\" width=\"1479\" height=\"1057\" class=\"aligncenter size-full wp-image-6976\" \/><\/p>\n<p>\ub2e4\uc74c\uc73c\ub85c trainData\uc640 responses \ubcc0\uc218\ub97c \uc804\ub2ec\ud558\uc5ec kNN \uc54c\uace0\ub9ac\uc998\uc744 \ucd08\uae30\ud654 \ud569\ub2c8\ub2e4(\uac80\uc0c9 \ud2b8\ub9ac\uac00 \uad6c\uc131\ub429\ub2c8\ub2e4).<\/p>\n<p>\uc774\uc81c \uc0c8\ub85c\uc6b4 \uc694\uc18c\ub97c \uac00\uc838\uc640 \uc774 \uc0c8\ub85c\uc6b4 \uc694\uc18c\uac00 \ube68\uac04\uc0c9 \ub610\ub294 \ud30c\ub780\uc0c9 \uc911 \uc5b4\ub514\ub85c \ubd84\ub958\ub420\uc9c0 OpenCV\uc758 kNN\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. kNN\uc73c\ub85c \uac00\uae30 \uc804\uc5d0 \uba3c\uc800 \uc0c8\ub85c\uc6b4 \uc694\uc18c, \uc989 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc54c\uc544\uc57c \ud569\ub2c8\ub2e4. \uc774 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130\ub294 \uc2e4\uc218\ud615 \ud0c0\uc785\uc758 \ubc30\uc5f4\ub85c\uc368 \ud06c\uae30\ub294 <img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/fa91386d1c9236d3c8533f4d92d83c15d15a3ab1.png\" alt=\"\" width=\"337\" height=\"17\" class=\"alignnone size-full wp-image-6978\" \/>\uc785\ub2c8\ub2e4. \uc774\uc81c \uc0c8\ub85c\uc6b4 \uc694\uc18c\uc640 \uac00\uc7a5 \uac00\uae4c\uc6b4 \uc694\uc18c\ub97c \ucc3e\uc2b5\ub2c8\ub2e4. \uac00\uc7a5 \uac00\uae4c\uc6b4 \uc694\uc18c\ub97c \uba87\uac1c\uae4c\uc9c0 \ucc3e\uc744 \uac83\uc778\uc9c0 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uac80\uc0c9\uc758 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>kNN \uc774\ub860\uc758 \uae30\ubc18\ud558\uc5ec \uc0c8\ub85c\uc6b4 \uc694\uc18c\uc5d0 Class-0\uacfc Class-1\uacfc \uac19\uc740 \uc774\ub984\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4. \ub9cc\uc57d \ub9e4\uc6b0 \ub2e8\uc21c\ud55c Nearest Neighbour \uc54c\uace0\ub9ac\uc998\uc744 \uc6d0\ud55c\ub2e4\uba74 k=1\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc0c8\ub85c\uc6b4 \uc694\uc18c\uc640 \uac01\uac01\uc758 \uac00\uae4c\uc6b4 \uc694\uc18c \uc0ac\uc774\uc758 \uac70\ub9ac\uac12\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \uc124\uba85\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uc774 \ucd94\uac00 \ucf54\ub4dc\ub294 \uc55e\uc758 \ucf54\ub4dc \uc911 18\ubc88\uc9f8 \uc904\uc5d0 \ucd94\uac00\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nnewcomer = np.random.randint(0,100,(1,2)).astype(np.float32)\r\nplt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')\r\n\r\nknn = cv2.ml.KNearest_create()\r\nknn.train(trainData, cv2.ml.ROW_SAMPLE, responses)\r\nret, results, neighbours ,dist = knn.findNearest(newcomer, 3)\r\n\r\nprint(\"result: \", results)\r\nprint(\"neighbours: \", neighbours)\r\nprint(\"distance: \", dist)\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/knn_opencv1.png\" alt=\"\" width=\"1530\" height=\"1060\" class=\"alignnone size-full wp-image-6981\" \/><\/p>\n<p>\ucf58\uc194\uc5d0 \ucd9c\ub825\ub41c \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uad6c\uc694.<\/p>\n<p><code>result:  [[0.]]<br \/>\nneighbours:  [[0. 1. 0.]]<br \/>\ndistance:  [[ 32. 202. 261.]]<\/code><\/p>\n<p>\uacb0\uacfc\ub294 \ube68\uac04\uc0c9(Class-0)\uc73c\ub85c \ubd84\ub958\ub418\uc5c8\ub2e4\ub294 \uac83\uacfc \uc0c8\ub85c\uc6b4 \uc694\uc18c(\ucd08\ub85d\uc0c9 \uc6d0)\uc5d0\uc11c \uac00\uc7a5 \uac00\uae4c\uc6b4 3\uac1c\uc758 \uc694\uc18c\uac00 \uc788\uc73c\uba70, \uac80\uc0c9\ub41c 3\uac1c\uc758 \uc694\uc18c\ub294 \ube68\uac04\uc0c9 \uc694\uc18c(Class-0)\uc774 2\uac1c\uc774\uace0 \ud30c\ub780\uc0c9 \uc694\uc18c(Class-1)\uc774 1\uac1c\uc774\uba70 \uac01\uac01\uc758 \uac70\ub9ac \uac12\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub9cc\uc57d \uc0c8\ub85c\uc6b4 \uc694\uc18c\uc758 \uac1c\uc218\uac00 \ub9ce\ub2e4\uba74 \ubc30\uc5f4\ub85c \uc804\ub2ec\ud560 \uc218 \uc788\uc73c\uba70, \uac01\uac01\uc758 \ubd84\ub958 \uacb0\uacfc\ub294 \ubc30\uc5f4\ub85c\uc368 \uc5bb\uc5b4\uc9d1\ub2c8\ub2e4. \uc544\ub798\ub294 10\uac1c\uc758 \uc0c8\ub85c\uc6b4 \uc694\uc18c\uc5d0 \ub300\ud55c \ubd84\ub958\uc5d0 \ub300\ud574 \uc55e\uc758 \ucf54\ub4dc\ub97c \ub300\uccb4\ud558\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nnewcomers = np.random.randint(0,100,(10,2)).astype(np.float32)\r\nplt.scatter(newcomers[:,0],newcomers[:,1],80,'g','o')\r\n\r\nknn = cv2.ml.KNearest_create()\r\nknn.train(trainData, cv2.ml.ROW_SAMPLE, responses)\r\nret, results, neighbours ,dist = knn.findNearest(newcomers, 3)\r\n\r\nprint(\"result: \", results)\r\nprint(\"neighbours: \", neighbours)\r\nprint(\"distance: \", dist)\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_ml\/py_knn\/py_knn_understanding\/py_knn_understanding.html#knn-understanding \uc785\ub2c8\ub2e4. kNN\uc740 \uac10\ub3c5\ud559\uc2b5(Supervised Learning)\uc744 \ud1b5\ud55c \uac00\uc7a5 \ub2e8\uc21c\ud55c \ubd84\ub958 \uc54c\uace0\ub9ac\uc998 \uc911\uc5d0 \ud558\ub098\uc785\ub2c8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud55c \uc544\uc774\ub514\uc5b4\uc758 \uc2dc\uc791\uc810\uc740 \uacf5\uac04 \uc0c1\uc758 \uc2dc\ud5d8 \ub370\uc774\ud130\uc640 \uac00\uc7a5 \uac00\uae4c\uc6b4 \uac83\ub4e4\uc744 \ubb36\ub294\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ud1b5\ud574 \ubcfc \uc218 \uc788\uc8e0. \uc704\uc758 \uc774\ubbf8\uc9c0\uc5d0\ub294 \ud30c\ub780\uc0c9 \uc0ac\uac01\ud615\uacfc \ube68\uac04\uc0c9 \uc0bc\uac01\ud615\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc989 2\uac1c\uc758 \uadf8\ub8f9\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uac01 \uadf8\ub8f9\uc744 \ud074\ub798\uc2a4(Class)\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \uc774\uc81c \uc0c8\ub85c\uc6b4 \uc694\uc18c(\ucd08\ub85d\uc0c9 \uc6d0)\uc774 \ub098\ud0c0\ub0ac\uc2b5\ub2c8\ub2e4. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6973\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 47 : kNN(k-Nearest Neighbour)\uc758 \uc774\ud574&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,131],"tags":[],"class_list":["post-6973","post","type-post","status-publish","format-standard","hentry","category-opencv","category-python"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6973"}],"version-history":[{"count":9,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6973\/revisions"}],"predecessor-version":[{"id":9411,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6973\/revisions\/9411"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6973"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}