Python Machine Learning/군집화

K- 평균 알고리즘

Data Analytics 2020. 10. 7. 17:51

- 군집 중심점( centroid )이라는 특정한 임의 지점을 선택해 해당 중심에 가장 가까운 포인트들을 선택하는 군집화 기법

- 선택된 포인트의 평균 지점으로 이동하는 방법을 반복해 더이상 중심점의 이동이 없을 경우에 반복을 멈추고

  해당 중심점에 속하는 데이터 포인트들을 군집화하는 기법

 

[ k - 평균 step ]

1. 군집화의 기준이 되는 중심점을 구성하려는 군집화 개수만큼 임의의 위치에 설정

2. 각 데이터는 가장 가까운 곳에 위치한 중심점에 소속

3. 소속이 결정되면 군집 중심점을 소속된 데이터의 평균 중심으로 이동

4. 중심점이 이동 후 각 데이터는 기존에 속한 중심점보다 더 가까운 중심점이 있으면 해당 중심점으로 소속 변경

5. 다시 중심을 소속된 데이터의 평균 중심으로 이동

6. 중심점을 이동했는데 데이터의 중심점 소속 변경이 없으면 군집화 종료, 그렇지 않다면 4번 과정부터 반복

 

[ k - 평균 장점 ]

일반적인 군집화에서 가장 많이 활용되는 알고리즘

쉽고 간결한 알고리즘

 

[ k - 평균 단점 ]

거리를 기반으로 하여 속성의 개수가 매우 많을 경우 군집화 정확도가 떨어짐

반복 횟수가 많을 경우 수행 시간이 느려짐

군집을 몇 개로 해야하는지 정하기가 어려움

 

 

[ 사이킷런 k - 평균 클래스 ]

사이킷런 패키지는 k - 평균을 구현하기 위해 kmeans 클래스 제공

kmeans 주요 파라미터

- n_cluster : 군집화할 개수, 즉 군집 중심점의 개수를 의미

- init : 초기에 군집 중심점의 좌표를 설정할 방식을 말하며, 보통 임의로 중심을 설정하지 않고

        일반적으로 k-means++ 방식으로 최초 설정

- max_iter : 최대 반복 횟수이며, 정한 횟수 이전에 모든 데이터의 중심점 이동이 없으면 종료

                fit( )또는 fit_transform( )메서드를 이용해 수행하며, 이렇게 수행된 kmeans 객체는 군집화 수행이

                완료돼 군집화와 관련된 주요 속성을 알 수 있다

- labels_ : 각 데이터 포인트가 속한 군집 중심점 레이블

- cluster_centers_ : 각 군집 중심점 좌표. 이를 이용하면 군집 중심점 좌표가 어디인지 시각화 가능

 

[ 예제 ]

붗꽃 데이터를 이용해 k - 평균 군집화 수행. 꽃받침, 꽃잎의 길이에 따라 각 데이터의 군집화가 어떻게 결정되는지 확인.

KMeans 객체를 생성하고 군집화 수행

-> labels_의 값이 0, 1, 2로 돼 있으며, 이는 각 레코드가 첫 번째, 두 번째, 세 번째 군집에 속함을 의미

labels_값을 'cluster'칼럼으로 irisDF에 추가하고 실제 붓꽃 품종 분류 값과 얼마나 차이가 나는지로 군집화가 효과적으로 됐는지 확인

->group by 연산을 실제 분류 값인 target과 군집화 분류 값인 cluster 레벨로 적용해 target 과 cluster 값 개수를 비교

 

붓꽃 데이터 세트를 2차원 평면상에서 개별 데이터의 군집화를 시각화하기 위해서 PCA를 통해 차원 축소한 뒤 X,Y 좌표로 개별 데이터를 표현
맷플롯립의 산점도는 서로 다른 마커를 한 번에 표현할 수 없으므로 마커별로 별도의 산점도를 수행

-> cluster 1을 나타내는 네모( ' s ' )는 명확히 다른 군집과 잘 분리되어 있지만 cluster 0을 나타내는 동그라미( ' o ' )와 

    cluster 2를 나타내는 세모( ' ^ ' )는 네모만큼 명확히 구분되어있지는 않음을 확인.