Найдите всех соседей на заданном расстоянии с помощью объекта искателя
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,:).
Mdl — Самый близкий соседний искательExhaustiveSearcher | объект модели KDTreeSearcherСамый близкий соседний искатель, заданный как ExhaustiveSearcher или объект модели KDTreeSearcher, соответственно.
Если Mdl является моделью ExhaustiveSearcher, то поиски rangesearch самых близких соседей, использующих исчерпывающий поиск. В противном случае rangesearch использует выращенное d-дерево K, чтобы искать самых близких соседей.
Y Запросите данныеЗапросите данные, заданные как числовая матрица.
Y является m-by-K матрица. Строки Y соответствуют наблюдениям (т.е. примеры), и столбцы соответствуют предикторам (т.е. переменные или функции). Y должен иметь одинаковое число столбцов как данные тренировки, хранимые в Mdl.X.
Типы данных: single | double
r Поисковый радиусУкажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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 Экспонента для метрики расстояния Минковскего2 (значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего, заданной как пара, разделенная запятой, состоящая из '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 Ковариационная матрица для метрики расстояния Mahalanobisnancov(Mdl.X) (значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis, заданной как пара, разделенная запятой, состоящая из 'Cov' и положительной определенной матрицы. Cov является K-by-K матрица, где K является количеством столбцов Mdl.X. Если вы задаете Cov и не задаете ' Distance ','mahalanobis', то rangesearch возвращает сообщение об ошибке.
Пример: 'Cov',eye(3)
Типы данных: single | double
шкала Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияnanstd(Mdl.X) (значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния, заданной как пара, разделенная запятой, состоящая из '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 |
Отсортированный порядок связанных расстояний в сгенерированном коде может отличаться от порядка в MATLAB из-за числовой точности. |
Для получения дополнительной информации смотрите Введение в Генерацию кода и Генерацию кода для Самого близкого Соседнего Искателя.
ExhaustiveSearcher | KDTreeSearcher | createns | knnsearch | rangesearch
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.