카테고리 없음

머신러닝with파이썬7(2)_군집(클러스터링)

디지털랫드 2024. 3. 23. 12:17

군집 (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와 달리 군집 개수를 사전에 설정하지 않음
1) PCA -> 타겟별 샘플링 -> 덴드로그램

*용어 : 덴드로그램? 개체간의 결합되는 순서를 나타낸 트리 형태의 다이어그램이다.

 
 
실행 완료
 
 
 
코드 실행
---------------------------------------------------------------------------
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