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

Загрузите набор данных радужки Фишера.
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,:).
Mdl - Ближайший соседний поисковикExhaustiveSearcher объект модели | KDTreeSearcher объект моделиПоиск ближайшего соседа, указанный как ExhaustiveSearcher или KDTreeSearcher объект модели соответственно.
Если Mdl является ExhaustiveSearcher модель, затем rangesearch поиск ближайших соседей с помощью исчерпывающего поиска. В противном случае rangesearch использует выращенное Kd-дерево для поиска ближайших соседей.
Y - Запрос данныхЗапрос данных, указанных как числовая матрица.
Y является матрицей m-by-K. Ряды Y соответствуют наблюдениям (то есть примеры), а столбцы соответствуют предикторам (то есть переменным или особенностям). Y должно иметь то же количество столбцов, что и данные обучения, хранящиеся в Mdl.X.
Типы данных: single | double
r - Радиус поискаУкажите дополнительные пары, разделенные запятыми 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' | Один минус коэффициент Джаккарда, который представляет собой процент отличных от нуля координат. |
'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' - Показатель для метрики расстояния Минковского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
Типы данных: logical
'Cov' - Ковариационная матрица для метрики расстояния Махаланобисаcov(Mdl.X,'omitrows') (по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Махаланобиса, заданная как разделенная запятыми пара, состоящая из '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.