군집 (Clustering)
이번 시간에는 군집(클러스터링)에 대해서 설명 드리도록 하겠습니다.
이번 시간 정리
군집(Clustering)
- 군집분석은 유사성이 높은 대상의 집단을 분류하는 분석 방법
- 계층적 군집분석과 비계층적 군집분석 으로 구분함
- 전통적인 계층적 군집분석은 군집의 개수를 나중에 선정함
- 비계층적 군집분석인 K-means는 군집의 수를 가장 먼저 선정함
- K-mean 군집분석은 초기 중심 값은 임의로 선정하며, 중심 값이 이동함
군집분석의 평가지표
- Silhouette(실루엣), Dunn Index 등 활용
1. 비계층적 군집분석
- 대표적인 방법 K-means
- K-평균군집(centroid), 임의의 지점 K개를 선택해 해당 중심에서 가까운 데이터를 군집화 하는 기법
- n_clusters 하이퍼파라미터 반드시 설정
아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!
실행 완료
실행 완료
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3146551739.py in <module>
1 # KMeans 선언 및 학습
----> 2 kmeans = KMeans(n_clusters=3)
3 kmeans.fit(df)
NameError: name 'KMeans' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/4205741761.py in <module>
1 # KMeans 예측
----> 2 pred = kmeans.predict(df)
3 pred
NameError: name 'kmeans' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3440260386.py in <module>
1 # 실제값과 예측값 비교
----> 2 df['target'] = dataset.target
3 df['pred'] = pred
4 df
NameError: name 'df' is not defined
1) PCA -> 군집 -> 시각화
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/501686200.py in <module>
1 # PCA
----> 2 df = data.copy()
3 pca = PCA(n_components=2)
4 df = pca.fit_transform(df)
5 df = pd.DataFrame(df)
NameError: name 'data' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/874841979.py in <module>
1 # Kmeans
----> 2 kmeans = KMeans(n_clusters=3)
3 kmeans.fit(df)
4 pred = kmeans.predict(df)
5 df['kmeans'] = pred
NameError: name 'KMeans' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/1564374525.py in <module>
1 # 각 군집의 중심점
----> 2 centers = kmeans.cluster_centers_
NameError: name 'kmeans' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/876039605.py in <module>
3
4 plt.figure(figsize=(12, 6))
----> 5 sns.scatterplot(x=df.iloc[:,0], y=df.iloc[:,1], hue=df['kmeans'])
6 plt.scatter(centers[:,0], centers[:,1])
NameError: name 'df' is not defined
<Figure size 864x432 with 0 Axes>
2) 클러스터 개수 찾는 방법 (엘보우 방법, elbow method)
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/1679924852.py in <module>
2 inertia = []
3 for i in range(1,10):
----> 4 kmeans = KMeans(n_clusters=i, random_state=2022)
5 kmeans.fit(df)
6 inertia.append(kmeans.inertia_)
NameError: name 'KMeans' is not defined
2. 계층적 군집분석
- 대표적인 방법 덴드로그램
- k-means와 달리 군집 개수를 사전에 설정하지 않음
*용어 : 덴드로그램? 개체간의 결합되는 순서를 나타낸 트리 형태의 다이어그램이다.
실행 완료
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3558786971.py in <module>
1 # PCA
----> 2 df = data.copy()
3 pca = PCA(n_components=2)
4 df = pca.fit_transform(df)
5 df = pd.DataFrame(df)
NameError: name 'data' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2547351443.py in <module>
1 # 샘플링
----> 2 kdata = df[:3].copy()
3 kdata = kdata.append(df[70:73])
4 kdata = kdata.append(df[160:163])
5 kdata
NameError: name 'df' is not defined