인공지능/머신러닝

[머신러닝7] 계층적 군집 알고리즘: Hierarchical Clustering / Dendogram

공부짱짱열심히하기 2022. 12. 5. 16:00

Hierarchical Clustering

계층적 군집이란

가까운 두개데이터끼리 묶고 또 그 묶음과 가까운 데이터를 묶고 이런식으로 완전히 모든 데이터가 묶일때 까지 작업하는 알고리즘

유사 개채끼리 계속 군집화를 수행하다 보니  k-means와 달리 클러스팅갯수를 사전에 정하지 않아도가능하다

 

개체들이 결합되는 순서를 나타내는 트리형태의 구조인 덴드로그램을 통해  시각적으로 k의 갯수를 쉽게 정할 수 있다.

 


데이터는 수입별 구매점수를 의미

이데이터를 통해  군집화하여 최적의 그룹으로 나누기


트레이닝 기본

1. nan확인

2.x와y분리

언수퍼 바이즈드 러닝은 결과값이 없기때문에 x데이터는 존재하지만 y데이터는 존재하지 않는다

 

3.문자열이 있다면 숫자로 바궈주기

4.피셔츠케일링을 통해 값 맞춰주기

5.트레이닝 / 테스트 셋으로 분리시키기

https://seonggongstory.tistory.com/66

 


import scipy.cluster.hierarchy as sch
sch.dendrogram( sch.linkage(X , method = 'ward') )
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Euclidean Distances')
plt.show()

ward형식의 덴드로그램을 제일 많이 사용

 

가장 먼 군집을 잘라주면 그게 k값이 된다.(거리가 멀수록 관계가 적어 진다는 뜻이니까)

150에서 자를경우 5개의 군집이 나옴

from sklearn.cluster import AgglomerativeClustering
AgglomerativeClustering(n_clusters=n)
hc.fit_predict(X)

 

plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

 

 

 

Hierarchical Clustering

import scipy.cluster.hierarchy as sch


덴드로그램
sch.dendrogram( sch.linkage(X , method = 'ward') )
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Euclidean Distances')
plt.show()


from sklearn.cluster import AgglomerativeClustering
AgglomerativeClustering(n_clusters=n)
hc.fit_predict(X)


plot
plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()