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개임을 알 수 있다.
'Today I Learned' 카테고리의 다른 글
[내일배움캠프_데이터분석] 14주차 화요일 TIL _ 메모리 관리 (1) | 2024.09.24 |
---|---|
[내일배움캠프_데이터분석] 11주차 월요일 TIL _ BI (Tableau 기초) (6) | 2024.09.02 |
[내일배움캠프_데이터분석] 9주차 화요일 TIL _ 선형회귀분석(과제) (0) | 2024.08.20 |
[내일배움캠프_데이터분석] 8주차 금요일 TIL _ 로지스틱 회귀분석(분류분석) (0) | 2024.08.16 |
[내일배움캠프_데이터분석] 8주차 수요일 TIL _ map( ), 문자열 나누기 (0) | 2024.08.14 |