이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

pdist2

두 관측값 세트 간의 쌍별(Pairwise) 거리

구문

D = pdist2(X,Y,Distance)
D = pdist2(X,Y,Distance,DistParameter)
D = pdist2(___,Name,Value)
[D,I] = pdist2(___,Name,Value)

설명

예제

D = pdist2(X,Y,Distance)Distance로 지정된 측정법을 사용하여 XY의 각 관측값 쌍 간의 거리를 반환합니다.

예제

D = pdist2(X,Y,Distance,DistParameter)DistanceDistParameter로 지정된 측정법을 사용하여 거리를 반환합니다. Distance'seuclidean', 'minkowski' 또는 'mahalanobis'인 경우에만 DistParameter를 지정할 수 있습니다.

D = pdist2(___,Name,Value)는 위에 열거된 구문의 인수 외에, 이름-값 쌍의 인수 'Smallest' 또는 'Largest' 중 하나를 사용하여 추가 옵션을 지정합니다.

예를 들면 다음과 같습니다.

  • D = pdist2(X,Y,Distance,'Smallest',K)Distance로 지정된 측정법을 사용하여 거리를 계산하고 Y의 관측값에서 X의 관측값까지의 쌍별 거리가 최소인 K개를 오름차순으로 반환합니다.

  • D = pdist2(X,Y,Distance,DistParameter,'Largest',K)DistanceDistParameter로 지정된 측정법을 사용하여 거리를 계산하고 K개의 최대 쌍별 거리를 내림차순으로 반환합니다.

예제

[D,I] = pdist2(___,Name,Value)는 위에 열거된 구문의 인수 중 하나를 사용하여 행렬 I도 반환합니다. 행렬 ID의 거리에 대응되는 X 내 관측값의 인덱스를 포함합니다.

예제

모두 축소

세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.

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

유클리드 거리를 계산합니다. 입력 인수 Distance의 디폴트 값은 'euclidean'입니다. 이름-값 쌍의 인수를 사용하지 않고 유클리드 거리를 계산할 때에는 Distance를 지정하지 않아도 됩니다.

D = pdist2(X,Y)
D = 3×3

    0.5387    0.8018    0.1538
    0.7100    0.5951    0.3422
    0.8805    0.4242    1.2050

D(i,j)X의 관측값 iY의 관측값 j 간의 쌍별(Pairwise) 거리를 나타냅니다.

세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.

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

디폴트 지수 2를 사용하여 민코프스키 거리를 계산합니다.

D1 = pdist2(X,Y,'minkowski')
D1 = 3×3

    0.5387    0.8018    0.1538
    0.7100    0.5951    0.3422
    0.8805    0.4242    1.2050

지수로 1을 사용하여 민코프스키 거리를 계산합니다. 이는 도시 블록 거리와 같습니다.

D2 = pdist2(X,Y,'minkowski',1)
D2 = 3×3

    0.5877    1.0236    0.2000
    0.9598    0.8337    0.3899
    1.0189    0.4800    1.7036

D3 = pdist2(X,Y,'cityblock')
D3 = 3×3

    0.5877    1.0236    0.2000
    0.9598    0.8337    0.3899
    1.0189    0.4800    1.7036

세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.

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

Y의 각 관측값에서 X의 관측값까지의 쌍별 유클리드 거리가 최소인 두 개를 구합니다.

[D,I] = pdist2(X,Y,'euclidean','Smallest',2)
D = 2×3

    0.5387    0.4242    0.1538
    0.7100    0.5951    0.3422

I = 2×3

     1     3     1
     2     2     2

Y의 각 관측값에 대해 pdist2X에 포함된 모든 관측값까지의 거리를 계산하고 비교하여 두 개의 최소 거리를 구합니다. 이 함수는 그런 다음 거리를 D의 각 열에서 오름차순으로 정렬합니다. ID의 거리에 대응되는 X 내 관측값의 인덱스를 포함합니다.

NaN 값을 갖는 좌표를 무시하는 사용자 지정 거리 함수를 정의하고 이 사용자 지정 거리 함수를 사용하여 쌍별 거리를 계산합니다.

세 개의 관측값과 세 개의 변수를 갖는 두 행렬을 생성합니다.

rng('default') % For reproducibility
X = rand(3,3)
Y = [X(:,1:2) rand(3,1)]
X =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575


Y =

    0.8147    0.9134    0.9649
    0.9058    0.6324    0.1576
    0.1270    0.0975    0.9706

X와 Y의 처음 두 열은 서로 동일합니다. X(1,1)이 결측되었다고 가정합니다.

X(1,1) = NaN
X =

       NaN    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

해밍 거리를 계산합니다.

D1 = pdist2(X,Y,'hamming')
D1 =

       NaN       NaN       NaN
    1.0000    0.3333    1.0000
    1.0000    1.0000    0.3333

X의 관측값 i 또는 Y의 관측값 jNaN 값을 포함하는 경우, 함수 pdist2ij 간의 쌍별(Pairwise) 거리로 NaN을 반환합니다. 따라서, D1(1,1), D1(1,2), D1(1,3)은 NaN 값입니다.

NaN 값이 갖는 좌표를 무시하는 사용자 지정 거리 함수 nanhamdist를 정의하고 해밍 거리를 계산합니다. 대량의 관측값을 사용하는 경우에는 데이터 좌표를 순환하여 더욱 빠르게 거리를 계산할 수 있습니다.

function D2 = nanhamdist(XI,XJ)  
%NANHAMDIST Hamming distance ignoring coordinates with NaNs
[m,p] = size(XJ);
nesum = zeros(m,1);
pstar = zeros(m,1);
for q = 1:p
    notnan = ~(isnan(XI(q)) | isnan(XJ(:,q)));
    nesum = nesum + ((XI(q) ~= XJ(:,q)) & notnan);
    pstar = pstar + notnan;
end
D2 = nesum./pstar; 

nanhamdist를 사용하고 pdist2의 입력 인수로 함수 핸들을 전달하여 거리를 계산합니다.

D2 = pdist2(X,Y,@nanhamdist)
D2 =

    0.5000    1.0000    1.0000
    1.0000    0.3333    1.0000
    1.0000    1.0000    0.3333

입력 인수

모두 축소

입력 데이터로, 숫자형 행렬로 지정됩니다. X는 mxxn 행렬이고 Y는 myxn 행렬입니다. 행은 개별 관측값에 대응되고, 열은 개별 변수에 대응됩니다.

데이터형: single | double

거리 측정법으로, 다음 표에 설명된 대로 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.

설명
'euclidean'

유클리드 거리입니다(디폴트 값).

'squaredeuclidean'

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

'seuclidean'

표준화된 유클리드 거리입니다. 관측값 간의 각 좌표 차이는 표준편차 S = nanstd(X)의 대응 요소로 나누어져 스케일링됩니다. S에 대해 다른 값을 지정하려면 DistParameter를 사용하십시오.

'mahalanobis'

X의 표본 공분산 C = nancov(X)를 사용하는 마할라노비스 거리입니다. C에 대해 다른 값을 지정하려면 DistParameter를 사용하십시오. 여기서 행렬 C는 양의 정부호 대칭 행렬입니다.

'cityblock'

도시 블록 거리입니다.

'minkowski'

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

'chebychev'

체비쇼프 거리(최대 좌표 차이)입니다.

'cosine'

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

'correlation'

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

'hamming'

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

'jaccard'

1에서 서로 다른, 0이 아닌 좌표의 백분율인 자카드 계수를 뺀 값입니다.

'spearman'

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

@distfun

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

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

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

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

  • D2는 거리에 대한 m2x1 벡터이고, D2(k)는 관측값 ZIZJ(k,:) 간의 거리입니다.

데이터가 희소가 아닌 경우 일반적으로 함수 핸들 대신 내장 거리 함수를 사용하면 더욱 신속하게 거리를 계산할 수 있습니다.

정의는 거리 측정법 항목을 참조하십시오.

'seuclidean', 'minkowski' 또는 'mahalanobis'를 사용하는 경우, 입력 인수 DistParameter를 추가로 지정하여 이러한 측정법을 제어할 수 있습니다. DistParameter의 디폴트 값을 사용한다면 다른 측정법과 같은 방식으로 이러한 측정법을 사용할 수도 있습니다.

예: 'minkowski'

거리 측정법 파라미터 값으로, 양의 스칼라, 숫자형 벡터 또는 숫자형 행렬로 지정됩니다. 이 인수는 Distance'seuclidean', 'minkowski' 또는 'mahalanobis'로 지정하는 경우에만 유효합니다.

  • Distance'seuclidean'이면 DistParameter는 각 차원에 대한 스케일링 인자로 구성된 벡터이며 양의 벡터로 지정됩니다. 디폴트 값은 nanstd(X)입니다.

  • Distance'minkowski'이면 DistParameter는 민코프스키 거리의 지수이며 양의 스칼라로 지정됩니다. 디폴트 값은 2입니다.

  • Distance'mahalanobis'이면 DistParameter는 공분산 행렬이며 숫자형 행렬로 지정됩니다. 디폴트 값은 nancov(X)입니다. DistParameter는 양의 정부호 대칭 행렬이어야 합니다.

예: 'minkowski',3

데이터형: single | double

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정할 수 있습니다. 여기서 Name은 인수 이름이고 Value는 이에 대응하는 값입니다. Name은 따옴표로 묶어야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 원하는 순서로 지정할 수 있습니다.

예: 'Smallest',K 또는 'Largest',K입니다. 'Smallest''Largest'를 동시에 사용할 수는 없습니다.

구할 최소 거리의 개수로, 'Smallest'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 'Smallest'를 지정하면 pdist2가 거리를 D의 각 열에서 오름차순으로 정렬합니다.

예: 'Smallest',3

데이터형: single | double

구할 최대 거리의 개수로, 'Largest'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 'Largest'를 지정하면 pdist2가 거리를 D의 각 열에서 내림차순으로 정렬합니다.

예: 'Largest',3

데이터형: single | double

출력 인수

모두 축소

쌍별 거리로, 숫자형 행렬로 반환됩니다.

'Smallest' 또는 'Largest'를 지정하지 않을 경우 D는 mxxmy 행렬입니다. 여기서 mx 및 my는 각각 XY에 포함된 관측값 개수입니다. D(i,j)X의 관측값 iY의 관측값 j 간의 거리입니다. 내장 거리 함수의 경우, X의 관측값 i 또는 Y의 관측값 j가 NaN을 포함하면 D(i,j)NaN이 됩니다.

'Smallest' 또는 'Largest'K로 지정하는 경우, DKxmy 행렬입니다. DY의 관측값에서 X의 관측값까지의 쌍별 거리가 최소인 K개 또는 최대인 K개를 포함합니다. Y의 각 관측값에 대해 pdist2X의 모든 관측값까지의 거리 값을 계산하고 비교하여 K개의 최소 거리 또는 최대 거리를 구합니다. K가 mx보다 클 경우, pdist2는 mxxmy 행렬을 반환합니다.

정렬 인덱스로, 양의 정수 행렬로 반환됩니다. ID와 크기가 같습니다. ID의 거리에 대응되는 X 내 관측값의 인덱스를 포함합니다.

세부 정보

모두 축소

거리 측정법

거리 측정법은 두 관측값 간의 거리를 정의하는 함수입니다. pdist2는 다음과 같은 다양한 거리 측정법을 지원합니다. 유클리드 거리, 표준화된 유클리드 거리, 마할라노비스 거리, 도시 블록 거리, 민코프스키 거리, 체비쇼프 거리, 코사인 거리, 상관관계 거리, 해밍 거리, 자카드 거리, 스피어만 거리.

mx개(1xn) 행 벡터 x1, x2, ..., xmx로 처리되는 mxxn 데이터 행렬 X와 my개(1xn) 행 벡터 y1, y2, ...,ymy로 처리되는 myxn 데이터 행렬 Y가 주어진 경우, 벡터 xs와 yt 간의 다양한 거리는 다음과 같이 정의됩니다.

  • 유클리드 거리(Euclidean Distance)

    dst2=(xsyt)(xsyt).

    유클리드 거리는 p = 2인 민코프스키 거리의 특수한 사례입니다.

  • 표준화된 유클리드 거리

    dst2=(xsyt)V1(xsyt),

    여기서 V는 j번째 대각선 요소가 (S(j))2인 nxn 대각 행렬입니다. S는 각 차원의 스케일링 인자로 구성된 벡터입니다.

  • 마할라노비스 거리

    dst2=(xsyt)C1(xsyt),

    여기서 C는 공분산 행렬입니다.

  • 도시 블록 거리

    dst=j=1n|xsjytj|.

    도시 블록 거리는 p = 1인 민코프스키 거리의 특수한 사례입니다.

  • 민코프스키 거리

    dst=j=1n|xsjytj|pp.

    p = 1인 특수한 사례에서 민코프스키 거리는 도시 블록 거리와 동일합니다. p = 2인 특수한 사례에서 민코프스키 거리는 유클리드 거리와 동일합니다. p = ∞인 특수한 사례에서 민코프스키 거리는 체비쇼프 거리와 동일합니다.

  • 체비쇼프 거리

    dst=maxj{|xsjytj|}.

    체비쇼프 거리는 p = ∞인 민코프스키 거리의 특수한 사례입니다.

  • 코사인 거리

    dst=(1xsyt(xsxs)(ytyt)).

  • 상관관계 거리

    dst=1(xsx¯s)(yty¯t)(xsx¯s)(xsx¯s)(yty¯t)(yty¯t),

    여기서는 다음을 조건으로 합니다.

    x¯s=1njxsj

    y¯t=1njytj.

  • 해밍 거리(Hamming Distance)

    dst=(#(xsjytj)/n).

  • 자카드 거리(Jaccard Distance)

    dst=#[(xsjytj)((xsj0)(ytj0))]#[(xsj0)(ytj0)].

  • 스피어만 거리(Spearman Distance)

    dst=1(rsr¯s)(rtr¯t)(rsr¯s)(rsr¯s)(rtr¯t)(rtr¯t),

    여기서는 다음을 조건으로 합니다.

    • rsj는 x1j, x2j, ...xmx,j에 대해 얻은 xsj의 순위로, tiedrank에 의해 계산됩니다.

    • rtj는 y1j, y2j, ...ymy,j에 대해 얻은 ytj의 순위로, tiedrank에 의해 계산됩니다.

    • rs 및 rt는 xs와 yt로 구성된 좌표별 순위 벡터입니다. 즉, rs = (rs1, rs2, ... rsn)이고 rt = (rt1, rt2, ... rtn입니다.

    • r¯s=1njrsj=(n+1)2.

    • r¯t=1njrtj=(n+1)2.

확장 기능

R2010a에 개발됨