티스토리 뷰

반응형

https://www.youtube.com/watch?v=ngLyX54e1LU&list=PLqnslRFeH2Upcrywf-u2etjdxxkL8nl7E&index=1 

 

 

이 유투브에 있는 강의를 보고 공부한 내용 정리

 

 

1. KNN이란?

K-nearest Neighers를 뜻하는 것으로, 위의 그림에서 녹색 점은 빨간색으로 분류를 해야할까? 아니면 파란색으로 분류해야할까? 이를 주위에 있는 점 K개를 선택해 많은 숫자쪽으로 분류하는 것이다.

 

K는 초록색 점으로부터 유클리디안 거리를 사용해 계산한다.

 

유클리디안 거리란?

우리가 중고등학교 때 배운 점과 점 사이의 거리를 통해 구한다.

 

\(d=\sqrt{(x_1-x_2)^2-(y_1-y_2)}\)

 

위의 공식을 통해 나온 거리를 통해, 최근접점 k개를 해서, 많은 수가 나오면 된다.

만약 빨강이 2개, 파랑이 1개라면 초록점은 빨강으로 분류한다.

 

 

코드 구현

import numpy as np
from collections import Counter


def euclidean_distance(x1,x2):
    np.sqrt(np.sum((x1-x2)**2))

class KNN:

    def __init__(self,k=3):
        self.k=k
    
    def fit(self,X,y):
        self.X_train=X
        self.y_train=y
    
    def predict(self,X):
        predicted_labels= [self._predicted(x) for x in X]
        return np.array(predicted_labels)

    def _predict(self,x):
        distances = [euclidean_distance(x,x_train) for x_train in self.X_train]
        k_indices=np.argsort(distances)[:self.k]
        k_nearest_labels=[self.y_train[i] for i in k_indices]

        most_common=Counter(k_nearest_labels).most_common(1)
        return most_common[0][0]

 

1)__init__

k의 값을 아무 값도 입력하지 않으면 3개로 설정한다.

이 때 값은 홀수로 설정하는 것이 좋다. 그래야 짝수가 되어 결정되지 않는 경우가 발생하지 않는다.

 

2) fit

입력 받은 값을 그냥 넣는다.

 

3) predict

_predicted로 나온 값을 리스트를 만들어 저장한다.

 

4) _predicted

 (1)유클리디언 거리를 계산한다.

 (2) 그 중에서 k번째까지 값까지 정렬해서 K_indices에 넣는다

 (3) 그 값 중에서 가장 큰 많은 수를 리턴한다

 

반응형

'머신러닝 > 머신러닝 from scratch' 카테고리의 다른 글

단순 회귀분석  (0) 2022.09.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형