크게 생각하고, 목표를 높게 잡고, 대담하게 행동하라.

“언젠가는 목표에 이를지도 모르는 단계를 밟는 것으로는 언제나 실패한다. 모든 단계가 그 자체로 목표인 동시에 목표로 이르는 단계여야한다.” - 괴테

AI/머신러닝

K-means K-NN [머신러닝 스터디]

o_onn5 2023. 1. 18. 03:13
728x90

K-means 알고리즘이란?

비지도 학습으로 군집 알고리즘이다.

아래와 같이  k개의 군집을 만든다.

k=3

 

알고리즘을 살펴보자. 직관적인 알고리즘이라 이해하는 데 어렵지 않으니 천천히 봐보자.

k=2

Step1: 형성할 군집의 개수인 k를 정한다.

Step2: 무작위로 k개의 centroid(군집의 중심점)를 찍는다.

Step3: 모든 데이터를 각 centroid와 거리를 잰 후, 가까운 centroid에 군집을 형성한다.

Step4: 형성된 각 군집의 평균 위치에 기존 centroid를 이동시킨다.

Step5: Step3~Step4를 반복한다(centroid가 더 이상 움직이지 않을 때까지)

 

구현하기에도 쉬운 알고리즘이다.

그런데 문제점이 2가지가 있다.

 

문제 1. 초기에 k개의 centroid를 무작위로 정한다면 군집이 제대로 형성되지 않을 수 있다.

따라서 이를 방지하기 위해서 K-means++라는 알고리즘이 있다.

어렵지 않으니까 알아보자.

 우선 k는 5라고 가정하자. 초기에 데이터 하나를 잡고 centroid 하나를 정한다. 그 후 정해진 centroid를 기준으로 가장 멀리 떨어진 데이터에 그 다음 centroid를 정하는 방식이다. 이렇게 되면 초기 centroid들이 모두 멀리 떨어져 있으니 무작위로 정한 centroid보다 군집 형성에 효과적일 것이다. 

참고로 k-means 모델을 사용 시 k-means++는 default 값이기에 크게 신경쓰지 않아도 된다.

 

문제 2. 비지도 학습이기에 평가지표가 따로 없다.

그래서 elbow method와 Silhouette method가 있다.

elbow method

elbow method는 각 군집 내에서 centroid와 데이터들의 거리 평균을 합한 값을 의미한다.

팔꿈치 모양의 그래프라서 이름이 저렇게 붙여졌고, 팔꿈치와 가까운 k가 적절한 k다.

위 사진에서는 3,4 정도가 적절해보인다. 하지만 정확한 k값을 알려주지는 않는다. 

다음 Silhouette method도 알아보자.

Silhouette method

S(i)는 -1과 1사이의 값을 갖고 1일때 가장 적절한 k값을 갖는다고 본다.

 

두 method로 적절한 k값을 유추해보면 좋지만 아래의 데이터의 경우 또 다른 문제가 생긴다.

 

실루엣 점수를 봐서는 k는 4일 때가 적절해 보인다. k=4로 군집을 만들어 보지만 육안으로 봤을 때 적절해 보이지 않는다.

세 번째 사진처럼 k=8일 때가 적절해보인다. 이 처럼 두 method를 완전히 신뢰하지 말고 참고용으로 사용하면 좋을 것 같고 자신의 데이터에 맞게 성능을 향상시켜야 할 것 같다.

 

 

K-NearestNeighbor 알고리즘이란?

k-means와 마찬가지로 거리 기반 알고리즘이다. 지도학습으로 분류와 회귀모두 가능한 알고리즘이다.

새로운 데이터가 들어온다면 가장 가까운 k개의 데이터를 탐색한다. k개 중에서 가장 많이 탐색된 데이터로 분류가 되는 알고리즘이다. 

 

K-NN 알고리즘을 사용 시 주의해야할 점이 있다.

바로 x축과 y축의 스케일이다. Class B로 분류되어야할 것이 Class A로 분류가 된다.

 

 

스케일을 조정하고 다시 그래프를 보면 x축은 거의 관여를 하지 않고 있다. 이를 위해서 최소최대정규화나 표준화를 해줘야한다. 

표준화를 해준 뒤 다시 K-NN을 진행하니 제대로 분류가 되는 것을 확인할 수 있다.

 

 

궁금하신거나 질문이 있으시면 댓글 달아주세요! 지적도 좋습니다.

 

 

 

https://www.reddit.com/r/learnmachinelearning/comments/qiid2e/kmeans_clustering_algorithm/

https://laptrinhx.com/guide-to-k-means-clustering-with-java-80252745/

https://wpaud16.tistory.com/230

https://www.datacamp.com/tutorial/k-nearest-neighbor-classification-scikit-learn

728x90