주요 콘텐츠

cluster

연결로부터 병합 군집 생성

설명

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

T = cluster(Z,MaxClust=maxclust)"distance"를 군집을 정의하는 디폴트 기준으로 사용하여 최대 maxclust개의 군집에 대한 군집 할당을 반환합니다.

예제

T = cluster(___,Name=Value)는 위에 열거된 구문에 나와 있는 입력 인수 조합 외에 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 예를 들어 cluster(Z,MaxClust=5,Depth=3)을 지정하면 각 노드 아래 깊이 3까지의 거리 값을 계산하여 최대 5개의 군집을 찾을 수 있습니다.

예제

예제

모두 축소

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

표본 데이터를 무작위로 생성합니다.

rng(0,"twister"); % 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
     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에 대한 덴드로그램 플롯을 생성합니다. 3개의 군집을 표시하기 위해 마지막에서 세 번째 연결과 마지막에서 두 번째 연결 간의 중간 절단을 ColorThreshold로 사용합니다.

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

Figure contains an axes object. The axes object contains 30 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(0,"twister") % 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

군집을 정의하기 위한 분계점으로, 양의 스칼라 또는 양의 스칼라로 구성된 벡터로 지정됩니다.

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

Criterion="distance"를 지정하는 경우, 노드의 높이가 cutoff보다 작으면 이 함수는 그 노드의 또는 그 노드 아래의 모든 리프를 한 군집으로 그룹화합니다.

cutoff를 지정하면 maxclust를 지정할 수 없습니다.

예: cluster(Z,Cutoff=0.5)

데이터형: single | double

생성할 군집의 최대 개수로, 양의 정수 또는 양의 정수로 구성된 벡터로 지정됩니다.

Criterion="distance"를 지정하는 경우(또는 Criterion을 지정하지 않은 경우), 트리에서 각 노드의 높이는 해당 노드에서 병합된 두 하위노드 간의 거리를 나타냅니다. cluster 함수는 트리를 가로로 절단했을 때 군집 개수가 maxclust개 이하가 되는 최소 높이를 구합니다. 자세한 내용은 임의 군집 지정하기를 참조하십시오.

Criterion="inconsistent"를 지정하는 경우, 이 함수는 가장 높은 불일치 계수(즉, inconsistent 값)를 가진 노드로 시작하고 해당 노드와 그 노드의 모든 하위노드를 한 군집으로 그룹화합니다. 그런 다음, 이 과정을 반복하여 최대 maxclust개의 군집을 생성합니다.

maxclust를 지정하면 cutoff를 지정할 수 없습니다.

예: cluster(Z,MaxClust=4)

데이터형: single | double

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: cluster(Z,MaxClust=3,Criterion="inconsistent")"inconsistent" 기준을 사용하여 Z에서 최대 세 개의 군집을 만듭니다.

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

예: Depth=3

데이터형: single | double

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

예: Criterion="distance"

데이터형: char | string

출력 인수

모두 축소

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

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

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

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

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

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

대체 기능

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

버전 내역

R2006a 이전에 개발됨

모두 확장