반응형
K-평균(K-means) 알고리즘은 비지도 학습의 가장 널리 사용되는 클러스터링 방법 중 하나입니다.
이 방법은 데이터를 K개의 클러스터로 그룹화하는 것을 목표로 하며, 각 클러스터는 클러스터의 중심(centroid)을 기반으로 형성됩니다.
K-평균 알고리즘
K-평균 알고리즘의 작동 원리
K-평균 알고리즘의 기본 단계는 다음과 같습니다:
- 초기 중심 설정: 먼저 데이터 포인트 중에서 무작위로 K개를 선택하여 각 클러스터의 초기 중심(centroid)으로 설정합니다.
- 할당 단계: 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당합니다. 클러스터 중심과의 거리는 보통 유클리드 거리를 사용하여 측정합니다.
- 업데이트 단계: 각 클러스터의 중심을 새롭게 계산합니다. 이는 클러스터에 속한 모든 데이터 포인트의 평균 위치로 설정됩니다.
- 수렴까지 반복: 할당된 클러스터가 더 이상 변경되지 않거나, 중심의 이동이 미미해질 때까지 위의 단계를 반복합니다.
K-평균의 특징
- 속도: 일반적으로 데이터 포인트가 많은 경우에도 빠르게 수행됩니다.
- 스케일링: 특성의 스케일에 민감하기 때문에, 클러스터링 전에 특성 스케일링을 하는 것이 중요합니다.
- 클러스터 수 결정: K-평균 알고리즘은 사용자가 클러스터 수를 미리 정해야 하므로, 적절한 클러스터 수를 결정하는 것이 중요합니다. 이를 위해 앞서 언급한 엘보우 방법이 사용될 수 있습니다.
한계점
- 초기값 의존성: 초기 클러스터 중심의 선택에 따라 최종 클러스터링 결과가 크게 달라질 수 있습니다. 이를 해결하기 위해 여러 번 알고리즘을 실행하고 결과를 비교하거나, k-means++ 초기화 방법을 사용할 수 있습니다.
- 이상치에 민감: 이상치(outlier)가 클러스터의 중심을 크게 왜곡할 수 있습니다.
- 구형 클러스터 가정: 데이터가 구형 클러스터 구조를 이루지 않을 경우 성능이 떨어질 수 있습니다.
적용 사례
- 시장 세분화
- 이미지 분할
- 문서 클러스터링
- 유전자 클러스터링
K-평균 알고리즘은 비교적 이해하기 쉽고 구현하기 간단한 편이므로, 비지도 학습을 처음 접하는 분들에게 좋은 출발점이 될 수 있습니다. 실제 데이터에 적용해보면서 여러 초기 설정과 클러스터 수를 실험해보는 것이 좋습니다.
K-평균 알고리즘 엘보우 방법
K-means 클러스터링에서 엘보우 방법은 최적의 클러스터 수를 결정하기 위한 흔히 사용되는 기법입니다. 이 방법의 기본 아이디어는 클러스터 내의 분산을 최소화하면서 클러스터 수를 증가시키는 것입니다. 클러스터 수가 증가할수록 클러스터 내의 분산은 감소하지만, 너무 많은 클러스터는 오버피팅을 초래할 수 있습니다.
엘보우 방법을 사용하는 단계는 다음과 같습니다:
- 클러스터 수 결정: 클러스터 수 k를 1부터 시작하여 점진적으로 증가시키면서 각 k에 대해 K-means 클러스터링을 실행합니다.
- SSE 계산: 각 k에 대해 클러스터링을 수행한 후, 모든 클러스터에 대한 총 제곱 오차(Sum of Squared Errors, SSE)를 계산합니다. SSE는 클러스터의 중심과 클러스터 내 각 점 사이의 거리의 제곱 합으로, 클러스터의 응집도를 측정합니다.
- 엘보우 포인트 식별: k값에 따른 SSE를 그래프로 나타내고, SSE가 급격히 감소하다가 완만해지는 지점, 즉 '엘보우(꺾이는 점)'를 찾습니다. 이 지점이 클러스터링에 적합한 클러스터 수를 제안하는 지점입니다.
엘보우 방법은 시각적이며 직관적이지만, 때로는 엘보우 포인트가 명확하지 않거나 주관적 판단이 필요할 때도 있습니다. 그럼에도 불구하고, 다른 클러스터링 평가 방법들과 함께 사용될 때 유용한 도구로 활용될 수 있습니다. 다음은 SSE 계산을 포함하는 간단한 파이썬 코드 예시입니다:
from sklearn.cluster import KMeans
import numpy as np
# 데이터 생성
X = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])
sse = []
for k in range(1, 10):
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)
sse.append(kmeans.inertia_) # 클러스터 내 오차 제곱 합 계산
# 엘보우 포인트를 찾기 위한 그래프 표시
import matplotlib.pyplot as plt
plt.plot(range(1, 10), sse, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.title('Elbow Method For Optimal k')
plt.show()
이 그래프에서 꺾이는 점을 찾아 적절한 클러스터 수를 결정할 수 있습니다.
반응형
'AI > 관련 자료' 카테고리의 다른 글
[딥러닝] 텐서플로 케라스란? / TensorFlow Keras (0) | 2024.11.14 |
---|---|
[머신러닝] 차원 축소와 주성분 분석 (0) | 2024.11.11 |
머신러닝 알고리즘 선택 기본 가이드 (1) | 2024.11.04 |
그리드 서치와 랜덤 서치 (Grid Search & Random Search) (0) | 2024.11.01 |
[Youtube] What is LSTM (Long Short Term Memory) (4) | 2024.10.07 |