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=5×2 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=5×1 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 см данных о запросе, YD содержит расстояния, которые соответствуют наблюдениям.

Отобразите результаты для наблюдения запроса 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 имя аргумента и 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