Main Content

pdist

Distancia por pares entre pares de observaciones

Descripción

ejemplo

D = pdist(X) devuelve la distancia euclidiana entre pares de observaciones de X.

ejemplo

D = pdist(X,Distance) devuelve la distancia usando el método especificado por Distance.

ejemplo

D = pdist(X,Distance,DistParameter) devuelve la distancia usando el método especificado por Distance y DistParameter. Puede especificar DistParameter solo cuando Distance sea 'seuclidean', 'minkowski' o 'mahalanobis'.

Ejemplos

contraer todo

Calcule la distancia euclidiana entre pares de observaciones y convierta el vector de distancia en una matriz usando squareform.

Cree una matriz con tres observaciones y dos variables.

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

Calcule la distancia euclidiana.

D = pdist(X)
D = 1×3

    0.2954    1.0670    0.9448

Las distancias por pares se establecen en este orden: (2,1), (3,1), (3,2). Puede ubicar la distancia entre las observaciones i y j fácilmente usando squareform.

Z = squareform(D)
Z = 3×3

         0    0.2954    1.0670
    0.2954         0    0.9448
    1.0670    0.9448         0

squareform devuelve una matriz simétrica donde Z(i,j) corresponde a la distancia por pares entre las observaciones i y j. Por ejemplo, puede encontrar la distancia entre las observaciones 2 y 3.

Z(2,3)
ans = 0.9448

Pase Z a la función squareform para reproducir la salida de la función pdist.

y = squareform(Z)
y = 1×3

    0.2954    1.0670    0.9448

Las salidas y de squareform y D de pdist son la misma.

Cree una matriz con tres observaciones y dos variables.

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

Calcule la distancia de Minkowski con el exponente predeterminado 2.

D1 = pdist(X,'minkowski')
D1 = 1×3

    0.2954    1.0670    0.9448

Calcule la distancia de Minkowski con un exponente de 1, que es igual a la distancia Manhattan.

D2 = pdist(X,'minkowski',1)
D2 = 1×3

    0.3721    1.5036    1.3136

D3 = pdist(X,'cityblock')
D3 = 1×3

    0.3721    1.5036    1.3136

Establezca una función de distancia personalizada que ignore las coordenadas con valores NaN y calcule la distancia por pares usando esa función.

Cree una matriz con tres observaciones y dos variables.

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

Supongamos que el primer elemento de la primera observación no está presente.

X(1,1) = NaN;

Calcule la distancia euclidiana.

D1 = pdist(X)
D1 = 1×3

       NaN       NaN    0.9448

Si la observación i o j contienen valores NaN, la función pdist devuelve NaN para la distancia por pares entre i y j. Por tanto, D1(1), D1(2) y las distancias por pares (2,1) y (3,1) son valores NaN.

Establezca una función de distancia personalizada naneucdist que ignore las coordenadas con valores NaN y devuelva la distancia euclidiana.

function D2 = naneucdist(XI,XJ)  
%NANEUCDIST Euclidean distance ignoring coordinates with NaNs
n = size(XI,2);
sqdx = (XI-XJ).^2;
nstar = sum(~isnan(sqdx),2); % Number of pairs that do not contain NaNs
nstar(nstar == 0) = NaN; % To return NaN if all pairs include NaNs
D2squared = sum(sqdx,2,'omitnan').*n./nstar; % Correction for missing coordinates
D2 = sqrt(D2squared);

Calcule la distancia con naneucdist pasando el identificador de la función como un argumento de entrada de pdist.

D2 = pdist(X,@naneucdist)
D2 = 1×3

    0.3974    1.1538    0.9448

Argumentos de entrada

contraer todo

Datos de entrada, especificados como una matriz numérica con un tamaño de m por n. Las filas corresponden a observaciones individuales, mientras que las columnas corresponden a variables individuales.

Tipos de datos: single | double

Métrica de distancia, especificada como un vector de caracteres, un escalar de cadena o un identificador de función, tal y como se describe en la tabla siguiente.

ValorDescripción
'euclidean'

Distancia euclidiana (valor predeterminado).

'squaredeuclidean'

Distancia euclidiana cuadrada. (Esta opción solo se ofrece para mejorar la eficiencia. No resuelve la desigualdad triangular).

'seuclidean'

Distancia euclidiana estandarizada. Cada diferencia de las coordenadas entre las observaciones se escala dividiendo por el elemento correspondiente de la desviación estándar, S = std(X,'omitnan'). Use DistParameter para especificar otro valor de S.

'mahalanobis'

La distancia de Mahalanobis, usando la covarianza de muestra de X, C = cov(X,'omitrows'). Use DistParameter para especificar otro valor de C, donde la matriz C es simétrica y definida positiva.

'cityblock'

Distancia Manhattan.

'minkowski'

Distancia de Minkowski. El exponente predeterminado es 2. Use DistParameter para especificar un exponente diferente P, donde P es un valor de escalar positivo del exponente.

'chebychev'

Distancia de Chebyshov (diferencia de coordenada máxima).

'cosine'

Uno menos el coseno del ángulo incluido entre puntos (tratados como vectores).

'correlation'

Uno menos la correlación de la muestra entre los puntos (tratados como secuencias de valores).

'hamming'

Distancia de Hamming, que es el porcentaje de coordenadas que difieren.

'jaccard'

Uno menos el coeficiente de Jaccard, que es el porcentaje de coordenadas, que no son cero, que difieren.

'spearman'

Uno menos la correlación del coeficiente de Spearman entre observaciones (tratadas como secuencias de valores).

@distfun

Identificador de función de la distancia personalizada. Una función de distancia tiene esta forma:

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
donde

  • ZI es un vector de 1 por n que contiene una sola observación.

  • ZJ es una matriz de m2 por n que contiene varias observaciones. distfun debe aceptar una matriz ZJ con un número arbitrario de observaciones.

  • D2 es un vector de distancias de m2 por 1, mientras que D2(k) corresponde a la distancia entre las observaciones ZI y ZJ(k,:).

Si sus datos no son escasos, por lo general, podrá calcular la distancia más rápido usando una distancia integrada en lugar de un identificador de función.

Para ver las definiciones, consulte Métricas de distancia.

Cuando use 'seuclidean', 'minkowski' o 'mahalanobis', podrá especificar un argumento de entrada adicional DistParameter para controlar estas métricas. También puede usar estas métricas de la misma manera que el resto de métricas con un valor predeterminado de DistParameter.

Ejemplo: 'minkowski'

Los valores del parámetro de una métrica de distancia, especificados como un escalar positivo, un vector numérico o una matriz numérica. Este argumento solo es válido cuando se especifica Distance como 'seuclidean', 'minkowski' o 'mahalanobis'.

  • Si Distance es 'seuclidean', DistParameter es un vector de factores de escalado de cada dimensión, especificado como un vector positivo. El valor predeterminado es std(X,'omitnan').

  • Si Distance es 'minkowski', DistParameter es el exponente de la distancia de Minkowski, especificado como un escalar positivo. El valor predeterminado es 2.

  • Si Distance es 'mahalanobis', DistParameter es una matriz de covarianzas, especificada cono una matriz numérica. El valor predeterminado es cov(X,'omitrows'). DistParameter debe ser simétrica y definida positiva.

Ejemplo: 'minkowski',3

Tipos de datos: single | double

Argumentos de salida

contraer todo

Distancias por pares, devueltas como un vector fila numérico con una longitud de m(m–1)/2, correspondiente a los pares de observaciones, donde m es el número de observaciones de X.

Las distancias se fijan en el orden (2,1), (3,1), ..., (m,1), (3,2), ..., (m,2), ..., (m,m–1), es decir, el triángulo inferior inzquierdo de la matriz de distancia de m por m en el orden de la columna. La distancia por pares entre las observaciones i y j está en D((i-1)*(m-i/2)+j-i) de ij.

Puede convertir D en una matriz simétrica usando la función squareform. Z = squareform(D) devuelve una matriz de m por m donde Z(i,j) corresponde a la distancia por pares entre las observaciones i y j.

Si las observaciones i o j contienen valores NaN, el valor correspondiente de D es NaN para las funciones de distancia integradas.

D se suele usar como una matriz de diferenciación en la creación de clusters o en el escalado multidimensional. Para obtener más información, consulte Hierarchical Clustering y las páginas de referencia de las funciones cmdscale, cophenet, linkage, mdscale y optimalleaforder. Estas funciones toman D como un argumento de entrada.

Más acerca de

contraer todo

Métricas de distancia

Una métrica de distancia es una función que define la distancia entre dos observaciones. pdist admite varias métricas de distancia: distancia euclidiana, distancia euclidiana estandarizada, distancia de Mahalanobis, distancia Manhattan, distancia de Minkowski, distancia de Chebyshov, distancia del coseno, distancia de correlación, distancia de Hamming, distancia de Jaccard y distancia de Spearman.

Si tenemos una matriz de datos de m por n X, que se trata como vectores fila m (1 por n) x1, x2, ..., xm, las diferentes distancias entre el vector xs y xt se definen de esta manera:

  • Distancia euclidiana

    dst2=(xsxt)(xsxt).

    La distancia euclidiana es un caso especial de la distancia de Minkowski, donde p = 2.

  • Distancia euclidiana estandarizada

    dst2=(xsxt)V1(xsxt),

    donde V es la matriz diagonal de n por n cuyo elemento diagonal número j es (S(j))2, donde S es un vector de factores de escalado de cada dimensión.

  • Distancia de Mahalanobis

    dst2=(xsxt)C1(xsxt),

    donde C es la matriz de covarianzas.

  • Distancia Manhattan

    dst=j=1n|xsjxtj|.

    La distancia Manhattan es un caso especial de la distancia de Minkowski, donde p = 1.

  • Distancia de Minkowski

    dst=j=1n|xsjxtj|pp.

    Para el caso especial de p = 1, la distancia de Minkowski ofrece la distancia Manhattan. Para el caso especial de p = 2, la distancia de Minkowski ofrece la distancia euclidiana. Para el caso especial de p = ∞, la distancia de Minkowski ofrece la distancia de Chebyshov.

  • Distancia de Chebyshov

    dst=maxj{|xsjxtj|}.

    La distancia de Chebyshov es un caso especial de la distancia de Minkowski, donde p = ∞.

  • Distancia del coseno

    dst=1xsxt(xsxs)(xtxt).

  • Distancia de correlación

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

    donde

    x¯s=1njxsj y x¯t=1njxtj.

  • Distancia de Hamming

    dst=(#(xsjxtj)/n).

  • Distancia de Jaccard

    dst=#[(xsjxtj)((xsj0)(xtj0))]#[(xsj0)(xtj0)].

  • Distancia de Spearman

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

    donde

    • rsj es el rango de xsj llevado a x1j, x2j, ...xmj, tal y como lo calcula tiedrank.

    • rs y rt son los vectores rango basados en coordenadas de xs y xt, es decir, rs = (rs1, rs2, ... rsn).

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

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

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a