exponenta event banner

rangesearch

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

Описание

пример

Idx = rangesearch(Mdl,Y,r) выполняет поиск всех соседей (т.е. точек, строк или наблюдений) в Mdl.X в радиусе r каждой точки (т.е. строки или наблюдения) в данных запроса Y с использованием исчерпывающего поиска или Kd-дерева. 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

В этом случае результаты одинаковы.

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

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. 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 использует выращенное Kd-дерево для поиска ближайших соседей.

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

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

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

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