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