문득 K-NN과 K-Means 모델 중, 어떤 모델이 어떨 때 쓰이는 게 좋을지가 궁금해서 쓰게 된 글.
그림과 같이 지도 학습, 비지도 학습이라는 가장 큰 차이가 있다.
지도학습이란, 정답이 있는 데이터를 활용해 기계를 학습시키는 방법
대표적으로 분류, 회귀 문제를 다룬다.
비지도학습은 지도학습과 달리 정답 라벨이 없는 데이터를 비슷한 특징끼리 군집화하여 새로운 데이터에 대한 결과를 예측하는 방법
대표적으로 클러스터링 문제를 다룬다.
KNN 란?
K Neighbor Nearest이라는 뜻으로 최근접 이웃법으로 분류 문제에 사용되는 알고리즘이다.
새로운 데이터가 들어왔을 때 기존 데이터의 그룹 중 어떤 그룹에 속하는지 분류하게 되는데,
특정공간 내에서 입력과 제일 근접한 k개의 요소를 찾아, 더 많이 일치하는 것으로 분류를 하게 된다.
KNN의 하이퍼 파리미터는 크게 탐색할 이웃 수, 거리 측정 방법으로 볼 수 있다.
●가 ◼︎그룹보다 ▲그룹과 더 가까우니 ●는 ▲그룹으로
분류되는 것이 KNN알고리즘의 원리이고
k로 몇 번째로 가까운 데이터 까지 살펴볼 것인지 확인하고,
거리를 측정하여 분류를 하게 된다.
1. 하이퍼 파라미터
1-1. K에 따른 모형
K값이 너무 작으면 overfitting이 될 수 있고, k의 값이 너무 크면 underfitting이 될 수 있다.
또한, 그룹의 갯수에 따라 k의 값의 그룹의 갯수에 대해 소수값이 되어야 그룹 분류를 수월하게 할 수 있다.
k = 2 혹은 4 라는 가정하에 우측 그림과 같이 분류를 하게 되면
입력값이 어떤 그룹에 속하는지 판단하기 어려워 질 수 있기 때문이다.
즉, KNN알고리즘을 사용할 때는 분류될 그룹의 종류등을 고려하여 적절한 k값을 설정해주는 것이 중요하다.
1-2. 거리 척도 단위 문제
거리는 보통 유클리디안 거리(Euclidean Distance)를 자주 사용한다.
유클리디안의 거리는 아래의 식과 같다.
이때 주의할 것은 변수의 단위에 따라 결과값이 달라질 수 있기 때문에 표준화된 데이터를 사용하여 식에 대입해야 한다.
2. 장점
- 기존 분류 체계 값을 모두 검사하여 비교하므로 높은 정확도를 가진다.
- 비교를 통해 가까운 상위 k개의 데이터만 활용하기 때문에 오류 데이터는 비교대상에서 제외한다.
- 기존 데이터를 기반으로 하기 때문에 데이터에 대한 가정이 없다.
- 수치 기반 데이터 분류 작업에서 성능이 좋다.
3. 단점
- 최적 이웃의 수(k)와 어떤 거리척도가 분석에 적합한지 불분명해 데이터 각각의 특성에 맞게 연구자가 임의로 선정해야 한다.
- 기존의 모든 데이터를 비교해야 하기 때문에 데이터가 많으면 많을 수록 처리 시간이 증가 => 속도가 느리다.
- 많은 데이터 활용을 위해 메모리를 많이 사용하게 되어 고사양의 하드웨어가 필요하다.
4. 활용 사례
- 이미지와 비디오로 구성된 광학적 문자 인식(OCR)과 안면인식을 포함한 컴퓨터 비전응용 분야
- 사용자가 추천 받은 영화에 대한 선호도 예측(Netflix사)
- 특정한 단백질 또는 질병 발견을 위한 유전적 데이터 패턴 확인
- 서울시 도시고속도로 단기 교통상황 예측
K Means 란?
K Means Clustering은 비지도 학습의 클러스터링 모델 중 하나이다.
기본적으로 거리기반 분류이기 때문에 유클리디안 거리를 측정하며, 중심점과의 거리를 최소화하는 작업을 반복함으로써 분류하는 머신러닝 기법이다.
클러스터란 비슷한 특성을 가진 데이터들의 묶음을 뜻하고, 여기서 비슷한 특성이란 가까운 위치를 의미한다.
k는 데이터 세트에서 찾을 것으로 예상되는 클러스터의 수를 의미하고, means는 데이터로 부터 그 데이터가 속한 클러스터의 중심까지의 평균 거리를 의미한다. 이때 클러스터의 중심은 esntroids 라고 한다.
K Means의 목적은 유사한 데이터 포인트끼리 그루핑하여 패턴을 찾아내는 것이다.
K-Means에서는 이걸 구현하기 위해 반복적인(iterative) 접근을 취한다.
- 일단 K개의 임의의 중심점(centroid)을 배치하고
- 각 데이터들을 가장 가까운 중심점으로 할당한다. (일종의 군집을 형성한다.)
- 군집으로 지정된 데이터들을 기반으로 해당 군집의 중심점을 업데이트한다.
- 2번, 3번 단계를 그래서 수렴이 될 때까지, 즉 더이상 중심점이 업데이트 되지 않을 때까지 반복한다.
K Means는 파이썬 라이브러리 scikit-learn을 사용하여 쉽게 적용해 볼 수 있다.
from sklearn.cluster import KMeans
Kmean = KMeans(n_clusters=2)
Kmean.fit(X)
1. 특징
- K-Means는 군집을 원 모양으로 간주한다.
- 모든 특성은 동일한 Scale을 가져야한다.
- 이상치에 취약하다.
2. 장점
- 구현하기가 비교적 간단하다.
- 사전 레이블된 학습 데이터가 필요하지 않다. (클러스터링의 일반적인 장점)
- 새로운 데이터의 클러스터를 찾을 때 계산량이 적다. (관찰 데이터간 거리만 필요한 입력값)
3. 단점
- 초기에 군집 수를 설정하기 때문에 k의 값에 따라 정확도가 달라진다.
- 모든 데이터를 거리로만 판단하므로 결과 해석이 어렵다.
- 학습 후 초기 학습한 군집 수를 변경이 불가능하기 때문에 데이터 증가에 따라 새로운 클러스터를 형성하는 것은 불가능하다.
4. 활용 사례
- 데이터 분류, 클러스터링 방법
- 성향이 불분명한 시장 분석
- 트렌드와 같이 명확하지 못한 기준 분석
- 패턴 인식, 음성 인식 기본 기술
- 관련성을 알 수 없는 데이터의 초기 분류
K-Nearest Neighbor vs K-Means Clustering
정리하자면, 이 두 방법은 사용하는 목적이 다르다.
K-Nearest Neighbor은 분류를 하기 위해 사용하는 알고리즘이고, K-Means는 주어진 데이터들이 어떤 특징들을 가지고 있는지 clustering이라고 하는 군집을 나누기 위해 사용하는 알고리즘이다.
이 때 K-NN의 K는 분류 할때 k개의 데이터와 비교하여 분류할 때 사용하는 것이며 K-Means의 K는 k개의 군집으로 나누기 위해 사용하는 것이다.
다시 말해, K-NN은 지도 학습(Surpervised Learning)이고, K-Means는 비지도 학습(Unsupervised Learing)이다.
비지도 학습은 예측(Prediction)하는 것으로 새로운 데이터에 대해서 분류하는 것이다.
지도 학습은 추론(inference)하는 것으로 새로운 데이터가 아닌 기존에 주어져 있는 데이터들로 군집을 분석하는 것이다.
(주로 실생활에서는 암환자로 분류된 사람들은 여러 유전적으로 영향이 있다, 구매내역을 특징으로 한 구매자들의 그룹, 영화 시청자가 지정한 등급별로 그룹화된 영화 등.)
출처
- https://ebbnflow.tistory.com/165
- 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
- https://smecsm.tistory.com/53
- https://doorbw.tistory.com/175
- https://1004jonghee.tistory.com/entry/kNN-알고리즘
- https://ko.wikipedia.org/wiki/K-%ED%8F%89%EA%B7%A0_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
- https://hleecaster.com/ml-kmeans-clustering-concept/https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-7-K-%ED%8F%89%EA%B7%A0-%EA%B5%B0%EC%A7%91%ED%99%94-K-means-Clustering
- https://eunsukimme.github.io/ml/2019/12/16/K-Means/
- https://ysyblog.tistory.com/84
- https://proinlab.com/publish/2017/kmeans/index.html#/
- https://muzukphysics.tistory.com/entry/ML-13-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-k-means-Clustering-%ED%8A%B9%EC%A7%95-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%A0%81%EC%9A%A9-%EC%98%88%EC%8B%9C-%EB%B9%84%EC%A7%80%EB%8F%84%ED%95%99%EC%8A%B5
'Study > Python' 카테고리의 다른 글
Python | 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape (0) | 2023.06.29 |
---|---|
Python | 의사결정나무의 파라미터 (0) | 2022.05.05 |
Python | 의사결정나무 Decision Tree (0) | 2022.04.20 |
Python | 회귀분석 (0) | 2022.03.23 |
Python | 데이터 전처리 (0) | 2022.03.23 |