그림에서는 변수가 2개이지만 더욱 많은 변수들이 관여하기도 한다.
다양한 시도와 경험을 통해 적절한 k값을 찾자!!
n차원 공간에서 두 점간의 거리를 알아내는 공식이다. 2차원에서의 피타고라스 정리를 생각하면 쉽다.
거리에 반비례하는 가중치를 줘서 더 가까운 이웃일수록 평균에 더 많이 기여하도록 한다.
각 column의 데이터마다 scale이 다를 것이기에 수치 형식의 데이터들의 값을 모두 0~1 사이로 변환시키는 정규화(Normalization) 과정을 거쳐야 한다.
예를 들어 class A는 데이터 분포가 0~10, class B는 데이터 분포가 0~100000일 수도 있기에 이런 경우 각 변수들의 차이를 해석하기 어렵다.
최소-최대 정규화는 모든 feature에 대해 각각 최솟값을 0, 최댓값을 1로, 다른 값들은 0~1 사이의 값으로 변환하는 정규화를 말한다.
X라는 값에 대해 Min-Max Scaling을 하면
(X - MIN) / (MAX-MIN)
와 같은 수식을 사용할 수 있다.
def min_max_normalization(lst):
normalized = []
for value in lst:
normalized_num = (value - min(lst)) / (max(lst) - min(lst))
normalized.append(normalized_num)
return normalized
위의 코드는 파이썬으로 최소-최대 정규화 함수를 작성한 것이다.
Min-Max Normalization에는 몇가지 단점들이 있다.
Z-점수 정규화는 이상치(Outlier) 문제를 피할 수 있는 데이터 정규화 전략이다. X라는 값을 Z-Score로 바꾸어준다.
고등학교 확통시간에 열심히 썼던 "그 공식"
(X - 평균) / 표준편차
feature의 값이 평균과 같다면 0, 평균보다 작으면 음수, 평균보다 크면 양수로 정규화된다. 표준편차가 크다는 것은 값들이 널리, 고르게 분포해 있다는 뜻이고, 그럴수록 분모가 커져서 정규화되는 값들은 0에 가까워진다.
def z_score_normalize(lst):
normalized = []
for value in lst:
normalized_num = (value - np.mean(lst)) / np.std(lst)
normalized.append(normalized_num)
return normalized
위의 코드는 파이썬으로 Z-Score Normalization 함수를 만든 것이다.
Scikit-Learn의 iris data set에서 knn을 적용해 보았다.
Scikit learn은 파이썬에서 머신러닝을 실행할 수 있도록 하는 패키지이다.
https://colab.research.google.com/drive/1Cknt2JPIpiiO4QDCe1KXlXw71b0yH8-g?usp=sharing
위의 링크에 iris 데이터셋을 knn classifier로 분류한 예제를 작성해 놓았다.
http://hleecaster.com/ml-normalization-concept/
https://blog.naver.com/PostView.nhn?blogId=bsw2428&logNo=221388885007&proxyReferer=https:%2F%2Fwww.google.com%2F
https://ko.wikipedia.org/wiki/K-%EC%B5%9C%EA%B7%BC%EC%A0%91_%EC%9D%B4%EC%9B%83_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#cite_ref-2
https://john-analyst.medium.com/knn-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-b397a0b2030e
https://velog.io/@gr8alex/KNN-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#euclidean-distance
https://velog.io/@guns/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8A%A4%ED%84%B0%EB%94%94-3%EC%9D%BC%EC%B0%A8-K-NN-K-Nearest-Neighbor
https://www.youtube.com/watch?v=8gd0QeQ9ilQ
https://dheldh77.tistory.com/entry/Python-Iris-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D
https://woolulu.tistory.com/1
안녕하세요 머신러닝에 관심이 있는 학생입니다 혹시 knn관련 코드 질문 하나만 드려도 될까요..?