Найдите всех соседей на заданном расстоянии с помощью объекта searcher
ищет всех соседей (т.е. точки, строки или наблюдения) в Idx
= rangesearch(Mdl
,Y
,r
)Mdl.X
в радиусе r
каждой точки (т.е. строки или наблюдения) в данных запроса Y
использование исчерпывающего поиска или K d-дерева. 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 irises.
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
. The 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
использует выросшее K d-дерево для поиска ближайших соседей .
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)
.
Примите за аргументы:
Вектор A 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
Типы данных: 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 |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода и Генерацию кода для ближайшего соседа Searcher.
createns
| ExhaustiveSearcher
| KDTreeSearcher
| knnsearch
| rangesearch
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.