A. 금일 학습 내용

1. iris 데이터 불러오기

import pandas as pd
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score,silhouette_samples
# 전체 데이터의 평균 실루엣 계수 : silhouette_score  
# silhouette_samples의 평균과 같음

iris = load_iris()
X, y = iris.data, iris.target

- scikit-learn에서 iris dataset를 가져온다.

 

2. k-means clustering 학습하기

kmeans = KMeans(n_clusters = 2, init = 'k-means++', max_iter = 300, random_state = 42)
kmeans.fit(iris_df)

- 2개의 군집으로 나누어 k-means clustering 학습한다.

 

3. 산점도 확인하기

kmeans.labels_
iris_df['target'] = df['species']
iris_df['cluster'] = kmeans.labels_

plt.figure(figsize=(9,6))
sns.scatterplot(data=iris_df, x='sepal_length', y='sepal_width', hue = 'cluster', palette='viridis')
plt.title('Clustering')
plt.show

4. 평균 실루엣 계수 확인하기

silhouette_score(iris_df, labels)

 

5. 최적의 군집 개수 시각화

from kmeans_visaul import visualize_silhouette
visualize_silhouette([2,3,4,5], iris_df) #k=3

 

6-1. 실루엣 분석을 통한 최적의 k찾기

silhouette_scores = []
for k in range(2,11):
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(iris_df)
    score = silhouette_score(iris_df, kmeans.labels_)
    silhouette_scores.append(score)

 

6-2. 실루엣 분석 시각화

plt.plot(range(2,11), silhouette_scores, marker='o')

 

7-1. 엘보우 방법을 통한 최적의 k 찾기

sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=43)
    kmeans.fit(iris_df)
    sse.append(kmeans.inertia_)

- 엘보우 방법은 SSE 값을 통해 최적의 군집 개수를 구하는 방법이다.

- inertia_ 속성을 활용하여 SSE 값을 구한다.

 

7-2. 엘보우 방법의 시각화

plt.plot(range(1,11), sse, marker='o')
plt.show()

- 엘보우처럼 꺾이는 부분이 최적의 군집 개수이다.

 

8. 결과

- iris 데이터의 경우, 다양한 방법을 통해 최적의 군집 개수가 3개임을 알 수 있다.

+ Recent posts