계층적 클러스터링은 레이블이 지정되지 않은 데이터 세트를 클러스터로 그룹화하는 데 사용되는 또 다른 비지도 기계 학습 알고리즘입니다. 계층적 클러스터 분석 또는 HCA.
이 알고리즘에서는 트리 형태로 클러스터의 계층 구조를 개발하는데, 이 트리 모양의 구조를 덴드로그램 .
Java 파일을 한 줄씩 읽습니다.
때로는 K-평균 군집화와 계층적 군집화의 결과가 비슷해 보일 수도 있지만 둘 다 작동 방식에 따라 다릅니다. K-Means 알고리즘에서 했던 것처럼 클러스터 수를 미리 결정할 필요가 없기 때문입니다.
계층적 클러스터링 기술에는 두 가지 접근 방식이 있습니다.
계층적 클러스터링이 필요한 이유
우리는 이미 다른 것을 가지고 있기 때문에 클러스터링 다음과 같은 알고리즘 K-평균 클러스터링 , 그렇다면 왜 계층적 클러스터링이 필요한가요? 따라서 K-평균 클러스터링에서 살펴본 것처럼 미리 결정된 수의 클러스터인 이 알고리즘에는 몇 가지 문제가 있으며 항상 동일한 크기의 클러스터를 생성하려고 시도합니다. 이 두 가지 문제를 해결하기 위해 계층적 클러스터링 알고리즘을 선택할 수 있습니다. 이 알고리즘에서는 미리 정의된 클러스터 수에 대한 지식이 필요하지 않기 때문입니다.
이 주제에서는 Agglomerative Hierarchical Clustering 알고리즘에 대해 설명합니다.
응집형 계층적 클러스터링
응집형 계층적 클러스터링 알고리즘은 HCA의 인기 있는 예입니다. 데이터 세트를 클러스터로 그룹화하려면 다음을 따릅니다. 상향식 접근 방식 . 즉, 이 알고리즘은 처음에는 각 데이터 세트를 단일 클러스터로 간주한 다음 가장 가까운 클러스터 쌍을 함께 결합하기 시작합니다. 모든 클러스터가 모든 데이터 세트를 포함하는 단일 클러스터로 병합될 때까지 이 작업을 수행합니다.
이러한 클러스터 계층 구조는 덴드로그램 형태로 표현됩니다.
응집형 계층적 클러스터링은 어떻게 작동합니까?
AHC 알고리즘의 작동은 아래 단계를 사용하여 설명할 수 있습니다.
참고: 계층적 클러스터링을 더 잘 이해하려면 k-평균 클러스터링을 살펴보는 것이 좋습니다.
두 클러스터 사이의 거리 측정
우리가 본 바와 같이, 가장 가까운 거리 두 클러스터 사이의 클러스터링은 계층적 클러스터링에 매우 중요합니다. 두 군집 사이의 거리를 계산하는 방법에는 여러 가지가 있으며, 이러한 방법에 따라 군집화 규칙이 결정됩니다. 이러한 조치를 연계방법 . 널리 사용되는 연결 방법 중 일부는 다음과 같습니다.
위에 제시된 접근 방식을 통해 문제 유형이나 비즈니스 요구 사항에 따라 어떤 접근 방식이든 적용할 수 있습니다.
계층적 클러스터링에서 Dendrogram의 Woking
덴드로그램은 HC 알고리즘이 수행하는 메모리로 각 단계를 저장하는 데 주로 사용되는 트리형 구조입니다. 덴드로그램 플롯에서 Y축은 데이터 포인트 사이의 유클리드 거리를 표시하고, X축은 주어진 데이터세트의 모든 데이터 포인트를 표시합니다.
덴드로그램의 작동은 아래 다이어그램을 사용하여 설명할 수 있습니다.
위 다이어그램에서 왼쪽 부분은 응집 클러스터링에서 클러스터가 생성되는 방식을 나타내고 오른쪽 부분은 해당 덴드로그램을 나타냅니다.
- 위에서 논의한 바와 같이, 먼저 데이터 포인트 P2와 P3이 함께 결합되어 클러스터를 형성하고 이에 따라 P2와 P3을 직사각형 모양으로 연결하는 덴드로그램이 생성됩니다. 높이는 데이터 포인트 사이의 유클리드 거리에 따라 결정됩니다.
- 다음 단계에서는 P5와 P6이 클러스터를 형성하고 해당 덴드로그램이 생성됩니다. P5와 P6 사이의 유클리드 거리가 P2와 P3보다 약간 더 크기 때문에 이전보다 높습니다.
- 다시 한 번, 하나의 덴드로그램에 P1, P2, P3을 결합하고 다른 덴드로그램에 P4, P5, P6을 결합하는 두 개의 새로운 덴드로그램이 생성됩니다.
- 마침내 모든 데이터 포인트를 결합하는 최종 덴드로그램이 생성됩니다.
요구 사항에 따라 모든 수준에서 덴드로그램 트리 구조를 잘라낼 수 있습니다.
집합적 계층적 클러스터링의 Python 구현
이제 Python을 사용하여 응집형 계층적 클러스터링 알고리즘을 실제로 구현하는 방법을 살펴보겠습니다. 이를 구현하기 위해 이전 주제인 K-평균 클러스터링에서 사용한 것과 동일한 데이터 세트 문제를 사용하여 두 개념을 쉽게 비교할 수 있습니다.
데이터세트에는 쇼핑을 위해 쇼핑몰을 방문한 고객의 정보가 포함되어 있습니다. 따라서 쇼핑몰 소유자는 데이터 세트 정보를 사용하여 고객의 일부 패턴이나 특정 행동을 찾고 싶어합니다.
Python을 사용하여 AHC를 구현하는 단계:
구현 단계는 클러스터 수를 찾는 방법과 같은 일부 변경 사항을 제외하고 k-평균 클러스터링과 동일합니다. 다음 단계를 따르세요.
데이터 전처리 단계:
이 단계에서는 모델의 라이브러리와 데이터세트를 가져옵니다.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
위의 코드 줄은 다음과 같은 특정 작업을 수행하기 위해 라이브러리를 가져오는 데 사용됩니다. 멍청하다 수학 연산의 경우, matplotlib 그래프 또는 산점도 그리기 팬더 데이터세트를 가져오기 위한 것입니다.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
위에서 논의한 바와 같이, 우리는 동일한 데이터세트를 가져왔습니다. Mall_Customers_data.csv, k-평균 클러스터링에서 했던 것처럼 말이죠. 아래 출력을 고려하십시오.
여기서는 종속 변수에 대한 추가 정보가 없으므로 특성 행렬만 추출합니다. 코드는 아래와 같습니다:
x = dataset.iloc[:, [3, 4]].values
여기서는 클러스터를 보기 위해 2D 플롯을 사용할 것이므로 3개와 4개의 열만 추출했습니다. 그래서 우리는 연간 수입과 지출 점수를 특징의 매트릭스로 고려하고 있습니다.
2단계: 덴드로그램을 사용하여 최적의 클러스터 수 찾기
이제 모델에 대한 Dendrogram을 사용하여 최적의 클러스터 수를 찾습니다. 이를 위해 우리는 다음을 사용할 것입니다. 사이피 라이브러리는 코드에 대한 덴드로그램을 직접 반환하는 함수를 제공하기 때문입니다. 아래 코드 줄을 고려하십시오.
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
위의 코드 줄에서 다음을 가져왔습니다. 계층 scipy 라이브러리 모듈. 이 모듈은 우리에게 방법을 제공합니다 shc.denrogram(), 이는 결합() 매개변수로. 연결 함수는 두 클러스터 사이의 거리를 정의하는 데 사용되므로 여기서는 x(특성 행렬) 및 메소드 '를 전달했습니다. 구 ,' 계층적 클러스터링에서 널리 사용되는 연결 방법입니다.
나머지 코드 줄은 덴드로그램 플롯의 레이블을 설명합니다.
산출:
위의 코드 줄을 실행하면 아래 출력을 얻을 수 있습니다. :
이제 이 덴드로그램을 사용하여 모델에 대한 최적의 클러스터 수를 결정합니다. 이를 위해 우리는 최대 수직 거리 수평 막대를 자르지 않습니다. 아래 다이어그램을 고려하십시오.
위 다이어그램에서는 수평 막대를 절단하지 않는 수직 거리를 보여줍니다. 우리가 시각화할 수 있듯이, 4일거리가 최대를 찾고 있으므로 이에 따르면 클러스터 수는 5개입니다. (이 범위의 수직선). 우리는 또한 2를 취할 수 있습니다nd숫자는 대략 4와 같으므로일거리가 있지만 K-평균 알고리즘에서 계산한 것과 동일하므로 5개의 클러스터를 고려하겠습니다.
따라서 최적의 클러스터 수는 5개입니다. , 다음 단계에서는 동일한 모델을 사용하여 모델을 훈련할 것입니다.
3단계: 계층적 클러스터링 모델 학습
필요한 최적의 클러스터 수를 알고 있으므로 이제 모델을 훈련할 수 있습니다. 코드는 아래와 같습니다:
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
위의 코드에서 우리는 응집형클러스터링 scikit 학습 라이브러리의 클러스터 모듈 클래스입니다.
그런 다음 우리는 이 클래스의 객체를 다음과 같이 만들었습니다. HC. AgglomerativeClustering 클래스는 다음 매개변수를 사용합니다.
마지막 줄에서는 모델을 맞추거나 훈련시키기 위해 종속 변수 y_pred를 만들었습니다. 모델을 훈련할 뿐만 아니라 각 데이터 포인트가 속한 클러스터도 반환합니다.
위의 코드를 실행한 후 Sypder IDE의 변수 탐색기 옵션을 살펴보면 y_pred 변수를 확인할 수 있습니다. 원본 데이터 세트를 y_pred 변수와 비교할 수 있습니다. 아래 이미지를 고려하십시오.
우르피 자베드
위의 이미지에서 볼 수 있듯이, y_pred 클러스터 값을 보여줍니다. 이는 고객 ID 1이 5에 속함을 의미합니다.일클러스터(인덱싱은 0부터 시작하므로 4는 5를 의미함)일클러스터), 고객 ID 2는 4에 속합니다.일클러스터 등이 있습니다.
4단계: 클러스터 시각화
모델을 성공적으로 훈련했으므로 이제 데이터 세트에 해당하는 클러스터를 시각화할 수 있습니다.
여기서는 한 가지 변경 사항을 제외하고 k-평균 클러스터링에서 사용한 것과 동일한 코드 줄을 사용합니다. 여기서는 최적의 클러스터 수를 결정하기 위해 덴드로그램을 사용했기 때문에 k-평균에서 수행한 중심을 표시하지 않습니다. 코드는 아래와 같습니다:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
출력: 위의 코드 줄을 실행하면 다음과 같은 출력을 얻을 수 있습니다.