주요 콘텐츠

clusterdata

데이터로부터 병합 군집 생성

설명

T = clusterdata(X,Cutoff=cutoff)linkage 함수로 X에서 생성된 병합 계층 트리를 잘라내는 임계값 cutoff가 주어졌을 때, 입력 데이터 행렬 X의 각 관측값(행)에 대한 군집 인덱스를 반환합니다.

clusterdata는 병합 군집화를 지원하며 pdist, linkage, cluster 함수가 통합되어 있습니다. 이러한 함수는 보다 세부적인 분석을 위해 개별적으로 사용할 수 있습니다. 자세한 내용은 알고리즘 설명 항목을 참조하십시오.

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

예제

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

예제

예제

모두 축소

무작위로 생성된 데이터 세트에서 최대 3개의 군집을 찾아 시각화합니다.

3개의 표준 균등분포에서 무작위로 생성된 데이터로 구성된 표본 데이터 세트를 만듭니다.

rng(0,"twister");  % For reproducibility
X = [gallery("uniformdata",[10 3],12); ...
    gallery("uniformdata",[10 3],13)+1.2; ...
    gallery("uniformdata",[10 3],14)+2.5];
y = [ones(10,1);2*(ones(10,1));3*(ones(10,1))]; % Actual classes

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

scatter3(X(:,1),X(:,2),X(:,3),100,y,"filled")

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

최대 3개의 군집을 찾습니다.

T = clusterdata(X,MaxClust=3); 

결과로 얻은 군집 할당을 사용하여 데이터를 플로팅합니다.

scatter3(X(:,1),X(:,2),X(:,3),100,T,"filled")
title("Result of Clustering");

Figure contains an axes object. The axes object with title Result of Clustering contains an object of type scatter.

clusterdata는 데이터에서 3개의 고유한 군집을 식별합니다.

계층적 군집 트리를 만들고 군집을 찾는 작업을 한 번에 수행합니다. 3차원 산점도 플롯을 사용하여 군집을 시각화합니다.

표준 균등분포에서 생성된 20,000×3 크기의 표본 데이터 행렬을 만듭니다.

rng(0,"twister");  % For reproducibility
X = rand(20000,3);

ward 연결 방법을 사용하여 생성한 계층적 군집 트리에서 최대 4개의 군집을 찾습니다. SaveMemory"on"으로 지정하면 거리 행렬을 계산하지 않고 군집을 생성할 수 있습니다. 그러지 않으면 컴퓨터에 거리 행렬을 저장할 메모리가 충분하지 않아 메모리 부족 오류가 발생할 수 있습니다.

T = clusterdata(X,MaxClust=4,Linkage="ward",SaveMemory="on");

각 군집을 다른 색으로 표시하여 데이터를 플로팅합니다.

scatter3(X(:,1),X(:,2),X(:,3),10,T)

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

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

입력 인수

모두 축소

입력 데이터로, 둘 이상의 행을 가진 숫자형 행렬로 지정됩니다. 행은 관측값을 나타내고, 열은 범주 또는 차원을 나타냅니다.

데이터형: single | double

불일치 또는 거리 기준의 절단값으로, 양의 스칼라로 지정됩니다.

Criterion="inconsistent"를 지정하는 경우(또는 Criterion을 지정하지 않은 경우), clusterdata 함수가 어느 한 노드와 그 노드의 모든 하위노드를 한 군집으로 그룹화하려면 그 노드와 모든 하위노드의 inconsistent 값이 cutoff보다 작아야 합니다.

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

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

예: clusterdata(X,Cutoff=0.2)

데이터형: single | double

생성할 군집의 최대 개수로, 양의 정수로 지정됩니다.

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

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

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

예: clusterdata(X,MaxClust=4)

데이터형: single | double

이름-값 인수

모두 축소

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

예: clusterdata(X,MaxClust=3,Linkage="ward")ward 연결 방법을 사용하여 X의 군집을 최대 3개 만듭니다.

계층적 군집 트리에서 군집을 정의하는 기준으로, "inconsistent" 또는 "distance"로 지정됩니다.

예: Criterion="distance"

데이터형: char | string

inconsistent 값을 계산할 깊이로, 숫자형 스칼라로 지정됩니다. clusterdata는 계층적 군집 트리에서 각 노드 아래 지정된 깊이까지의 불일치 값을 계산합니다.

예: Depth=3

데이터형: single | double

거리 측정법으로, 다음 표에 설명된 대로 "Distance"와 함께 pdist 함수에서 허용하는 거리 측정법이 쉼표로 구분되어 지정됩니다.

메트릭설명
"euclidean"

유클리드 거리(디폴트 값)

"squaredeuclidean"

제곱 유클리드 거리입니다. (이 옵션은 효율성을 위해서만 제공됩니다. 삼각 부등식을 충족하지 않습니다.)

"seuclidean"

표준화된 유클리드 거리입니다. 관측값 간의 각 좌표 차이는 표준편차 S = std(X,"omitnan")의 대응 요소로 나누어져 스케일링됩니다.

"mahalanobis"

마할라노비스 거리로, X의 표본 공분산 C = cov(X,"omitrows")를 사용합니다.

"cityblock"

도시 블록 거리

"minkowski"

민코프스키 거리입니다. 디폴트 지수는 2입니다. 다른 지수 P를 사용하려면 "minkowski" 뒤에 P를 지정하십시오("minkowski",P). 여기서 P는 양의 스칼라 값입니다.

"chebychev"

체비쇼프 거리(최대 좌표 차이)

"cosine"

1에서 점 간의 끼인각에 대한 코사인을 뺀 값(벡터로 처리됨)

"correlation"

1에서 점 간의 표본 상관을 뺀 값(일련의 값으로 처리됨)

"hamming"

해밍 거리로, 서로 다른 좌표의 비율

"jaccard"

0이 아닌 두 좌표의 값이 서로 다른 비율인 자카드 계수를 1에서 뺀 값

"spearman"

1에서 관측값 간 표본 스피어만의 순위 상관 계수를 뺀 값(일련의 값으로 처리됨)

@distfun

사용자 지정 거리 함수 핸들입니다. 거리 함수의 형식은 다음과 같습니다.

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
여기서

  • ZI는 단일 관측값을 포함하는 1×n 벡터입니다.

  • ZJ는 여러 관측값을 포함하는 m2×n 행렬입니다. distfun은 임의 개수의 관측값을 갖는 행렬 ZJ를 받아야 합니다.

  • D2는 거리로 구성된 m2×1 벡터이고, D2(k)는 관측값 ZIZJ(k,:) 간의 거리입니다.

데이터가 희소 형식이 아닌 경우 일반적으로 함수 핸들 대신 내장 distance를 사용하는 것이 더 빠릅니다.

자세한 내용은 거리 측정법 항목을 참조하십시오.

예: clusterdata(X,"Distance","minkowski",3,MaxClust=4)

데이터형: char | string | function_handle

군집 간 거리를 계산하는 알고리즘으로, 다음 표에 설명된 대로 linkage 함수에서 사용하는 알고리즘으로 지정됩니다.

알고리즘설명
"average"

비가중 평균 거리(UPGMA)

"centroid"

중심 거리(UPGMC)로, 유클리드 거리에만 적합함

"complete"

최장 거리

"median"

가중 질량 중심 거리(WPGMC)로, 유클리드 거리에만 적합함

"single"

최단 거리

"ward"

내부 제곱 거리(최소 분산 알고리즘)로, 유클리드 거리에만 적합함

"weighted"

가중 평균 거리(WPGMA)

자세한 내용은 연결 항목을 참조하십시오.

예: Linkage="median"

데이터형: char | string

메모리 절약 옵션으로, "on" 또는 "off"로 지정됩니다.

"on"으로 설정하면 clusterdata가 거리 행렬을 계산하지 않고 군집을 생성합니다. 다음 두 조건을 모두 충족하면 "on" 설정이 적용됩니다.

  • Linkage"centroid", "median" 또는 "ward"로 설정되어 있습니다.

  • Distance"euclidean"으로 설정되어 있습니다(디폴트 값).

이러한 두 가지 조건을 충족하면 X의 열 개수가 20개 이하이거나 컴퓨터에 거리 행렬을 저장하는 데 충분한 메모리가 없는 경우 SaveMemory의 디폴트 값은 "on"입니다. 그렇지 않은 경우 SaveMemory의 디폴트 값은 "off"입니다.

SaveMemory"on"인 경우 linkage 실행 시간은 차원 수(X 열의 개수)에 비례합니다. SaveMemory"off"인 경우 linkage 메모리 요구 사항은 N2에 비례합니다. 여기서 N은 관측값 개수입니다. SaveMemory에 대한 최적의 설정(시간이 가장 적게 걸림)을 선택하는 것은 문제 차원 수, 관측값 개수, 사용 가능한 메모리에 따라 달라집니다. 디폴트 SaveMemory 설정은 최적의 설정에 대한 대략적인 근삿값입니다.

예: SaveMemory="on"

데이터형: char | string

출력 인수

모두 축소

군집 인덱스로, 숫자형 열 벡터로 반환됩니다. T의 행 개수는 X의 행 개수와 동일하고, T의 각 행은 X에 있는 대응 관측값의 군집 할당을 나타냅니다.

  • Linkage"centroid" 또는 "median"인 경우 linkage는 단조적(Monotonic)이지 않은 군집 트리를 생성할 수 있습니다. 이 결과는 두 군집 rs의 합집합에서 세 번째 군집까지의 거리가 rs 간의 거리보다 작을 경우에 발생합니다. 이 경우, 디폴트 방향으로 그린 덴드로그램에서 리프로부터 루트 노드까지의 경로는 아래쪽 방향의 일부 단계를 지나게 됩니다. 이 결과를 방지하려면 Linkage를 다른 값으로 지정하십시오. 다음 이미지는 비단조적 군집 트리를 나타냅니다.

    Nonmonotonic cluster tree

    이 경우, 군집 1과 군집 3이 새 군집으로 결합되며, 이 새 군집과 군집 2 간의 거리는 군집 1과 군집 3 간의 거리보다 작습니다.

알고리즘

선택적 이름-값 인수를 지정하지 않으면 clusterdata 함수는 다음 단계를 수행합니다.

  1. pdist를 사용하여 X의 관측값 쌍 간 유클리드 거리 벡터를 생성합니다.

    Y = pdist(X,"euclidean")

  2. 군집 간 최단 거리를 계산하는 "single" 방법을 지정해서 linkage를 사용하여 Y에서 계층적 병합 군집 트리를 생성합니다.

    Z = linkage(Y,"single")

  3. cutoff를 지정하면 clusterdata 함수는 불일치 값이 cutoff보다 작을 경우 cluster를 사용하여 Z에서 군집을 정의합니다.

    T = cluster(Z,Cutoff=cutoff)

    maxclust를 지정하면 clusterdata 함수는 cluster를 사용하여 Z에서 최대 maxclust개의 군집을 찾고 "distance"를 군집 정의의 기준으로 사용합니다.

    T = cluster(Z,MaxClust=maxclust)

대체 기능

계층적 군집 트리 Z(입력 데이터 행렬 X에 대해 linkage 함수를 사용하여 생성된 출력 결과)가 있는 경우, cluster를 사용하여 Z에 대한 병합 군집화를 수행하고 X의 각 관측값(행)에 대한 군집 할당을 반환할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | | | |

도움말 항목