[Python] 데이터 분석과 이미지 처리 OpenCV KNN(K-Nearest Neighbor)

뽕칠이·2024년 1월 18일

KNN(K-Nearest Neighbor): 최근접 이웃법

KNN은 비지도학습으로 여러 레이블 속의 데이터 중에서 자신과 가까운 데이터를 찾아 자신의 레이블을 결정하는 방식이다.

import cv2
import matplotlib.pyplot as plt
import numpy as np

# 학습용 데이터(25x2 크기의 배열[0 ~ 99])
trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)
# 실험 데이터(25x1 크기의 배열[0 ~ 1])
response = np.random.randint(0, 2, (25, 1)).astype(np.float32)

# 값이 0인 데이터의 위치 (x,y)에 빨간색으로 칠한다.
red = trainData[response.ravel()==0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')

# 값이 1인 데이터의 위치 (x,y)에 파란색으로 칠한다.
blue = trainData[response.ravel()==1]
plt.scatter(blue[:,0], blue[:,1], 80, 'b', 's')

# (0 ~ 100, 0 ~ 100) 위치의 데이터를 하나 생성해 초록색으로 칠한다.
newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:, 0], newcomer[:,1], 80, 'g', 'o')

knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, response)
ret, results, neighbors, dist = knn.findNearest(newcomer, 3)

print("result : ", results)
print("neighbours :", neighbors)
print("distance: ", dist)
plt.show()

0개의 댓글