Main Content

cluster

연결로부터 병합 군집 생성

설명

T = cluster(Z,'Cutoff',C)는 계층적 병합 군집 트리 Z로부터 군집을 정의합니다. 입력값 Z는 입력 데이터 행렬 X에 대한 linkage 함수의 출력값입니다. clusterZ를 군집으로 절단하며, 이때 C를 트리 노드의 불일치 계수(또는 inconsistent 값)에 대한 분계점으로 사용합니다. 출력값 T에는 각 관측값(X의 행)의 군집 할당이 포함됩니다.

예제

T = cluster(Z,'Cutoff',C,'Depth',D)는 각 노드 아래 깊이 D까지의 inconsistent 값을 계산합니다.

예제

T = cluster(Z,'Cutoff',C,'Criterion',criterion)'inconsistent'(디폴트 값) 또는 'distance'를 군집을 정의하는 criterion으로 사용합니다. cluster가 군집을 정의하려면 criterionC보다 작아야 합니다.

예제

T = cluster(Z,'MaxClust',N)'distance'를 군집을 정의하는 기준으로 사용하여 최대 N개의 군집을 정의합니다.

예제

모두 축소

각 노드 아래 깊이 4까지의 불일치 값을 계산하여 임의로 생성된 데이터에 대해 병합 군집을 수행합니다.

표본 데이터를 임의로 생성합니다.

rng('default'); % For reproducibility
X = [(randn(20,2)*0.75)+1;
    (randn(20,2)*0.25)-1];

데이터에 대한 산점도 플롯을 생성합니다.

scatter(X(:,1),X(:,2));
title('Randomly Generated Data');

Figure contains an axes object. The axes object with title Randomly Generated Data contains an object of type scatter.

ward 연결 방법을 사용하여 계층적 군집 트리를 생성합니다.

Z = linkage(X,'ward');

데이터에 대한 덴드로그램 플롯을 생성합니다.

dendrogram(Z)

Figure contains an axes object. The axes object contains 29 objects of type line.

산점도 플롯과 덴드로그램 플롯에서는 데이터에 2개의 군집이 있는 것으로 나타납니다.

불일치 계수에 분계점 3을 사용하여 각 노드 아래 깊이 4까지의 데이터를 군집화합니다. 결과 군집을 플로팅합니다.

T = cluster(Z,'cutoff',3,'Depth',4);
gscatter(X(:,1),X(:,2),T)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2.

cluster는 데이터에서 2개의 군집을 식별합니다.

'distance'를 군집을 정의하는 기준으로 사용하여 fisheriris 데이터 세트에 대해 병합 군집을 수행합니다. 데이터의 군집 할당을 시각화합니다.

fisheriris 데이터 세트를 불러옵니다.

load fisheriris

종을 그룹화 변수로 사용하여 데이터를 2차원 산점도 플롯으로 시각화합니다. 3개의 서로 다른 종에 대해 마커 색과 마커 기호를 지정합니다.

gscatter(meas(:,1),meas(:,2),species,'rgb','do*')
title("Actual Clusters of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Actual Clusters of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

'average' 방법과 'chebychev' 측정법을 사용하여 계층적 군집 트리를 생성합니다.

Z = linkage(meas,'average','chebychev');

'distance' 기준에 대해 분계점 1.5를 사용하여 데이터를 군집화합니다.

T = cluster(Z,'cutoff',1.5,'Criterion','distance')
T = 150×1

     2
     2
     2
     2
     2
     2
     2
     2
     2
     2
      ⋮

T에 군집 할당에 대응하는 숫자가 포함됩니다. cluster가 식별하는 클래스의 개수를 구합니다.

length(unique(T))
ans = 3

clustercutoffCriterion에 지정된 값에 대해 3개의 클래스를 식별합니다.

T를 그룹화 변수로 사용하여 군집 결과를 2차원 산점도 플롯으로 시각화합니다. 3개의 서로 다른 클래스에 대해 마커 색과 마커 기호를 지정합니다.

gscatter(meas(:,1),meas(:,2),T,'rgb','do*')
title("Cluster Assignments of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Cluster Assignments of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2, 3.

군집은 setosa 클래스(클래스 2)를 고유한 군집에 속하는 것으로 올바르게 식별하지만 versicolor 클래스와 virginica 클래스(각각 클래스 1 및 3)는 잘 구별하지 못합니다. 참고로, 산점도 플롯은 T에 포함된 숫자를 사용하여 클래스 레이블을 지정합니다.

fisheriris 데이터 세트에서 최대 세 개의 군집을 찾고 꽃의 군집 할당을 알려진 분류와 비교합니다.

표본 데이터를 불러옵니다.

load fisheriris

'average' 방법과 'chebychev' 측정법을 사용하여 계층적 군집 트리를 생성합니다.

Z = linkage(meas,'average','chebychev');

데이터에서 최대 세 개의 군집을 찾습니다.

T = cluster(Z,'maxclust',3);

Z에 대한 덴드로그램 플롯을 생성합니다. 세 개의 군집을 표시하려면 마지막 세 번째 연결과 마지막 두 번째 연결 간의 중간 절단을 'ColorThreshold'로 사용하십시오.

cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

Figure contains an axes object. The axes object contains 29 objects of type line.

Z의 마지막 두 행을 표시하여 세 개의 군집이 어떻게 하나로 결합되었는지를 확인합니다. linkage는 연결 값으로 1.7583을 사용하여 293번째(파란색) 군집을 297번째(빨간색) 군집과 결합하여 298번째 군집을 구성합니다. 그런 다음 linkage는 296번째(녹색) 군집과 298번째 군집을 결합합니다.

lastTwo = Z(end-1:end,:)
lastTwo = 2×3

  293.0000  297.0000    1.7583
  296.0000  298.0000    3.4445

군집 할당이 세 가지 종에 어떻게 대응되는지를 확인합니다. 예를 들면, 군집 중 하나에 두 번째 종의 꽃은 50송이, 세 번째 종의 꽃은 40송이가 포함되어 있습니다.

crosstab(T,species)
ans = 3×3

     0     0    10
     0    50    40
    50     0     0

20,000개의 관측값을 갖는 표본 데이터를 임의로 생성합니다.

rng('default') % For reproducibility
X = rand(20000,3);

ward 연결 방법을 사용하여 계층적 군집 트리를 생성합니다. 이 경우, clusterdata 함수의 'SaveMemory' 옵션은 기본적으로 'on'으로 설정됩니다. 일반적으로, X의 차원과 사용 가능한 메모리를 기준으로 'SaveMemory'에 가장 적합한 값을 지정합니다.

Z = linkage(X,'ward');

데이터를 최대 네 개의 그룹으로 군집화하고 결과를 플로팅합니다.

c = cluster(Z,'Maxclust',4);
scatter3(X(:,1),X(:,2),X(:,3),10,c)

Figure contains an axes object. The axes object contains an object of type scatter.

cluster는 데이터에서 네 개의 그룹을 식별합니다.

입력 인수

모두 축소

계층적 병합 군집 트리(linkage 함수의 출력값)로, 숫자형 행렬로 지정됩니다. m개의 행(또는 관측값)이 있는 입력 데이터 행렬 X에 대해, linkage(m – 1)×3 행렬 Z를 반환합니다. linkage가 군집 트리를 만드는 방법에 대한 설명은 Z를 참조하십시오.

예: Z = linkage(X)(여기서 X는 입력 데이터 행렬임)

데이터형: single | double

군집을 정의하기 위한 분계점으로, 양의 스칼라 또는 양의 스칼라로 구성된 벡터로 지정됩니다. clusterC를 계층적 군집 트리에서 군집을 정의하는 criterion에 따라 노드의 높이 또는 불일치 계수에 대한 분계점으로 사용합니다.

  • 군집을 정의하는 기준이 'distance'인 경우, 노드의 높이가 C보다 작으면 cluster는 그 노드의 리프와 그 아래 노드의 모든 리프를 한 군집으로 그룹화합니다.

  • 군집을 정의하는 기준이 'inconsistent'인 경우, cluster가 어느 한 노드와 그 노드의 모든 하위노드를 한 군집으로 그룹화하려면 그 노드와 모든 하위노드의 inconsistent 값이 C보다 작아야 합니다. cluster는 군집 트리 Z의 루트부터 시작해서 inconsistent 값이 분계점 C보다 작고 하위노드(후손)의 불일치 값이 C보다 작은 노드를 만날 때까지 트리를 따라 내려갑니다. 그런 다음 cluster는 그 노드의 리프와 그 아래 노드의 모든 리프를 한 군집(또는 노드 자체가 리프인 경우 한원소)으로 그룹화합니다. cluster는 모든 리프 노드가 군집에 포함될 때까지 트리의 모든 가지를 따라갑니다.

예: cluster(Z,'Cutoff',0.5)

데이터형: single | double

불일치 값을 계산할 깊이로, 숫자형 스칼라로 지정됩니다. cluster는 각 노드 아래 깊이 D까지의 불일치 값을 계산합니다.

예: cluster(Z,'Cutoff',0.5,'Depth',3)

데이터형: single | double

군집을 정의하는 기준으로, 'inconsistent' 또는 'distance'로 지정됩니다.

군집을 정의하는 기준이 'distance'인 경우, cluster는 노드의 높이가 C보다 작으면 그 노드의 리프와 그 아래 노드의 모든 리프를 한 군집(또는 노드 자체가 리프인 경우 한원소)으로 그룹화합니다. 트리에서 노드의 높이는 해당 노드에서 병합되는 두 하위노드 간의 거리를 나타냅니다. 'distance'를 지정하면 Zdendrogram 플롯의 수평 슬라이스에 대응하는 군집이 생성됩니다.

군집을 정의하는 기준이 'inconsistent'인 경우, cluster는 어느 한 노드와 그 하위노드의 불일치 계수(또는 inconsistent 값)가 C보다 작으면 그 노드와 모든 하위노드를 한 군집으로 그룹화합니다. 'inconsistent'를 지정하는 것은 cluster(Z,'Cutoff',C)와 동일합니다.

예: cluster(Z,'Cutoff',0.5,'Criterion','distance')

데이터형: char | string

생성할 군집의 최대 개수로, 양의 정수 또는 양의 정수로 구성된 벡터로 지정됩니다. cluster'distance'를 군집을 정의하는 기준으로 사용하여 최대 N개의 군집을 구성합니다. 트리에서 각 노드의 높이는 해당 노드에서 병합된 두 하위노드 간의 거리를 나타냅니다. cluster는 트리를 가로로 절단했을 때 N개 이하의 군집이 남는 최소 높이를 구합니다. 자세한 내용은 임의 군집 지정하기를 참조하십시오.

예: cluster(Z,'MaxClust',5)

데이터형: single | double

출력 인수

모두 축소

군집 할당으로, 숫자형 벡터 또는 행렬로 반환됩니다. (m – 1)×3 계층적 군집 트리 Z(입력값 X가 주어졌을 때 linkage의 출력값)에 대해, TX의 m개 행(관측값)의 군집 할당을 포함합니다.

T의 크기는 C 또는 N의 대응하는 크기에 따라 달라집니다.

  • C가 양의 스칼라이면, T는 길이가 m인 벡터입니다.

  • N이 양의 정수이면, T는 길이가 m인 벡터입니다.

  • C가 양의 스칼라로 구성된 길이 l의 벡터이면, TC의 값마다 하나의 열이 있는 m×l 행렬입니다.

  • N이 양의 정수로 구성된 길이 l의 벡터이면, TN의 값마다 하나의 열이 있는 m×l 행렬입니다.

대체 기능

입력 데이터 행렬 X가 있는 경우 clusterdata를 사용하여 병합 군집을 수행하고 X의 각 관측값(행)에 대한 군집 인덱스를 반환할 수 있습니다. clusterdata 함수가 필요한 모든 단계를 수행하기 때문에 pdist, linkage, cluster 함수를 별도로 실행할 필요가 없습니다.

버전 내역

R2006a 이전에 개발됨