exponenta event banner

pdist

Попарное расстояние между парами наблюдений

Описание

пример

D = pdist(X) возвращает евклидово расстояние между парами наблюдений в X.

пример

D = pdist(X,Distance) возвращает расстояние с помощью метода, указанного Distance.

пример

D = pdist(X,Distance,DistParameter) возвращает расстояние с помощью метода, указанного Distance и DistParameter. Можно указать DistParameter только когда Distance является 'seuclidean', 'minkowski', или 'mahalanobis'.

Примеры

свернуть все

Вычислите евклидово расстояние между парами наблюдений и преобразуйте вектор расстояния в матрицу с помощью squareform.

Создайте матрицу с тремя наблюдениями и двумя переменными.

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

Вычислите евклидово расстояние.

D = pdist(X)
D = 1×3

    0.2954    1.0670    0.9448

Попарные расстояния расположены в порядке (2,1), (3,1), (3,2). Можно легко определить расстояние между наблюдениями i и j с помощью squareform.

Z = squareform(D)
Z = 3×3

         0    0.2954    1.0670
    0.2954         0    0.9448
    1.0670    0.9448         0

squareform возвращает симметричную матрицу, где Z(i,j) соответствует попарному расстоянию между наблюдениями i и j. Например, можно найти расстояние между наблюдениями 2 и 3.

Z(2,3)
ans = 0.9448

Проход Z в squareform для воспроизведения выходных данных pdist функция.

y = squareform(Z)
y = 1×3

    0.2954    1.0670    0.9448

Продукция y от squareform и D от pdist одинаковые.

Создайте матрицу с тремя наблюдениями и двумя переменными.

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

Вычислите расстояние Минковского с показателем степени по умолчанию 2.

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

    0.2954    1.0670    0.9448

Вычислите расстояние Минковского с экспонентой 1, которая равна расстоянию городского блока.

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

Определение пользовательской функции расстояния, которая игнорирует координаты с помощью NaN и вычислить попарно расстояние с помощью пользовательской функции расстояния.

Создайте матрицу с тремя наблюдениями и двумя переменными.

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

Предположим, что первый элемент первого наблюдения отсутствует.

X(1,1) = NaN;

Вычислите евклидово расстояние.

D1 = pdist(X)
D1 = 1×3

       NaN       NaN    0.9448

Если наблюдение i или j содержит NaN значения, функция pdist прибыль NaN для попарного расстояния между i и j. Поэтому D1 (1) и D1 (2), попарные расстояния (2,1) и (3,1), равныNaN значения.

Определение пользовательской функции расстояния naneucdist который игнорирует координаты с NaN и возвращает евклидово расстояние.

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);

Вычислить расстояние с помощью naneucdist передав дескриптор функции в качестве входного аргумента pdist.

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

    0.3974    1.1538    0.9448

Входные аргументы

свернуть все

Входные данные, заданные как числовая матрица размером m-by-n. Строки соответствуют отдельным наблюдениям, а столбцы - отдельным переменным.

Типы данных: single | double

Метрика расстояния, заданная как вектор символа, скаляр строки или дескриптор функции, как описано в следующей таблице.

СтоимостьОписание
'euclidean'

Евклидово расстояние (по умолчанию).

'squaredeuclidean'

Квадрат евклидова расстояния. (Этот вариант предусмотрен только для эффективности. Он не удовлетворяет неравенству треугольника.)

'seuclidean'

Стандартизированное евклидово расстояние. Каждая разность координат между наблюдениями масштабируется делением на соответствующий элемент стандартного отклонения, S = std(X,'omitnan'). Использовать DistParameter чтобы указать другое значение для S.

'mahalanobis'

Расстояние Махаланобиса с использованием ковариации образца X, C = cov(X,'omitrows'). Использовать DistParameter чтобы указать другое значение для C, где матрица C является симметричным и положительным определенным.

'cityblock'

Расстояние между городскими кварталами.

'minkowski'

Минковская дистанция. Степень по умолчанию равна 2. Использовать DistParameter для указания другой степени P, где P - положительное скалярное значение экспоненты.

'chebychev'

Расстояние Чебычева (максимальная разность координат).

'cosine'

Один минус косинус включенного угла между точками (обрабатываемый как векторы).

'correlation'

Один минус выборочная корреляция между точками (обрабатываемая как последовательности значений).

'hamming'

Расстояние хэмминга, которое представляет собой процент различающихся координат.

'jaccard'

Один минус коэффициент Джаккарда, который представляет собой процент отличных от нуля координат.

'spearman'

Один минус выборка ранговой корреляции Спирмена между наблюдениями (обрабатываемыми как последовательности значений).

@distfun

Пользовательский дескриптор функции расстояния. Функция расстояния имеет вид

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
где

  • ZI является 1около-n вектор, содержащий одно наблюдение.

  • ZJ является m2около-n матрица, содержащая несколько наблюдений. distfun должен принять матрицу ZJ с произвольным числом наблюдений.

  • D2 является m2около-1 вектор расстояний, и D2(k) - расстояние между наблюдениями ZI и ZJ(k,:).

Если данные не разрежены, можно, как правило, быстрее вычислять расстояние, используя встроенное расстояние вместо дескриптора функции.

Определения см. в разделе Метрика расстояния.

При использовании 'seuclidean', 'minkowski', или 'mahalanobis', можно указать дополнительный входной аргумент DistParameter для управления этими метриками. Эти метрики можно также использовать так же, как и другие метрики со значением по умолчанию DistParameter.

Пример: 'minkowski'

Значения параметров метрики расстояния, заданные как положительный скаляр, числовой вектор или числовая матрица. Этот аргумент допустим только при указании Distance как 'seuclidean', 'minkowski', или 'mahalanobis'.

  • Если Distance является 'seuclidean', DistParameter - вектор коэффициентов масштабирования для каждого размера, заданный как положительный вектор. Значение по умолчанию: std(X,'omitnan').

  • Если Distance является 'minkowski', DistParameter - экспонента расстояния Минковского, заданная как положительный скаляр. Значение по умолчанию - 2.

  • Если Distance является 'mahalanobis', DistParameter - ковариационная матрица, заданная как числовая матрица. Значение по умолчанию: cov(X,'omitrows'). DistParameter должен быть симметричным и положительным определенным.

Пример: 'minkowski',3

Типы данных: single | double

Выходные аргументы

свернуть все

Попарные расстояния, возвращаемые как числовой вектор строки длиной m (m-1 )/2, соответствующий парам наблюдений, где m - количество наблюдений вX.

Расстояния расположены в порядке (2,1), (3,1),..., (m, 1), (3,2),..., (m, 2),..., (m, m-1), т.е. нижний левый треугольник матрицы расстояний m на m в порядке столбцов. Попарно расстояние между наблюдениями i и j находится в D ((i-1) * (m-i/2) + j-i) для i≤j.

Можно преобразовать D в симметричную матрицу с помощью squareform функция. Z = squareform(D) возвращает матрицу m-by-m, где Z(i,j) соответствует попарному расстоянию между наблюдениями i и j.

Если наблюдение i или j содержит NaNs, затем соответствующее значение в D является NaN для встроенных функций расстояния.

D обычно используется в качестве матрицы разнородности в кластеризации или многомерном масштабировании. Дополнительные сведения см. в разделе Иерархическая кластеризация и страницы ссылок на функции для cmdscale, cophenet, linkage, mdscale, и optimalleaforder. Эти функции принимают D в качестве входного аргумента.

Подробнее

свернуть все

Метрики расстояния

Метрика расстояния - это функция, определяющая расстояние между двумя наблюдениями. pdist поддерживает различные метрики расстояния: евклидово расстояние, стандартизированное евклидово расстояние, расстояние Махаланобиса, расстояние городского блока, расстояние Минковского, расстояние Чебычева, расстояние косинуса, расстояние корреляции, расстояние Хэмминга, расстояние Джаккарда и расстояние Спирмана.

Задана матрица данных m-на-n X, который рассматривается как m (1 на n) векторов строк x1, x2,..., xm, различные расстояния между вектором xs и xt определяются следующим образом:

  • Евклидово расстояние

    dst2 = (xs xt) (xs − xt) ′.

    Евклидово расстояние - частный случай расстояния Минковского, где p = 2.

  • Стандартизированное евклидово расстояние

    dst2 = (xs xt) V 1 (xs − xt) ′,

    где V - диагональная матрица n-на-n, j-й диагональный элемент которой равен (S (j)) 2, где S - вектор масштабных коэффициентов для каждой размерности.

  • Расстояние Махаланобиса

    dst2 = (xs xt) C 1 (xs − xt) ′,

    где C - ковариационная матрица.

  • Расстояние между городскими кварталами

    dst=∑j=1n'xsj−xtj|.

    Расстояние городского блока - частный случай расстояния Минковского, где p = 1.

  • Минковская дистанция

    dst=∑j=1n'xsj−xtj'pp.

    Для особого случая p = 1 расстояние Минковского даёт расстояние городского блока. Для частного случая p = 2 расстояние Минковского даёт евклидово расстояние. Для частного случая p = ∞ дистанция Минковского даёт дистанцию Чебычева.

  • Чебычевская дистанция

    dst = maxj {| xsj xtj |}.

    Дистанция Чебычева - частный случай дистанции Минковского, где p = ∞.

  • Расстояние косинуса

    dst=1−xsx′t (xsx′s) (xtx′t).

  • Корреляционное расстояние

    dst=1− (xs−x¯s) (xt−x¯t) (xs−x¯s) (xs−x¯s) (xt−x¯t) (xt−x¯t) ′,

    где

    x¯s=1n∑jxsj и x¯t=1n∑jxtj.

  • Расстояние хэмминга

    dst = (# (xsj≠xtj )/n).

  • Расстояние Яккарда

    dst = # [(xsj≠xtj) ((xsj≠0) (xtj≠0))] # [(xsj≠0) ∪ (xtj≠0)].

  • Расстояние Спирмена

    dst=1− (rs−r¯s) (rt−r¯t) (rs−r¯s) (rs−r¯s) (rt−r¯t) (rt−r¯t) ′,

    где

    • rsj - ранг xsj, взятый над x1j, x2j,... xmj, как вычислено tiedrank.

    • rs и rt являются координатными ранговыми векторами xs и xt, т.е. rs = (rs1, rs2,... rsn).

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

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

Расширенные возможности

..
Представлен до R2006a