티스토리 뷰
데이터 군집화(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

'머신러닝 파이썬' 카테고리의 다른 글
| 선형 회귀를 이용한 시계열 예측의 한계와 대안적인 방법(python) (0) | 2023.03.17 |
|---|---|
| 시계열 데이터 분석: Pandas를 이용한 자기상관 플롯(Autocorrelation Plot) (0) | 2023.03.17 |
| 시계열의 stationarity 를 검정하는 ADF test 예시(파이썬) (0) | 2023.03.16 |
| python에서 dropna() 또는 fillna() 를 이용한 결측치 메우기 (0) | 2023.03.14 |
| DBSCAN을 사용하여 데이터셋을 클러스터링하는 방법 (0) | 2023.03.07 |