K- 평균 알고리즘
- 군집 중심점( 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 - 평균 군집화 수행. 꽃받침, 꽃잎의 길이에 따라 각 데이터의 군집화가 어떻게 결정되는지 확인.
-> labels_의 값이 0, 1, 2로 돼 있으며, 이는 각 레코드가 첫 번째, 두 번째, 세 번째 군집에 속함을 의미
->group by 연산을 실제 분류 값인 target과 군집화 분류 값인 cluster 레벨로 적용해 target 과 cluster 값 개수를 비교
-> cluster 1을 나타내는 네모( ' s ' )는 명확히 다른 군집과 잘 분리되어 있지만 cluster 0을 나타내는 동그라미( ' o ' )와
cluster 2를 나타내는 세모( ' ^ ' )는 네모만큼 명확히 구분되어있지는 않음을 확인.