티스토리 뷰

코드 출처:  https://github.com/Jihun-Dong/Machine-Learning-Practice/tree/5148be498cde8ce5f1737150a9301f1aac890946

데이터 군집화(Clustering)는 데이터를 비슷한 특성을 가진 그룹으로 묶어 분류하는 기법입니다. 이번 블로그에서는 파이썬으로 데이터 군집화를 수행하는 방법을 알아보겠습니다.

먼저 필요한 라이브러리들을 불러옵니다. matplotlib.pyplot과 sklearn.datasets를 이용하여 iris 데이터셋을 불러옵니다. 그리고 데이터 처리를 위해 pandas를 불러옵니다.

import matplotlib.pyplot as plt
from sklearn import datasets
import pandas as pd

이어서 iris 데이터셋을 불러와 데이터를 iris_data 변수에 저장합니다.

 

iris = datasets.load_iris()
iris_data = iris.data

다음으로, 덴드로그램(Dendrogram)을 그리기 위해 SciPy 라이브러리의 hierarchy 모듈을 불러옵니다. 그리고 matplotlib을 이용하여 덴드로그램을 시각화합니다. 이 때, linkage 함수의 method를 'ward'로 설정하여 유클리디안 거리(Euclidean distance)와 와드 연결(Ward linkage) 알고리즘을 이용합니다.

from scipy.cluster import hierarchy

plt.figure(figsize=(10, 7))
plt.title('Dendrograms')
dend = hierarchy.dendrogram(hierarchy.linkage(iris_data, method='ward')) 
plt.show()

 

이어서, AgglomerativeClustering을 이용하여 데이터를 군집화합니다. 이 함수를 이용하면 군집의 개수를 정할 수 있고, 거리 측정 방법과 linkage 알고리즘도 설정할 수 있습니다. 이 예제에서는 n_clusters를 3으로 설정하고, affinity를 'euclidean'으로, linkage를 'ward'로 설정하여 데이터를 군집화합니다.

'ward' 척도는 군집내의 분산을 최소로하는 방식으로 군집을 결정합니다.

from sklearn.cluster import AgglomerativeClustering

cluster = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')
cluster.fit_predict(iris_data)

군집화 결과를 시각화하기 위해 matplotlib의 scatter 함수를 이용하여 데이터를 산점도(Scatter plot)로 나타냅니다. 여기서 c 옵션을 이용하여 군집화 결과에 따라 데이터 포인트의 색깔을 다르게 설정합니다.

plt.figure(figsize=(10, 7))
plt.scatter(iris_data[:, 0], iris_data[:, 1], c=cluster.labels_)
plt.show()

 

마지막으로, pandas를 이용하여 데이터 프레임으로 변환합니다. iris_df2 변수에 iris 데이터셋을 저장하고, 각 데이터 포인트가 속한 군집을 나타내는 'cluster' 열을 추가합니다. 이후 groupby() 함수를 이용하여 각 군집별로 평균 값을 구합니다.

iris_df2 = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df2['cluster'] = cluster.labels_
iris_df2.head()

print(f"각 군집내 평균값 {iris_df2.groupby(by='cluster').mean()}")

각 군집내 평균값          sepal length (cm)  ...  petal width (cm)
cluster                     ...                  
0                 5.920312  ...          1.434375
1                 5.006000  ...          0.246000
2                 6.869444  ...          2.105556

 

728x90
반응형
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
공지사항