GMM을 이용한 붓꽃 데이터 셋 클러스터링
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd0
%matplotlib inline
iris = load_iris()
feature_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
#보다 편리한 데이타 Handling을 위해 DataFrame으로 변환
irisDF = pd.DataFrame(data=iris.data, columns=feature_names)
irisDF ['target'] = iris. target
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=3, random_state=0).fit(iris.data)
gmm_cluster_labels = gmm.predict(iris.data)
# 클러스터링 결과를 irisDF 의 'gmm_cluster' 컬럼명으로 저장
irisDF ['gmm_cluster'] = gmm_cluster_labels
irisDF['target'] = iris. target
# target 값에 따라서 gmm_cluster 값이 어떻게 매핑되었는지 확인.
iris_result = irisDF.groupby(['target']) ['gmm_cluster '].value_counts()
print(iris_result)
kmeans = KMeans (n_clusters=3, init='k-means++', max_iter=300, random_state=0).fit(iris.data)
kmeans_cluster_labels = kmeans.predict(iris.data)
irisDF ['kmeans_cluster'] = kmeans_cluster_labels
iris_result = irisDF.groupby(['target'])['kmeans_cluster '].value_counts()
print(iris_result)
Toy Examples – for comprehensive understanding
### 클러스터 결과를 담은 DataFrame과 사이킷런의 Cluster 객체등을 인자로 받아 클러스터링 결과를 시각화하는 함수
def visualize_cluster_plot(cluster obj, dataframe, label_name, iscenter=True):
if iscenter :
centers = cluster obj.cluster_centers_
unique_labels = np.unique(dataframe[label_name].values)
markers=['o', 's', '^' 'x', '*']
isNoise False
for label in unique_labels:
label_cluster = dataframe [dataframe [label_name] == label]
if label == −1:
cluster_legend = 'Noise'
isNoise = True
else:
cluster_legend = 'Cluster ' + str(label)
plt.scatter(x=label_cluster['ftr1'], y=label_cluster['ftr2'], s=70, edgecolor='k', marker-markers[label], label=cluster_legend)
if iscenter:
center_x_y = centers[label]
plt.scatter (x=center_x_y[0], y=center_x_y[1], s=250, color='white', alpha=0.9, edgecolor='k', marker=markers[label])
plt.scatter (x=center_x_y[0], y=center_x_y[1], s=70, color='k', edgecolor='k', marker='$%d$' % label)
if isNoise:
legend_loc='upper center'
else: legend_loc='upper right'
plt.legend(loc=legend_loc)
plt.show()
from sklearn.datasets import make_blobs
# make_blobs()로 300개의 데이터 셋, 3개의 cluster 셋, cluster_std=0.5 을 만듬.
X, у make_blobs(n_samples=300, n_features=2, centers-3, cluster_std=0.5, random_state=0)
# 길게 늘어난 타원형의 데이터 셋을 생성하기 위해 변환함.
transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
X_aniso = np.dot (X, transformation)
# feature 데이터 셋과 make_blobs( ) 의 y 결과 값을 DataFrame으로 저장
cluster DF = pd.DataFrame(data=X_aniso, columns=['ftr1', 'ftr2'])
cluster DF ['target'] = y
#생성된 데이터 셋을 target 별로 다른 marker 로 표시하여 시각화 함.
visualize_cluster_plot(None, cluster DF, 'target', iscenter=False)
#3개의 Cluster 기반 Kmeans 를 X_aniso 데이터 셋에 적용
kmeans = KMeans(3, random_state=0)
kmeans_label = kmeans.fit_predict(X_aniso)
clusterDF['kmeans_label'] = kmeans_label
visualize_cluster_plot(kmeans, cluster DF, 'kmeans_label', iscenter=True)
#3개의 n_components기반 GMM을 X_aniso 데이터 셋에 적용
gmm = GaussianMixture (n_components=3, random_state=0)
gmm_label = gmm.fit(X_aniso).predict(X_aniso)
cluster DF ['gmm_label'] = gmm_label
# GaussianMixture는 cluster_centers_ 속성이 없으므로 iscenter를 False로 설정.
visualize_cluster_plot(gmm, cluster DF, 'gmm_label', iscenter=False)
print('### KMeans Clustering ###')
print(clusterDF.groupby('target')['kmeans_label'].value_counts())
print('Wn### Gaussian Mixture Clustering ###')
print(cluster DF.groupby('target')['gmm_label'].value_counts())
'빅데이터 분석가 양성과정 > Python - 머신러닝' 카테고리의 다른 글
Ecommerce Machine Learning - 광고 반응률 예측(로지스틱 회귀) (0) | 2024.07.12 |
---|---|
DBSCAN( Density Based Spatial clustering of application with noise) (0) | 2024.07.12 |
군집화 (K-Means) - 군집 평가 ( 실루엣 분석 ) (1) | 2024.07.12 |
군집화 (K-Means) (0) | 2024.07.12 |
차원축소(Unsupervised Learning) (4) | 2024.07.12 |