rangesearch

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

Описание

пример

Idx = rangesearch(Mdl,Y,r) ищет всех соседей (т.е. точки, строки или наблюдения) в Mdl.X в радиусе r каждой точки (т.е. строки или наблюдения) в данных запроса Y использование исчерпывающего поиска или K d-дерева. 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}
    {[    64 66]}    {[    64 66]}
    {1x0  double}    {1x0  double}

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

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

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

   1
   1
   1
   1
   1

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

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

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

Figure contains an axes. The axes with title Setosa Petal Measurements contains 5 objects of type line, implicitfunctionline. These objects represent Observations, Query Data, Search Radius.

Загрузите набор данных радужки Фишера.

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). Задайте, что расстояния соответствуют метрике Махаланобиса.

r = 1;
Idx = rangesearch(Mdl,Y,r,'Distance','mahalanobis')
Idx=5×1 cell array
    {[26 38 7 17 47 4 27 46 25 10 39 20 21 2 33]}
    {[                             6 21 25 4 19]}
    {[                          1 34 33 22 24 2]}
    {[                                       84]}
    {[                                       69]}

Idx{3}
ans = 1×6

     1    34    33    22    24     2

Каждая камера Idx соответствует наблюдению данных запроса и содержит в X вектор индексов соседей в пределах 0,15 см от данных запроса. rangesearch устанавливает индексы в порядке возрастания по расстоянию. Например, используя расстояние Махаланобиса, второго ближайшего соседа 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. The 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 см от. Следующий ближайший - X(122,:), что 0.4359 см от. Все другие наблюдения больше 0.5 см от Y(5,:).

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

свернуть все

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

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

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

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'Один минус коэффициент Жаккара, который является процентом ненулевых координат, которые различаются.
'mahalanobis'Расстояние Махаланобиса, вычисленное с помощью положительной определенной ковариационной матрицы. Чтобы изменить значение ковариационной матрицы, используйте 'Cov' аргумент пары "имя-значение".
'seuclidean'Стандартизированное евклидово расстояние. Каждая координата различия между строками в Mdl.X и матрица запросов масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из Mdl.X. Чтобы задать другое масштабирование, используйте 'Scale' аргумент пары "имя-значение".
'spearman'Один минус выборки корреляции ранга Спирмана между наблюдениями (рассматриваются как последовательности значений).

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

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

  • Примите за аргументы:

    • Вектор A 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

Типы данных: logical

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

свернуть все

Ковариационная матрица для метрики расстояния Махаланобиса, заданная как разделенная разделенными запятой парами, состоящая из '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