k-평균 알고리즘 이해
K-평균 군집화에서 가장 일반정으로 사용되는 알고리즘이다. K-평균은 군집 중심점(centroid)이라는 특정한 임의의 지점을 선택해 해당 중심에 가장 가까운 포인트들을 선택하는 군집화 기법이다.
군집 중심점은 선택된 포인트의 평균 지점으로 이동하고 이동된 중심점에서 다시 가까운 포인트를 선택, 다시 중심정의 이동이 없을 경우에 반복을 멈추고 해당 중심점에 속하는 데이터 포인트들을 군집화하는 기법이다.
K-평균 군집화의 장점
1. 일반적인 군집화에서 가장 많이 활용되는 알고리즘이다.
2. 알고리즘이 쉽고 간결하다.
K-평균 군집화의 단점
1. 거리 기반 알고리즘으로 속성의 개수가 매우 많을 경우 군집화 정확도가 떨어진다.(이를 위해서 PCA로 차원 축소를 적용해야 할 수도 있다.)
2. 반복을 수행하는데, 반복횟수가 많을 경우 수행 시간이 매우 느려진다.
3. 몇 개의 군집(Cluster)을 선택해야 할지 뚜렷한 가이드라인이 존재하지 않는다.
사이킷런 KMeans Class
KMeans 클래스의 파라미터들 중 중요한 파라미터는 다음과 같다.
n_clusters: 군집화할 개수, 즉 군집 중심점의 개수를 의미한다.
init: 초기에 군집 중심점의 좌표를 설정할 방식을 말한다. 보통ㅇ은 임의로 중심을 설정하지 않고 일반적으로 k-means++ 방식으로 최초 설정을 한다.
max_iter: 최대 반복 횟수이며, 이 횟수 이전에 모든 데이터 중심점 이동이 없으면 종료한다.
KMeans는 사이킷런의 비지도학습 클래스와 마찬가지로 fit(데이터 세트) 또는 fit_transform(데이터 세트) 메서드를 이용해 수행하면 된다. 이렇게 수행된 KMeans 객체는 군집화 수행이 완료돼 군집화와 관련된 주요 속성을 알 수가 있다. 다음은 중요 속성 정보이다.
labels_: 각 데이터 포인트가 속한 군집 중심점 레이블
cluster_centers_: 각 군집 중심점 좌표. 이를 이용하면 군집 중심점 좌표가 어디인지 시각화를 할 수 있음
K-Means 이용한 붓꽃 데이터 세트 군집화
분류 값이 실제 데이터와 얼마나 차이가 나는지 확인을 해보았다.
target0말고는 분류가 잘 안되지는 것을 알 수 있다.
붓꽃 데이터 세트의 군집화를 시각화해보았다. 2차원 평면상에서 개별 데이터의 군집화를 시각적으로 표현하려고 할 때 붓꽃 데이터 세트의 속성이 4개이므로 2차원 평면에 적합치 않아 PCA를 이용해 4개의 속성을 2개의 차원 축소한 뒤에 X좌표, Y좌표로 개별 데이터를 표현하였다.
군집 평가
앞의 붓꽃 데이터 세트의 경우 결괏값에 품종을 뜻하는 타깃 레이블이 있었고, 군집화 결과를 이 레이블과 비교해 군집화가 얼마나 효율적으로 됐는지 짐작할 수 있었다. 하지만 대부분의 군집화 데이터 세트는 이렇게 비교할만한 타깃 레이블을 가지고 있지 않다. 또한 군집화는 분류(Classification0와 유사해 보일 수 있으나 성격이 다르다. 데이터 내에 숨어 있는 별도의 그룹을 찾아서 의미를 부여하거나 동일한 분류 값에 속하더라도 그 안에서 더 세분화된 군집화를 추구하거나 서로 다은 분류 값의 데이터도 더 넓은 군집화 레벨화 등의 영역을 가지고 있다. 그렇다면 군집화가 효율적으로 잘 됐는지 평가할 수 있는 지표에는 어떤 것이 있는지 알아보았다.
실루엣 분석의 개요
군집화 평가 방법으로 실루엣 분석이 있다. 실루엣 분석은 각 군집간의 거리가 얼마나 효율적으로 분리돼 있는지를 나타낸다. 효율적으로 잘 분리됐다는 것은 다른 군집과의 거리는 떨어져 있고 동일 군집끼리의 데이터는 서로 가깝게 잘 뭉쳐 있다는 의미이다. 군집화가 잘 될수록 개별 군집은 비슷한 정도의 여유공간을 가지고 떨어져 있을 것이다.
실루엣 분석은 실루엣 계수를 기반으로 한다. 실루엣 계수는 개별 데이터가 가지는 군집화 지표이다. 개별 데이터가 가지는 실루엣 계수는 해당 데이터가 같은 군집 내의 데이터와 얼마나 가깝게 군집화돼있고, 다른 군집에 있는 데이터와는 얼마나 멀리 분리돼 있는지를 나타내는 지표이다.
특정 데이터 포인트의 실루엣 계수 값은 해당 데이터 포인트와 같은 군집 내에 있는 다른 데이터 포인트와의 거리를 평균한 값 a(i), 해당 데이터 포인트가 속하지 않은 군집 중 가장 가까운 군집과의 평균거리 b(i)를 기반으로 계산이 된다. 두 군집 간의 거리가 얼마나 떨어져 있는가의 값은 b(i) - a(i)이며 이 값을 정규화하기 위해 MAX(a(i),b(i)) 값으로 나눈다. 따라서 i 번째 데이터 포인트의 실루엣 계수 값 s(i)는 다음과 같이 정희한다.
s(i)=(b(i)-a(i))/max(a(i),b(i))
실루엣 계수는 -1에서 1사이의 갑을 가지며, 1로 가까워질수록 근처의 군집과 더 멀리 떨어져 있다는 것이고 0에 가까울수록 근처의 군집과 가까워진다는 것이다. -값은 아예 다른 군집에 데이터 포인트가 할당됐음을 뜻한다. 사이킷런은 이러한 실루엣 분석을 위해 다음과 같은 매서드를 제공한다.
sklearn.metrics.silhouette_samples(X,labels,metric='euclidean',**kwds): 인자로 X feature 데이터 세트와 각 피처 데이트 세트가 속한 군집 레이블 값인 labels 데이터를 입력해주면 각 데이터 포인트의 실루엣 계수를 계산해 반환한다.
sklearn.metrics.sihouette_score(X,labels,metric='euclidean',sample_size=None,**kwds): 인자로 X feature 데이터 세트와 각 피처 데이터 세트가 속한 군집 레이블 값인 labels 데이터를 입력해주면 전체 데이터의 실루엣 계수 값을 평균해 반환한다. 즉 np.mean(silhouette_score())이다. 일반적으로 이 값이 높을수록 군집화가 어느정도 잘 됐다고 판단할 수 있다. 하지만 무조건 이 값이 높다고 해서 군집화가 잘 됐다고 판단할 수는 없다.
좋은 군집화가 되려면 다음 기준 조건을 만족해야한다.
1. 전체 실루엣 계수의 평균값, 즉 사이킷런의 silhouette_score() 값은 0~1 사이의 값을 가지며, 1에 가까울수록 좋다.
2. 하지만 전체 실루엣 계수의 평균값과 더불어 개별 군집의 평균값의 편차가 크지 않아야 한다. 즉, 개별 군집의 실루엣 계수 평균값이 전체 실루엣 계쑤의 평균값에서 크게 벗어나지 않는 것이 중요합니다. 만약 전체 실루엣 계수의 평균값은 높지만, 특정 군집의 실루엣 계수 평균값만 유난히 높고 다른 군집들의 실루엣 계수 평균값은 낮으면 좋은 군집화 조건이 아니다.
'Machine Learning' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 (0) | 2021.12.09 |
---|---|
[파이썬 머신러닝 완벽가이드(위키북스)] : Clustering (군집화) Part2 (0) | 2021.12.06 |
[파이썬 머신러닝 완벽가이드(위키북스)] : 차원 축소 (0) | 2021.11.28 |
[파이썬 머신러닝 완벽가이드(위키북스)] : Regression 회귀 part4 캐글 주택 가격 예측 실습 (0) | 2021.11.25 |
[파이썬 머신러닝 완벽가이드(위키북스)] : Regression 회귀 part3 로지스틱, 회귀 트리 (0) | 2021.11.25 |
댓글