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 =

       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 = nansum(sqdx,2).*n./nstar; % Correction for missing coordinates
D2 = sqrt(D2squared);

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

D2 = pdist(X,@naneucdist)
D2 =

    0.3974    1.1538    0.9448

Входные параметры

свернуть все

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

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

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

ЗначениеОписание
'euclidean'

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

'squaredeuclidean'

Придал Евклидову расстоянию квадратную форму. (Эта возможность предоставляется для КПД только. Это не удовлетворяет треугольному неравенству.)

'seuclidean'

Стандартизированное Евклидово расстояние. Каждое координатное различие между наблюдениями масштабируется путем деления на соответствующий элемент стандартного отклонения, S = nanstdX. Используйте DistParameter задавать другое значение для S.

'mahalanobis'

Расстояние Mahalanobis с помощью выборочной ковариации X, C = nancovX. Используйте DistParameter задавать другое значение для C, где матричный C симметрично и положительный определенный.

'cityblock'

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

'minkowski'

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

'chebychev'

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

'cosine'

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

'correlation'

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

'hamming'

Расстояние Хемминга, которое является процентом координат, которые отличаются.

'jaccard'

Один минус коэффициент 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 вектор масштабных коэффициентов для каждой размерности, заданной как положительный вектор. Значением по умолчанию является nanstd (X).

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

  • Если Distance 'mahalanobis', DistParameter ковариационная матрица, заданная как числовая матрица. Значением по умолчанию является nancov(X). 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-by-m матрица расстояния в порядке следования столбцов. Попарное расстояние между наблюдениями i и j находится в D((i-1)*(m-i/2)+j-i) для ij.

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

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

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

Больше о

свернуть все

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

Метрика расстояния является функцией, которая задает расстояние между двумя наблюдениями. pdist поддержки различные метрики расстояния: Евклидово расстояние, стандартизированное Евклидово расстояние, расстояние Mahalanobis, расстояние городского квартала, расстояние Минковскего, расстояние Чебычева, расстояние косинуса, расстояние корреляции, Расстояние Хемминга, расстояние Jaccard и расстояние Копьеносца.

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

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

    dst2=(xsxt)(xsxt).

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

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

    dst2=(xsxt)V1(xsxt),

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

  • Расстояние Mahalanobis

    dst2=(xsxt)C1(xsxt),

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

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

    dst=j=1n|xsjxtj|.

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

  • Расстояние Минковскего

    dst=j=1n|xsjxtj|pp.

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

  • Расстояние Чебычева

    dst=max j{|xsjxtj|}.

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

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

    dst=1xsxt(xsxs)(xtxt).

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

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

    где

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

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

    dst=(#(xsjxtj)/n).

  • Расстояние Jaccard

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

  • Расстояние копьеносца

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

    где

    • rsj является рангом xsj, принятого x 1j, x 2j... xmj, как вычислено tiedrank.

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

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

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

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

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