Найдите всех соседей на заданном расстоянии с помощью объекта искателя
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.