Найдите всех соседей на заданном расстоянии с помощью объекта искателя
поиски всех соседей (т.е. точки, строки или наблюдения) в 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,:).
Mdl — Самый близкий соседний искательExhaustiveSearcher объект модели | KDTreeSearcher объект моделиСамый близкий соседний искатель в виде ExhaustiveSearcher или KDTreeSearcher объект модели, соответственно.
Если Mdl ExhaustiveSearcher модель, затем rangesearch поиски самых близких соседей, использующих исчерпывающий поиск. В противном случае, rangesearch использует выращенное d-дерево K, чтобы искать самых близких соседей.
Y — Запросите данныеЗапросите данные в виде числовой матрицы.
Y m-by-K матрица. Строки Y соответствуйте наблюдениям (т.е. примеры), и столбцы соответствуют предикторам (т.е. переменные или функции). Y должен иметь одинаковое число столбцов как обучающие данные, хранимые в Mdl.X.
Типы данных: single | double
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Distance','minkowski','P',3 задает, чтобы найти все наблюдения в Mdl.X на расстоянии r из каждого наблюдения в Y, использование метрики расстояния Минковскего с экспонентой 3.'Distance' — Метрика расстоянияMdl.Distance (значение по умолчанию) | 'cityblock' | 'euclidean' | 'mahalanobis' | 'minkowski' | 'seuclidean' | указатель на функцию |...Метрика расстояния раньше находила соседей обучающих данных к наблюдениям запроса в виде разделенной запятой пары, состоящей из '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' — Экспонента для метрики расстояния Минковскего (значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего в виде разделенной запятой пары, состоящей из 'P' и положительная скалярная величина. Этот аргумент допустим только если 'Distance' 'minkowski'.
Пример: 'P',3
Типы данных: single | double
'SortIndices' — Отметьте, чтобы отсортировать возвращенные индексы согласно расстояниюtrue(1 ) (значение по умолчанию) | false(0 )Отметьте, чтобы отсортировать возвращенные индексы согласно расстоянию в виде разделенной запятой пары, состоящей из 'SortIndices' и любой true(1 ) или false(0 ).
Для более быстрой эффективности, когда Y содержит много наблюдений, которые имеют много самых близких точек, можно установить SortIndices к false. В этом случае, rangesearch возвращает индексы самых близких точек без определенного порядка. Когда SortIndices true, функция располагает индексы самых близких точек в порядке возрастания расстоянием.
Пример: 'SortIndices',false
Типы данных: логический
'Cov' — Ковариационная матрица для метрики расстояния Mahalanobiscov(Mdl.X,'omitrows') (значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis в виде разделенной запятой пары, состоящей из 'Cov' и положительная определенная матрица. Cov K-by-K матрица, где K является количеством столбцов Mdl.X. Если вы задаете Cov и не задавайте 'Distance','mahalanobis'то rangesearch возвращает сообщение об ошибке.
Пример: 'Cov',eye(3)
Типы данных: single | double
'Scale' — Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияstd(Mdl.X,'omitnan') (значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния в виде разделенной запятой пары, состоящей из '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 — Индексы обучающих данных самых близких соседейИндексы обучающих данных самых близких соседей, возвращенных как массив ячеек числовых векторов.
Idx m-by-1 массив ячеек, таким образом, что ячейка j (Idx{j}) содержит mj - размерный вектор из индексов наблюдений в Mdl.X это в r модули к наблюдению запроса Y(j,:). Если SortIndices trueто rangesearch располагает элементы векторов в порядке возрастания расстоянием.
D — Расстояния самых близких соседей данных о запросеРасстояния соседей данных о запросе, возвращенных как числовой матричный или массив ячеек числовых векторов.
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', соответственно.
Указания и ограничения по применению:
Эта таблица содержит примечания об аргументах rangesearch. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl |
Существует два способа использовать
Если
|
'Distance' |
|
'SortIndices' | Не поддерживаемый. Выходные аргументы всегда сортируются. |
| Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательскую экспоненту для расстояния Минковскего в сгенерированном коде, включайте |
Idx |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода и Генерацию кода для Самого близкого Соседнего Искателя.
createns | ExhaustiveSearcher | KDTreeSearcher | knnsearch | rangesearch
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.