PYTHON/머신러닝
[PYTHON] 군집분석 Clustering
G허니
2024. 4. 28. 21:32
비지도학습(Unsupervised Learning) 중 군집 분석(Clustering Analysis)은 데이터를 비슷한 특성 또는 패턴을 가진 그룹으로 묶는 기법을 의미합니다. 군집 분석은 데이터 간의 내재적인 구조를 파악하고 이해하기 위해 사용됩니다. 주어진 데이터에 대한 명시적인 레이블이나 타깃 변수가 없는 상황에서 유용하게 활용됩니다.
알고리즘 동작 방식:
- 군집 중심 초기화: 먼저, 군집 중심을 초기화합니다. 초기화 방법은 알고리즘에 따라 다를 수 있으며, 무작위 초기화, 또는 데이터 포인트를 기반으로 초기화하는 등의 방법이 사용될 수 있습니다.
- 군집 할당: 각 데이터 포인트는 가장 가까운 군집 중심에 할당됩니다. 이 때 거리 측정 방법으로는 유클리드 거리나 맨해튼 거리 등이 주로 사용됩니다.
- 군집 업데이트: 군집에 속한 데이터 포인트들의 평균을 계산하여 새로운 군집 중심을 업데이트합니다. 이 과정을 반복하여 군집 중심을 최적화합니다.
- 수렴 확인: 군집 중심이 수렴할 때까지 군집 할당과 군집 업데이트를 반복합니다. 보통은 군집 중심이 더 이상 크게 변하지 않을 때 알고리즘이 수렴했다고 판단합니다.
주요 특징:
- 비지도 학습: 군집 분석은 비지도 학습 기법으로, 데이터에 대한 사전 정보 없이 패턴이나 구조를 발견하고 이해합니다.
- 내재적 구조 파악: 군집 분석은 데이터 간의 내재적인 구조나 패턴을 파악하는 데 사용됩니다. 이를 통해 데이터를 효율적으로 이해하고 분석할 수 있습니다.
- 유사성 기반 그룹화: 군집 분석은 데이터 포인트들을 비슷한 특성이나 패턴을 가진 그룹으로 묶습니다. 이는 데이터 간의 유사성을 기반으로 한 그룹화를 의미합니다.
적용 분야:
- 고객 세분화: 군집 분석은 고객들을 비슷한 특성이나 행동 패턴을 가진 그룹으로 세분화하여 마케팅 전략을 개발하는 데 활용됩니다.
- 이상 탐지: 데이터의 정상적인 패턴에서 벗어나는 이상치를 탐지하기 위해 군집 분석이 사용될 수 있습니다.
- 이미지 분할: 이미지에서 비슷한 특징을 가진 영역을 찾아내어 이미지를 분할하는 데에도 군집 분석이 사용됩니다.
모델링
from sklearn.neighbors import NearestNeighbors
from sklearn.cluster import KMeans, DBSCAN
# k means 학습
model = KMeans(n_clusters= 2, n_init = 'auto')
model.fit(x)
# 예측
pred = model.predict(x)
print(pred)
- n_clusters : 군집의 갯수
def k_means_plot(x, y, k) :
# 모델 생성
model = KMeans(n_clusters= k, n_init = 'auto')
model.fit(x)
pred = model.predict(x)
# 군집 결과와 원본 데이터 합치기(concat)
pred = pd.DataFrame(pred, columns = ['predicted'])
result = pd.concat([x, pred, y], axis = 1)
# 중앙(평균) 값 뽑기
centers = pd.DataFrame(model.cluster_centers_, columns=['x1','x2'])
# 그래프 그리기
plt.figure(figsize = (8,6))
plt.scatter(result['x1'],result['x2'],c=result['predicted'],alpha=0.5)
plt.scatter(centers['x1'], centers['x2'], s=50,marker='D',c='r')
plt.grid()
plt.show()
군집 분석은 데이터를 유사한 패턴이나 특성을 가진 그룹으로 묶는 비지도 학습 기법입니다. 데이터의 내재적인 구조를 파악하고 이해하는 데에 사용되며, 다양한 분야에서 활용됩니다.