Notice
Recent Posts
Recent Comments
Link
헬창 개발자
KNN 최근접 이웃 [파이썬] 본문
1. K-최근접 이웃이란?
K-최근접 이웃(K-Nearest Neighbors, KNN) 알고리즘은 지도 학습에서 사용되는 간단하고 직관적인 분류 및 회귀 알고리즘입니다. 주어진 데이터 포인트의 라벨을 예측하기 위해, 해당 데이터 포인트와 가장 가까운 K개의 이웃 데이터 포인트를 참조합니다. 이웃들의 라벨 정보를 바탕으로 예측을 수행합니다.
2. KNN 알고리즘의 기본 개념
- 분류: K개의 가장 가까운 이웃의 클래스 라벨을 확인하고, 가장 많이 등장하는 클래스로 예측합니다. 예를 들어, K=3일 때, 가장 가까운 3개의 이웃 중 2개가 클래스 A에 속하고 1개가 클래스 B에 속하면, 예측 클래스는 A가 됩니다.
- 회귀: K개의 가장 가까운 이웃의 값을 평균하여 예측 값을 결정합니다. 이웃의 평균 값이나 중간 값을 사용하여 예측을 수행합니다.
3. KNN 알고리즘의 단계
- 데이터 준비: 훈련 데이터와 테스트 데이터를 준비합니다.
- 거리 계산: 테스트 데이터 포인트와 모든 훈련 데이터 포인트 간의 거리를 계산합니다.
- 가장 가까운 이웃 선택: 계산된 거리 기반으로 K개의 가장 가까운 이웃을 선택합니다.
- 예측: 선택된 이웃의 라벨을 기반으로 예측을 수행합니다.
가정
선택할 후보(K)의 데터의 개수 정하기
-> 이미 알고있다고 가정하며, 전문가에 의해 조정 가능함
동작
주어진 기준 벡터(튜플)에 대하여 각 벡터간의 거리를 계산 -> 유클리드 거리 사용
dist(A,B) = ?
dist(A,C) = ?
dist(A,D) = ?
dist(A,E) = ?
기준 벡터와 가장 가까운 후보(K)개의 벡터 선택
후보의 벡터들의 클러스터를 조사하여 다수결 원칙을 적용하여 기준 벡터의 클러스터 결정
입력데이터
Daniel의 클러스터 분류 하기 -> yes or no
class knnAg:
def __init__(self, k):
self.pivot = ['daniel', 37, 50, 2, '?'] # '?' 분류 데이터
self.table = [['john', 35, 35, 3, 'yes'], # 비교 데이터
['rachel', 22, 50, 2, 'no'],
['ryan', 63, 200, 1, 'no'],
['james', 59, 170, 1, 'no'],
['jack', 25, 40, 4, 'yes'],
['mitchell', 36, 75, 2, 'yes'],
['boris', 44, 65, 3, 'no']]
self.k = k
def dist(self, v1, v2): # 유클리드 거리 함수
self.sum = 0
for i in range(len(v1)):
self.sum = self.sum + (v1[i]-v2[i])**2
return self.sum**0.5
def knn(self): # knn
self.dist_list = []
for i in range(len(self.table)):
self.d = self.dist(self.table[i][1:4], self.pivot[1:4]) #daniel씨의 모든 거리 구하기
self.dist_list.append(self.d)
print(self.dist_list)
flag = 0
for h in range(self.k):
midx = self.dist_list.index(min(self.dist_list)) #최소 거리 인데스 추출
if self.table[midx][4] == 'yes':
flag = flag + 1
print(self.table[midx])
else:
print(self.table[midx])
self.dist_list.pop(midx) # 다음 최소 거리를 위해 팝
self.table.pop(midx)
if flag > self.k / 2: # 최소거리 flag가 k/2 이상이면 참, 사용자 파라미터
return 'yes'
else:
return 'no'
aaaaaaaaa= knnAg(3) #k=3 개의 비교
aaaaaaaaa.knn()
'데이터 분석' 카테고리의 다른 글
밀도기반 클러스터링 DBSCAN [파이썬] (0) | 2022.05.01 |
---|---|
7. 시계열 데이터를 다뤄보자 (0) | 2022.04.27 |
코사인 유사도, 코사인 거리 구현[파이썬] (0) | 2022.04.23 |
자카드 유사도, 거리 [파이썬] (0) | 2022.04.23 |
계층적 군집화(hierachical clustering) [파이썬] (0) | 2022.04.23 |
Comments