계층적 클러스터링 알고리즘 Python!

소스 노드 : 1055669

이 기사는 데이터 과학 Blogathon

개요

이 기사에서는 계층적 클러스터링이라고 하는 K Means 클러스터링에 대한 다른 접근 방식을 살펴보겠습니다. K Means 또는 K 모드와 비교하여 계층적 클러스터링은 클러스터링 메커니즘이 작동하는 방식에 대한 기본 알고리즘이 다릅니다. 계층적 클러스터링은 응집 또는 분할 기법을 사용하는 반면 K 평균은 중심과 유클리드 거리의 조합을 사용하여 클러스터를 형성합니다. 계통도는 계층적 클러스터링에서 클러스터를 시각화하는 데 사용할 수 있으며, 이는 의미 있는 분류를 통해 결과를 더 잘 해석하는 데 도움이 될 수 있습니다. 덴드로그램을 만들 때 클러스터 수를 지정할 필요가 없습니다.

여기서는 Python을 사용하여 계층적 클러스터링 모델을 설명합니다. 데이터 세트에는 200명의 쇼핑몰 고객 데이터가 있습니다. 각 고객의 customerID, 장르, 연령, 연간 소득, 지출 점수가 모두 데이터 프레임에 포함됩니다. 각 고객의 지출 점수에 대해 계산된 금액은 수입, 주당 쇼핑몰 방문 횟수, 1년 동안 지출한 금액과 같은 여러 기준을 기반으로 합니다. 이 점수의 범위는 100에서 XNUMX까지입니다. 답을 모르기 때문에 비즈니스 문제는 클러스터링 문제가 됩니다. 데이터의 최종 범주는 우리에게 알려지지 않았습니다. 결과적으로 우리의 목표는 이전에 알려지지 않은 고객 클러스터를 발견하는 것입니다.

그러나 먼저 계층적 클러스터링에서 몇 가지 중요한 용어를 살펴봅니다.

계층적 클러스터링의 중요한 용어

연결 방법

(a) 클러스터 (a)에 원래 관측값 a[0],…,a[|a|1]이 있고 (b) 클러스터에 원래 객체 b[0],… b), 그런 다음 (b)를 결합하기 위해 두 군집 (a)와 (b) 사이의 거리를 계산해야 합니다. 클러스터에 할당되지 않은 포인트(d)가 있다고 가정해 보겠습니다. 클러스터(a)가 클러스터(d)에서 얼마나 멀리 떨어져 있고 클러스터(b)가 클러스터(d)에서 얼마나 멀리 떨어져 있는지 파악해야 합니다.

이제 클러스터에는 일반적으로 여러 점이 포함되므로 거리 행렬을 계산하기 위한 다른 방법이 필요합니다. 클러스터 간의 거리 또는 클러스터 간의 거리를 계산하는 방법은 연결에 의해 결정됩니다. 다음은 가장 일반적으로 사용되는 연결 메커니즘 중 일부입니다.

단일 연결 — 각 군집 쌍에 대해 가장 유사한 구성원 간의 거리를 계산한 다음 최단 거리를 기준으로 군집을 병합합니다.

평균 연결 — 한 클러스터의 모든 구성원과 다른 클러스터의 모든 구성원 사이의 거리가 계산됩니다. 그런 다음 이 거리의 평균을 사용하여 병합할 클러스터를 결정합니다.

완전한 연결 — 각 군집 쌍에 대해 가장 유사하지 않은 구성원 간의 거리를 계산한 다음 가장 짧은 거리를 기준으로 군집을 병합합니다.

중앙값 연결 — 평균 연결과 유사한 방식으로 평균 거리 대신 중앙 거리를 사용합니다.

와드 연계 — 분산 분석 방법을 사용하여 클러스터 간의 거리를 결정합니다.

중심 연결 — 각 군집의 중심은 군집에 할당된 모든 점을 평균하여 계산한 다음 이 중심을 사용하여 군집 간 거리를 계산합니다.

거리 계산

두 개 이상의 클러스터 사이의 거리를 계산하는 여러 접근 방식이 존재하며, 유클리드 거리가 가장 널리 사용됩니다. Minkowski, City Block, Hamming, Jaccard 및 Chebyshev와 같은 다른 거리 메트릭도 계층적 클러스터링과 함께 사용할 수 있습니다. 다른 거리 측정항목은 그림 2와 같이 계층적 클러스터링에 영향을 미칩니다.

거리 계산

덴드로그램

특징 공간에서 객체 간의 관계는 덴드로그램으로 표현됩니다. 피쳐 공간에서 순차적으로 병합된 각 개체 쌍 사이의 거리를 표시하는 데 사용됩니다. 덴드로그램은 데이터 세트에 대한 적절한 클러스터 수를 결정하기 전에 계층적 클러스터를 검사하는 데 자주 사용됩니다. 덴드로그램 거리는 두 군집이 결합될 때의 거리입니다. 덴드로그램 거리는 둘 이상의 군집이 분리되어 있는지 또는 함께 결합하여 단일 군집을 형성할 수 있는지 여부를 결정합니다.

이제 Python을 사용하여 계층적 클러스터링 모델을 시연하는 예제를 살펴보겠습니다. 200개의 쇼핑몰 고객 데이터가 있습니다. 데이터 세트. 각 고객의 customerID, 장르, 연령, 연간 소득, 지출 점수가 모두 데이터 프레임에 포함됩니다. 각 고객의 지출 점수에 대해 계산된 금액은 수입, 주당 쇼핑몰 방문 횟수, 1년 동안 지출한 금액과 같은 여러 기준을 기반으로 합니다. 이 점수의 범위는 100에서 XNUMX까지입니다. 답을 모르기 때문에 비즈니스 문제는 클러스터링 문제가 됩니다.

#1 라이브러리 가져오기
numpy를 np로 가져오기 matplotlib.pyplot을 plt로 가져오기 팬더를 pd로 가져오기
#2 pandas로 Mall_Customers 데이터 세트 가져오기
데이터 세트 = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

계층적 클러스터링의 이 새로운 단계에는 최적의 클러스터 수를 결정하는 작업도 포함됩니다. 이번에는 팔꿈치 방법을 사용하지 않습니다. 우리는 덴드로그램을 사용할 것입니다.

#3 최적의 클러스터 수를 찾기 위해 덴드로그램을 사용합니다. # 가장 먼저 할 일은 scipy 라이브러리를 가져오는 것입니다. scipy는 # 계층적 클러스터링 및 덴드로그램 구축 도구가 포함된 오픈 소스 Python 라이브러리입니다. # 필요한 도구만 가져옵니다. scipy.cluster.hierarchy를 sch로 가져오기 
# 덴드로그램 변수를 생성합시다 # linkage는 실제로 계층적 클러스터링의 알고리즘 자체이며 #linkage에서 우리가 적용하고 참여할 데이터를 지정해야 합니다. 이것은 X 데이터 세트 dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt입니다. 보여 주다()

Ward 방법은 각 군집 내 분산을 줄이려고 시도하는 방법입니다. K-평균을 사용하여 엘보우 방법 차트를 플롯하기 위해 wcss를 최소화할 때와 거의 동일합니다. 유일한 차이점은 wcss 대신 클러스터 내 변형을 최소화한다는 것입니다. 각 클러스터 내에서 이것이 분산입니다. 덴드로그램은 아래와 같습니다.

덴도그램

고객은 x축에 표시되고 클러스터 간의 유클리드 거리는 y축에 표시됩니다. 이 다이어그램을 기반으로 최적의 클러스터 수를 어떻게 알아낼 수 있습니까? 우리는 수평선을 넘지 않고 우리가 할 수 있는 가장 긴 수직 거리를 찾고자 합니다. 위 다이어그램에서 빨간색 프레임 선입니다. 다이어그램의 선을 세고 몇 개의 클러스터가 가장 좋은지 알아보겠습니다. 이 데이터 세트의 경우 클러스터 번호는 5입니다.

#4 계층적 클러스터링을 Mall_Customes 데이터세트에 맞추기 # 계층적 클러스터링에는 두 가지 알고리즘이 있습니다. Agglomerative Hierarchical Clustering 및 # Divisive Hierarchical Clustering. sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='ward') # 계층적 클러스터링 알고리즘을 데이터 세트 X에 맞추려고 합니다. 고객이 속한 클러스터를 각 고객에 대해 알려주는 # 클러스터 벡터를 생성하는 동안. y_hc=hc.fit_predict(X)
#5 클러스터 시각화. 이 코드는 k-평균 시각화 코드와 유사합니다. # 계층적 클러스터링 plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = '클러스터 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='파란색', 레이블 ='클러스터 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='녹색', 레이블 ='클러스터 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='청록색', 레이블 ='클러스터 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='자홍색', label ='클러스터 5') plt.title('고객 클러스터(계층적 클러스터링 모델)') plt.xlabel('연간 소득(k$)') plt.ylabel ('지출 점수(1-100') plt.show()
클러스터 | 계층적 클러스터링
클러스터1(빨간색), 클러스터2(파란색), 클러스터3(녹색), 클러스터4(청록색), 클러스터5(자홍색)

이러한 클러스터는 쇼핑몰의 고객 세그먼트로 생각할 수 있습니다.

이것이 표준 계층적 클러스터링 모델의 전부입니다. 데이터 세트와 모든 코드는 Github 섹션에서 사용할 수 있습니다.

결론

모든 클러스터링 연습에서 클러스터 수를 결정하는 것은 시간이 많이 걸리는 프로세스입니다. 비즈니스의 상업적 측면은 이러한 그룹에서 의미를 추출하는 데 더 관심이 있기 때문에 클러스터를 XNUMX차원으로 시각화하고 구별되는지 확인하는 것이 중요합니다. 이 목표를 달성하기 위해 PCA 또는 요인 분석을 사용할 수 있습니다. 이는 최종 결과를 다양한 이해 관계자에게 제공하는 일반적인 방법으로 모든 사람이 출력을 더 쉽게 사용할 수 있도록 합니다.

EndNote

읽어 주셔서 감사합니다!
나는 당신이 기사를 즐기고 지식을 향상 시키길 바랍니다.
저에게 연락 주시기 바랍니다 on 이메일
언급되지 않았거나 생각을 공유하고 싶으신가요? 아래에 댓글을 남겨주시면 답변해 드리겠습니다.

저자에 관하여

하디쿠마르 M. 다둑
데이터 분석가 | 디지털 데이터 분석 전문가 | 데이터 과학 학습자
나와 함께 연결 링크드 인
나와 함께 연결 깃허브

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

출처: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

타임 스탬프 :

더보기 분석 Vidhya