티스토리 뷰
반응형
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
링크
TAG
- K-MOOC
- 일본어
- stl
- 파이썬
- 인지부조화
- 여인권
- 보세사
- C/C++
- 열혈프로그래밍
- 사회심리학
- 통계학
- 백준
- 티스토리챌린지
- c++
- C
- 코딩테스트
- 오블완
- 일본어문법무작정따라하기
- 통계
- 뇌와행동의기초
- 회계
- 심리학
- 강화학습
- 윤성우
- 인프런
- 일문따
- Python
- 데이터분석
- 류근관
- 정보처리기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형