Numpy을 활용하여 KNN 구현
KNN 알고리즘이란
KNN(K-Nearest Neighbor)알고리즘은 데이터를 입력 받았을 때 이미 분류 항목을 알고 있는 데이터 집합에서 가장 유사한 데이터를 살펴보고 다수결 원칙을 통해 분류 항목을 결정하는 알고리즘이다.
KNN 알고리즘 순서
알고리즘 순서는 다음과 같다.
- 새로운 데이터의 좌표와 알고 있는 모든 데이터 집합의 좌표 사이 거리를 계산
- 오름 차순으로 길이 정렬
- 새로운 데이터와의 거리가 가장 짧은 데이터 K개의 분류 항목 추출
- K개의 데이터중 가장 많은 분류 항목 찾기
- 분류 항목 반환
1. 새로운 데이터의 좌표와 알고 있는 모든 데이터 집합의 좌표 사이 거리를 계산
# dataset이 이미 정의 되었다고 가정
# inX = 새로운 데이터
import numpy as np
dists = dataset - inX
dists = np.array(np.sqrt(dists[:,0]**2 + dists[:,1]**2))
2. 오름 차순으로 길이 정렬
sorted_index = np.argsort(dists)
3. 새로운 데이터와의 거리가 가장 짧은 데이터 K개의 분류 항목 추출
# label(분류 항목)이 이미 정의 되었다고 가정
sorted_labels = np.array(labels[sorted_index[:]])
K_nearest_labels = sorted_labels[:4]
4. K개의 데이터 중 가장 많은 분류 항목 찾기
count_dict = {}
for label in K_nearest_labels:
count_dict[label] = count_dict.get(label,0) + 1
5. 분류 항목 반환
_label, count_labels = np.array(list(count_dict.keys())), np.array(list(count_dict.values()))
return _labels[count_labels.argmax()]
전체 Numpy Code 작성
미리 정의해둔 dataset
dataset = np.array([ [3,104], [2,100], [1,81], [101,10], [99,5], [98,2], ]) labels = np.array(['Romance', 'Romance', 'Romance', 'Action', 'Action', 'Action'])
KNN 알고리즘 코드
def classify_knn(inX, dataset, labels, K): dists = dataset - inX dists = np.array(np.sqrt(dists[:,0]**2 + dists[:,1]**2)) sorted_index = np.argsort(dists) sorted_labels = np.array(labels[sorted_index[:]]) K_nearest_labels = sorted_labels[:4] count_dict = {} for label in K_nearest_labels: count_dict[label] = count_dict.get(label,0) + 1 _labels, count_labels = np.array(list(count_dict.keys())), np.array(list(count_dict.values())) return _labels[count_labels.argmax()]
실행결과
후기
우선 이렇게 훌륭한 강의를 들을 수 있다는 점에서 Public AI 대표님과 단국대학교에게 감사인사를 먼저 올리고 싶다. 딥러닝, 파이썬 등을 이 수업을 듣기 전에 한번도 사용해본적이 없었다. 그래서 처음 수업을 들으며 상당한 두려움을 느꼈다. 그러나 대표님의 훌륭한 강의와 더불어 단계별로 차근차근 진행할 수 있도록 과제를 잘 정리해주신 것을 보고 실습하며 두려움을 이겨내고 딥러닝이라는 분야에 흥미를 느낄 수 있었다.
파이썬이라는 언어에 대한 이해도가 낮기 때문에 내가 작성한 이 코드가 과연 얼마만큼의 완성도가 있는지 자신은 없다. 그러나 하나하나 해 나감으로써 파이썬과 딥러닝에 대한 이해를 하고 싶다는 욕심이 생겼다.
Reference
Author And Source
이 문제에 관하여(Numpy을 활용하여 KNN 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ppyooy336/Numpy을-활용하여-KNN-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)