rangesearch

Найдите всех соседей на заданном расстоянии с помощью объекта искателя

Синтаксис

Idx = rangesearch(Mdl,Y,r)
Idx = rangesearch(Mdl,Y,r,Name,Value)
[Idx,D] = rangesearch(___)

Описание

пример

Idx = rangesearch(Mdl,Y,r) поиски всех соседей (т.е. точки, строки, или наблюдения) в Mdl.X в радиусе r каждой точки (т.е. строка или наблюдение) в данных о запросе Y с помощью исчерпывающего поиска или d-дерева K. rangesearch возвращает Idx, который является вектор-столбцом индексов Mdl.X в модулях r.

пример

Idx = rangesearch(Mdl,Y,r,Name,Value) возвращает индексы наблюдения в Mdl.X в радиусе r каждого наблюдения в Y с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value. Например, можно задать, чтобы использовать различную метрику расстояния, чем хранится в Mdl.Distance или различном метрическом параметре расстояния, чем хранится в Mdl.DistParameter.

пример

[Idx,D] = rangesearch(___) дополнительно возвращает матричный D с помощью любого из входных параметров в предыдущих синтаксисах. D содержит расстояния между наблюдениями в Mdl.X в радиусе r каждого наблюдения в Y. По умолчанию функция располагает столбцы D в порядке возрастания близостью относительно метрики расстояния.

Примеры

свернуть все

rangesearch принимает, что ExhaustiveSearcher или объекты модели KDTreeSearcher ищут данные тренировки самых близких соседей данных о запросе. Модель ExhaustiveSearcher вызывает исчерпывающий алгоритм искателя, и модель KDTreeSearcher задает Kd-дерево, который использование rangesearch искать самых близких соседей.

Загрузите ирисовый набор данных Фишера. Случайным образом зарезервируйте пять наблюдений от данных для данных о запросе. Фокусируйтесь на лепестковых размерностях.

load fisheriris
rng(1); % For reproducibility
n = size(meas,1);
idx = randsample(n,5);
X = meas(~ismember(1:n,idx),3:4); % Training data
Y = meas(idx,3:4);                % Query data

Вырастите двумерное Kd-дерево по умолчанию.

MdlKDT = KDTreeSearcher(X)
MdlKDT = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'euclidean'
    DistParameter: []
                X: [145x2 double]

MdlKDT является объектом модели KDTreeSearcher. Можно изменить его перезаписываемые свойства с помощью записи через точку.

Подготовьте исчерпывающего самого близкого соседнего искателя.

MdlES = ExhaustiveSearcher(X)
MdlES = 
  ExhaustiveSearcher with properties:

         Distance: 'euclidean'
    DistParameter: []
                X: [145x2 double]

MdlES является объектом модели ExhaustiveSearcher. Это содержит опции, такие как метрика расстояния, чтобы использовать, чтобы найти самых близких соседей.

Также можно вырастить Kd-дерево или подготовить исчерпывающего самого близкого соседнего искателя, использующего createns.

Поисковые данные тренировки для самых близких соседних индексов, которые соответствуют каждому наблюдению запроса, которые являются в радиусе на 0,5 см. Проведите оба типа поисковых запросов и используйте настройки по умолчанию.

r = 0.15; % Search radius
IdxKDT = rangesearch(MdlKDT,Y,r);
IdxES = rangesearch(MdlES,Y,r);
[IdxKDT IdxES]
ans = 5x2 cell array
    {1x27 double}    {1x27 double}
    {[       13]}    {[       13]}
    {1x27 double}    {1x27 double}
    {1x2  double}    {1x2  double}
    {1x0  double}    {1x0  double}

IdxKDT и IdxES являются массивами ячеек векторов, соответствующих индексам X, которые являются в 0,15 см наблюдений в Y. Каждая строка индексных матриц соответствует наблюдению запроса.

Сравните результаты между методами.

cellfun(@isequal,IdxKDT,IdxES)
ans = 5x1 logical array

   1
   1
   1
   1
   1

В этом случае результатами является то же самое.

Постройте результаты для ирисовых диафрагм setosa.

setosaIdx = strcmp(species(~ismember(1:n,idx)),'setosa');
XSetosa = X(setosaIdx,:);
ySetosaIdx = strcmp(species(idx),'setosa');
YSetosa = Y(ySetosaIdx,:);

figure;
plot(XSetosa(:,1),XSetosa(:,2),'.k');
hold on;
plot(YSetosa(:,1),YSetosa(:,2),'*r');
for j = 1:sum(ySetosaIdx)
    c = YSetosa(j,:);
    circleFun = @(x1,x2)r^2 - (x1 - c(1)).^2 - (x2 - c(2)).^2;
    fimplicit(circleFun,[c(1) + [-1 1]*r, c(2) + [-1 1]*r],'b-')
end
xlabel 'Petal length (cm)';
ylabel 'Petal width (cm)';
title 'Setosa Petal Measurements';
legend('Observations','Query Data','Search Radius');
axis equal
hold off

Загрузите ирисовый набор данных Фишера.

load fisheriris

Удалите пять ирисовых диафрагм случайным образом из данных о предикторе, чтобы использовать в качестве набора запроса.

rng(1);                     % For reproducibility
n = size(meas,1);           % Sample size
qIdx = randsample(n,5);     % Indices of query data
X = meas(~ismember(1:n,qIdx),:);
Y = meas(qIdx,:);

Подготовьте исчерпывающего самого близкого соседнего искателя по умолчанию.

Mdl = ExhaustiveSearcher(X)
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'euclidean'
    DistParameter: []
                X: [145x4 double]

Mdl является моделью ExhaustiveSearcher.

Найдите индексы данных тренировки (X), которые являются в 0,15 см каждой точки в данных о запросе (Y). Укажите, что расстояния относительно метрики Mahalanobis.

r = 1;
Idx = rangesearch(Mdl,Y,r,'Distance','mahalanobis')
Idx = 5x1 cell array
    {1x15 double}
    {1x5  double}
    {1x6  double}
    {[       84]}
    {[       69]}

Idx{3}
ans = 1×6

     1    34    33    22    24     2

Каждая ячейка Idx соответствует наблюдению данных о запросе и содержит в X вектор индексов соседей в 0.15 см данных о запросе. rangesearch располагает индексы в порядке возрастания расстоянием. Например, с помощью расстояния Mahalanobis, вторым самым близким соседом Y(3,:) является X(34,:).

Загрузите ирисовый набор данных Фишера.

load fisheriris

Удалите пять ирисовых диафрагм случайным образом из данных о предикторе, чтобы использовать в качестве набора запроса.

rng(4);                     % For reproducibility
n = size(meas,1);           % Sample size
qIdx = randsample(n,5);     % Indices of query data
X = meas(~ismember(1:n,qIdx),:);
Y = meas(qIdx,:);

Вырастите четырехмерное Kd-дерево с помощью данных тренировки. Задайте, чтобы использовать расстояние Минковскего для нахождения самых близких соседей.

Mdl = KDTreeSearcher(X);

Mdl является моделью KDTreeSearcher. По умолчанию метрика расстояния для нахождения самых близких соседей является Евклидовой метрикой.

Найдите индексы данных тренировки (X), которые являются в 0,5 см от каждой точки в данных о запросе (Y).

r = 0.5;
[Idx,D] = rangesearch(Mdl,Y,r);

Idx и D являются массивами ячеек с пятью элементами векторов. Векторные значения в Idx являются индексами в X. Индексы X представляют наблюдения, которые являются в 0,5 см данных о запросе, Y. D содержит расстояния, которые соответствуют наблюдениям.

Отобразите результаты для наблюдения запроса 3.

Idx{3}
ans = 1×2

   127   122

D{3}
ans = 1×2

    0.2646    0.4359

Самым близким наблюдением к Y(3,:) является X(127,:), который является 0.2646 cm далеко. Следующим ближайшим является X(122,:), который является 0.4359 cm далеко. Все другие наблюдения больше, чем 0.5 cm далеко от Y(5,:).

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

свернуть все

Самый близкий соседний искатель, заданный как ExhaustiveSearcher или объект модели KDTreeSearcher, соответственно.

Если Mdl является моделью ExhaustiveSearcher, то поиски rangesearch самых близких соседей, использующих исчерпывающий поиск. В противном случае rangesearch использует выращенное d-дерево K, чтобы искать самых близких соседей.

Запросите данные, заданные как числовая матрица.

Y является m-by-K матрица. Строки Y соответствуют наблюдениям (т.е. примеры), и столбцы соответствуют предикторам (т.е. переменные или функции). Y должен иметь одинаковое число столбцов как данные тренировки, хранимые в Mdl.X.

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

Поисковый радиус вокруг каждой точки в данных о запросе, заданных как неотрицательный скаляр.

rangesearch находит все наблюдения в Mdl .X, которые являются на расстоянии r каждого наблюдения в Y. Свойство Mdl.Distance хранит расстояние.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Distance','minkowski','P',3 задает, чтобы найти все наблюдения в Mdl.X на расстоянии r каждого наблюдения в Y, с помощью метрики расстояния Минковскего с экспонентой 3.

Для обоих самых близких соседних искателей

свернуть все

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

Для обоих типов самых близких соседних искателей rangesearch поддерживает эти метрики расстояния.

ЗначениеОписание
'chebychev'Расстояние Чебычева (максимум координируют различие).
'cityblock'Расстояние городского квартала.
'euclidean'Евклидово расстояние.
'minkowski'Расстояние Минковскего. Экспонента по умолчанию равняется 2. Чтобы задать различную экспоненту, используйте аргумент пары "имя-значение" 'P'.

Если Mdl является объектом модели ExhaustiveSearcher, то rangesearch также поддерживает эти метрики расстояния.

ЗначениеОписание
'correlation'Один минус демонстрационная линейная корреляция между наблюдениями (обработанный как последовательности значений).
'cosine'Один минус косинус включенного угла между наблюдениями (обработанный как векторы - строки).
'hamming'Расстояние Хемминга, которое является процентом координат, которые отличаются.
'jaccard'Один минус коэффициент Jaccard, который является процентом ненулевых координат, которые отличаются.
'mahalanobis'Расстояние Mahalanobis, вычисленное использование положительной определенной ковариационной матрицы. Чтобы изменить значение ковариационной матрицы, используйте аргумент пары "имя-значение" 'Cov'.
'seuclidean'Стандартизированное Евклидово расстояние. Каждое координатное различие между строками в Mdl.X и матрице запроса масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из Mdl.X. Чтобы задать другое масштабирование, используйте аргумент пары "имя-значение" 'Scale'.
'spearman'Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений).

Если Mdl является объектом модели ExhaustiveSearcher, то можно также задать указатель на функцию для пользовательской метрики расстояния при помощи @ (например, @distfun). Пользовательская функция расстояния должна:

  • Имейте форму function D2 = distfun(ZI,ZJ).

  • Возьмите в качестве аргументов:

    • 1 K векторным ZI, содержащим одну строку от Mdl.X или Y, где K является количеством столбцов Mdl.X.

    • m-by-K матричный ZJ, содержащий несколько строк Mdl.X или Y, где m является положительным целым числом.

  • Возвратите m-by-1 вектор расстояний D2, где D2(j) является расстоянием между наблюдениями ZI и ZJ(j,:).

Для получения дополнительной информации смотрите Метрики Расстояния.

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

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

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

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

Отметьте, чтобы отсортировать возвращенные индексы согласно расстоянию, заданному как пара, разделенная запятой, состоящая из 'SortIndices' и или true (1) или false (0).

Для более быстрой производительности, когда Y содержит много наблюдений, которые имеют много самых близких точек, можно установить SortIndices на false. В этом случае rangesearch возвращает индексы самых близких точек без определенного порядка. Когда SortIndices является true, функция располагает индексы самых близких точек в порядке возрастания расстоянием.

Пример: 'SortIndices',false

Типы данных: логический

Для исчерпывающих самых близких соседних искателей

свернуть все

Ковариационная матрица для метрики расстояния Mahalanobis, заданной как пара, разделенная запятой, состоящая из 'Cov' и положительной определенной матрицы. Cov является K-by-K матрица, где K является количеством столбцов Mdl.X. Если вы задаете Cov и не задаете ' Distance ','mahalanobis', то rangesearch возвращает сообщение об ошибке.

Пример: 'Cov',eye(3)

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

Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния, заданной как пара, разделенная запятой, состоящая из 'Scale' и неотрицательного числового вектора. Scale имеет длину K, где K является количеством столбцов Mdl.X.

Программное обеспечение масштабирует каждое различие между обучением и данными о запросе с помощью соответствующего элемента Scale. Если вы задаете Scale и не задаете ' Distance ','seuclidean', то rangesearch возвращает сообщение об ошибке.

Пример: 'Scale',quantile(Mdl.X,0.75) - quantile(Mdl.X,0.25)

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

Примечание

Если вы задаете ' Distance ', ' Cov ', ' P ' или ' Scale ', то Mdl.Distance и Mdl.DistParameter не изменяют значение.

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

свернуть все

Индексы данных тренировки самых близких соседей, возвращенных как массив ячеек числовых векторов.

Idx является m-by-1 массив ячеек, таким образом, что ячейка j (Idx{j}) содержит mj - размерный вектор индексов наблюдений в Mdl.X, которые являются в модулях r к наблюдению запроса Y(j,:). Если SortIndices является true, то rangesearch располагает элементы векторов в порядке возрастания расстоянием.

Расстояния соседей данных о запросе, возвращенных как числовой матричный или массив ячеек числовых векторов.

D является m-by-1 массив ячеек, таким образом, что ячейка j (D{j}) содержит mj - размерный вектор расстояний, что наблюдениями в Mdl.X является от наблюдения запроса Y(j,:). Все элементы вектора являются меньше, чем r. Если SortIndices является true, то rangesearch располагает элементы векторов в порядке возрастания.

Советы

knnsearch находит k (положительное целое число) точками в Mdl.X, которые являются k - самый близкий для каждой точки Y. Напротив, rangesearch находит все точки в Mdl.X, которые являются на расстоянии r (положительная скалярная величина) каждой точки Y.

Альтернативная функциональность

rangesearch является объектной функцией, которая требует ExhaustiveSearcher или объекта модели KDTreeSearcher, данных о запросе и расстояния. При эквивалентных условиях rangesearch возвращает те же результаты как rangesearch, когда вы задаете аргумент пары "имя-значение" 'NSMethod','exhaustive' или 'NSMethod','kdtree', соответственно.

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

Представленный в R2011b