Найдите k - самые близкие соседи, использующие объект искателя
Idx = knnsearch(Mdl,Y)
Idx = knnsearch(Mdl,Y,Name,Value)
[Idx,D]
= knnsearch(___)
поиски самого близкого соседа (т.е. самой близкой точки, строки, или наблюдения) в Idx
= knnsearch(Mdl
,Y
)Mdl.X
к каждой точке (т.е. строки или наблюдения) в данных о запросе Y
с помощью исчерпывающего поиска или d-дерева K. knnsearch
возвращает Idx
, который является вектор-столбцом индексов в Mdl.X
, представляющем самых близких соседей.
возвращает индексы самых близких точек в Idx
= knnsearch(Mdl
,Y
,Name,Value
)Mdl.X
к Y
с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value
. Например, задайте количество самых близких соседей поиска, метрика расстояния, отличающаяся от той, сохраненной в Mdl.Distance
. Можно также задать, какие меры принять, если самые близкие расстояния связываются.
[
дополнительно возвращает матричный Idx
,D
]
= knnsearch(___)D
с помощью любого из входных параметров в предыдущих синтаксисах. D
содержит расстояния между каждым наблюдением в Y
, которые соответствуют самым близким наблюдениям в Mdl.X
. По умолчанию функция располагает столбцы D
в порядке возрастания близостью относительно метрики расстояния.
knnsearch
принимает, что ExhaustiveSearcher
или объекты модели KDTreeSearcher
ищут данные тренировки самых близких соседей данных о запросе. Модель ExhaustiveSearcher
вызывает исчерпывающий алгоритм искателя, и модель KDTreeSearcher
задает Kd-дерево, который использование knnsearch
искать самых близких соседей.
Загрузите ирисовый набор данных Фишера. Случайным образом зарезервируйте пять наблюдений от данных для данных о запросе.
load fisheriris rng(1); % For reproducibility n = size(meas,1); idx = randsample(n,5); X = meas(~ismember(1:n,idx),:); % Training data Y = meas(idx,:); % Query data
Переменная meas
содержит 4 предиктора.
Вырастите четырехмерное Kd-дерево по умолчанию.
MdlKDT = KDTreeSearcher(X)
MdlKDT = KDTreeSearcher with properties: BucketSize: 50 Distance: 'euclidean' DistParameter: [] X: [145x4 double]
MdlKDT
является объектом модели KDTreeSearcher
. Можно изменить его перезаписываемые свойства с помощью записи через точку.
Подготовьте исчерпывающего самого близкого соседнего искателя.
MdlES = ExhaustiveSearcher(X)
MdlES = ExhaustiveSearcher with properties: Distance: 'euclidean' DistParameter: [] X: [145x4 double]
MdlKDT
является объектом модели ExhaustiveSearcher
. Это содержит опции, такие как метрика расстояния, чтобы использовать, чтобы найти самых близких соседей.
Также можно вырастить Kd-дерево или подготовить исчерпывающего самого близкого соседнего искателя, использующего createns
.
Ищите данные тренировки самые близкие соседние индексы, которые соответствуют каждому наблюдению запроса. Проведите оба типа поисковых запросов с помощью настроек по умолчанию. По умолчанию количеством соседей, чтобы искать на наблюдение запроса является 1
.
IdxKDT = knnsearch(MdlKDT,Y); IdxES = knnsearch(MdlES,Y); [IdxKDT IdxES]
ans = 5×2
17 17
6 6
1 1
89 89
124 124
В этом случае результатами поиска является то же самое.
Вырастите Kd-дерево самый близкий соседний объект искателя при помощи функции createns
. Передайте объект и запросите данные к функции knnsearch
, чтобы найти соседей k-nearest.
Загрузите ирисовый набор данных Фишера.
load fisheriris
Удалите пять ирисовых диафрагм случайным образом из данных о предикторе, чтобы использовать в качестве набора запроса.
rng(1); % For reproducibility n = size(meas,1); % Sample size qIdx = randsample(n,5); % Indices of query data tIdx = ~ismember(1:n,qIdx); % Indices of training data Q = meas(qIdx,:); X = meas(tIdx,:);
Вырастите четырехмерное Kd-дерево с помощью данных тренировки. Задайте расстояние Минковскего для нахождения самых близких соседей.
Mdl = createns(X,'Distance','minkowski')
Mdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 2 X: [145x4 double]
Поскольку X
имеет четыре столбца, и метрикой расстояния является Минковский, createns
создает объект модели KDTreeSearcher
по умолчанию. Экспонентой расстояния Минковскего является 2
по умолчанию.
Найдите индексы данных тренировки (Mdl.X
), которые являются двумя самыми близкими соседями каждой точки в данных о запросе (Q
).
IdxNN = knnsearch(Mdl,Q,'K',2)
IdxNN = 5×2
17 4
6 2
1 12
89 66
124 100
Каждая строка IdxNN
соответствует наблюдению данных о запросе, и порядок следования столбцов соответствует порядку самых близких соседей относительно возрастающего расстояния. Например, на основе расстояния Минковскего, вторым самым близким соседом Q(3,:)
является X(12,:)
.
Загрузите ирисовый набор данных Фишера.
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
), которые являются семью самыми близкими соседями каждой точки в данных о запросе (Y
).
[Idx,D] = knnsearch(Mdl,Y,'K',7,'IncludeTies',true);
Idx
и D
являются массивами ячеек с пятью элементами векторов с каждым вектором, имеющим по крайней мере семь элементов.
Отобразите длины векторов в Idx
.
cellfun('length',Idx)
ans = 5×1
8
7
7
7
7
Поскольку ячейка 1
содержит вектор с длиной, больше, чем k = 7, наблюдение запроса 1 (Y(1,:)
) одинаково близко к по крайней мере двум наблюдениям в X
.
Отобразите индексы самых близких соседей Y(1,:)
и их расстояний.
nn5 = Idx{1}
nn5 = 1×8
91 98 67 69 71 93 88 95
nn5d = D{1}
nn5d = 1×8
0.1414 0.2646 0.2828 0.3000 0.3464 0.3742 0.3873 0.3873
Учебные наблюдения 88
и 95
на расстоянии в 0,3873 см от наблюдения запроса 1
.
Обучите две модели KDTreeSearcher
с помощью различных метрик расстояния и сравните k-nearest соседей данных о запросе для этих двух моделей.
Загрузите ирисовый набор данных Фишера. Рассмотрите лепестковые измерения как предикторы.
load fisheriris X = meas(:,3:4); % Predictors Y = species; % Response
Обучите объект модели KDTreeSearcher
при помощи предикторов. Задайте расстояние Минковскего с экспонентой 5.
KDTreeMdl = KDTreeSearcher(X,'Distance','minkowski','P',5)
KDTreeMdl = KDTreeSearcher with properties: BucketSize: 50 Distance: 'minkowski' DistParameter: 5 X: [150x2 double]
Найдите 10 самых близких соседей от X
до точки запроса (newpoint
), сначала с помощью Минковскего затем метрики расстояния Чебычева. Точка запроса должна иметь ту же размерность столбца, как данные раньше обучали модель.
newpoint = [5 1.45]; [IdxMk,DMk] = knnsearch(KDTreeMdl,newpoint,'k',10); [IdxCb,DCb] = knnsearch(KDTreeMdl,newpoint,'k',10,'Distance','chebychev');
IdxMk
и IdxCb
являются 1 10 матрицами, содержащими индексы строки X
, соответствующего самым близким соседям newpoint
с помощью расстояний Минковскего и Чебычева, соответственно. Элемент (1,1) является самым близким, элемент (1,2) является следующим самым близким и так далее.
Отобразите на графике данные тренировки, точку запроса и самых близких соседей.
figure; gscatter(X(:,1),X(:,2),Y); title('Fisher''s Iris Data -- Nearest Neighbors'); xlabel('Petal length (cm)'); ylabel('Petal width (cm)'); hold on plot(newpoint(1),newpoint(2),'kx','MarkerSize',10,'LineWidth',2); % Query point plot(X(IdxMk,1),X(IdxMk,2),'o','Color',[.5 .5 .5],'MarkerSize',10); % Minkowski nearest neighbors plot(X(IdxCb,1),X(IdxCb,2),'p','Color',[.5 .5 .5],'MarkerSize',10); % Chebychev nearest neighbors legend('setosa','versicolor','virginica','query point',... 'minkowski','chebychev','Location','Best');
Увеличьте масштаб интересных мест.
h = gca; % Get current axis handle. h.XLim = [4.5 5.5]; h.YLim = [1 2]; axis square;
Несколько наблюдений равны, который является, почему только восемь самых близких соседей идентифицированы в графике.
Mdl
— Самый близкий соседний искательExhaustiveSearcher
| объект модели KDTreeSearcher
Самый близкий соседний искатель, заданный как ExhaustiveSearcher
или объект модели KDTreeSearcher
, соответственно.
Если Mdl
является моделью ExhaustiveSearcher
, то поиски knnsearch
самых близких соседей, использующих исчерпывающий поиск. В противном случае knnsearch
использует выращенное d-дерево K, чтобы искать самых близких соседей.
Y
Запросите данныеЗапросите данные, заданные как числовая матрица.
Y
является m-by-K матрица. Строки Y
соответствуют наблюдениям (т.е. примеры), и столбцы соответствуют предикторам (т.е. переменные или функции). Y
должен иметь одинаковое число столбцов как данные тренировки, хранимые в Mdl.X
.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'K',2,'Distance','minkowski'
задает, чтобы найти двух самых близких соседей Mdl.X
к каждой точке в Y
и использовать метрику расстояния Минковскего.'Distance'
— Метрика расстоянияMdl.Distance
(значение по умолчанию) | 'cityblock'
| 'euclidean'
| 'mahalanobis'
| 'minkowski'
| 'seuclidean'
| указатель на функцию |...Метрика расстояния раньше находила соседей данных тренировки к наблюдениям запроса, заданным как пара, разделенная запятой, состоящая из 'Distance'
и вектора символов, представляла в виде строки скаляр или указатель на функцию.
Для обоих типов самых близких соседних искателей knnsearch
поддерживает эти метрики расстояния.
Значение | Описание |
---|---|
'chebychev' | Расстояние Чебычева (максимум координируют различие). |
'cityblock' | Расстояние городского квартала. |
'euclidean' | Евклидово расстояние. |
'minkowski' | Расстояние Минковскего. Экспонента по умолчанию равняется 2. Чтобы задать различную экспоненту, используйте аргумент пары "имя-значение" 'P' . |
Если Mdl
является объектом модели ExhaustiveSearcher
, то knnsearch
также поддерживает эти метрики расстояния.
Значение | Описание |
---|---|
'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'
'IncludeTies'
— Отметьте, чтобы включать всех самых близких соседейfalse
(0
) (значение по умолчанию) | true
(1
)Отметьте, чтобы включать самых близких соседей, которые имеют то же расстояние от наблюдений запроса, заданных как пара, разделенная запятой, состоящая из 'IncludeTies'
и false
(0
) или true
(1
).
Если IncludeTies
является true
, то:
knnsearch
включает всех самых близких соседей, расстояния которых равны k th наименьшее расстояние в выходных аргументах, где k является количеством искавших самых близких соседей, заданных аргументом пары "имя-значение" 'K'
.
Idx
и D
является m-by-1
массивы ячеек, таким образом, что каждая ячейка содержит вектор, по крайней мере, индексов k и расстояний, соответственно. Каждый вектор в D
содержит расположенные расстояния в порядке возрастания. Каждая строка в Idx
содержит индексы самых близких соседей, соответствующих расстояниям в D
.
Если IncludeTies
является false
, то knnsearch
выбирает наблюдение с самым маленьким индексом среди наблюдений, которые имеют то же расстояние от точки запроса.
Пример: 'IncludeTies',true
K
Количество самых близких соседей1
(значение по умолчанию) | положительное целое числоКоличество самых близких соседей, чтобы искать в данных тренировки на наблюдение запроса, заданное как пара, разделенная запятой, состоящая из 'K'
и положительного целого числа.
Пример: 'K',2
Типы данных: single | double
P
Экспонента для метрики расстояния Минковскего2
(значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего, заданной как пара, разделенная запятой, состоящая из 'P'
и положительной скалярной величины. Этот аргумент допустим, только если 'Distance'
является 'minkowski'
.
Пример: 'P',3
Типы данных: single | double
'SortIndices'
— Отметьте, чтобы отсортировать возвращенные индексы согласно расстояниюtrue
(1
) (значение по умолчанию) | false
(0
)Отметьте, чтобы отсортировать возвращенные индексы согласно расстоянию, заданному как пара, разделенная запятой, состоящая из 'SortIndices'
и или true
(1
) или false
(0
).
Для более быстрой производительности можно установить SortIndices
на false
, когда следующее верно:
Y
содержит много наблюдений, которые имеют многих самых близких соседей в X
.
Mdl
является объектом модели KDTreeSearcher
.
IncludeTies
является false
.
В этом случае knnsearch
возвращает индексы самых близких соседей без определенного порядка. Когда SortIndices
является true
, функция располагает индексы ближайшего соседа в порядке возрастания расстоянием.
SortIndices
является true
по умолчанию. Когда Mdl
является объектом модели ExhaustiveSearcher
, или IncludeTies
является true
, функция всегда сортирует индексы.
Пример: 'SortIndices',false
Типы данных: логический
cov
Ковариационная матрица для метрики расстояния Mahalanobisnancov(Mdl.X)
(значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis, заданной как пара, разделенная запятой, состоящая из 'Cov'
и положительной определенной матрицы. Cov
является K-by-K матрица, где K является количеством столбцов Mdl.X
. Если вы задаете Cov
и не задаете '
Distance
','mahalanobis'
, то knnsearch
возвращает сообщение об ошибке.
Пример: 'Cov',eye(3)
Типы данных: single | double
шкала
Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияnanstd(Mdl.X)
(значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния, заданной как пара, разделенная запятой, состоящая из 'Scale'
и неотрицательного числового вектора. Scale
имеет длину K, где K является количеством столбцов Mdl.X
.
Программное обеспечение масштабирует каждое различие между обучением и данными о запросе с помощью соответствующего элемента Scale
. Если вы задаете Scale
и не задаете '
Distance
','seuclidean'
, то knnsearch
возвращает сообщение об ошибке.
Пример: 'Scale',quantile(Mdl.X,0.75) - quantile(Mdl.X,0.25)
Типы данных: single | double
Если вы задаете '
Distance
'
, '
Cov
'
, '
P
'
или '
Scale
'
, то Mdl.Distance
и Mdl.DistParameter
не изменяют значение.
Idx
Индексы данных тренировки самых близких соседейИндексы данных тренировки самых близких соседей, возвращенных как числовой матричный или массив ячеек числовых векторов.
Если вы не задаете IncludeTies
(false
по умолчанию), то Idx
является m-by-k числовая матрица, где m является количеством строк в Y
, и k является количеством искавших самых близких соседей, заданных аргументом пары "имя-значение" 'K'
. Idx(j,i)
указывает, что Mdl.X(Idx(j,i),:)
является одним из k самые близкие наблюдения в Mdl.X
к наблюдению запроса Y(j,:)
.
Если вы задаете 'IncludeTies',true
, то Idx
является m-by-1
массив ячеек, таким образом, что ячейка j
(Idx{j}
) содержит вектор, по крайней мере, индексов k самых близких наблюдений в Mdl.X
к наблюдению запроса Y(j,:)
.
Если SortIndices
является true
, то knnsearch
располагает индексы в порядке возрастания расстоянием.
D
Расстояния самых близких соседейРасстояния самых близких соседей данных о запросе, возвращенных как числовой матричный или массив ячеек числовых векторов.
Если вы не задаете IncludeTies
(false
по умолчанию), то D
является m-by-k числовая матрица, где m является количеством строк в Y
, и k является количеством искавших самых близких соседей, заданных аргументом пары "имя-значение" 'K'
. D(j,i)
является расстоянием между Mdl.X(Idx(j,i),:)
и наблюдением запроса Y(j,:)
относительно метрики расстояния.
Если вы задаете 'IncludeTies',true
, то D
является m-by-1
массив ячеек, таким образом, что ячейка j
(D{j}
) содержит вектор, по крайней мере, расстояний k самых близких наблюдений в Mdl.X
к наблюдению запроса Y(j,:)
.
Если SortIndices
является true
, то knnsearch
располагает расстояния в порядке возрастания.
knnsearch
находит k (положительное целое число) точками в Mdl.X
, которые являются k - самый близкий для каждой точки Y
. Напротив, rangesearch
находит все точки в Mdl.X
, которые являются на расстоянии r
(положительная скалярная величина) каждой точки Y
.
knnsearch
является объектной функцией, которая требует ExhaustiveSearcher
или объекта модели KDTreeSearcher
и данных о запросе. При эквивалентных условиях функция объекта knnsearch
возвращает те же результаты как функция knnsearch
, когда вы задаете аргумент пары "имя-значение" 'NSMethod','exhaustive'
или 'NSMethod','kdtree'
, соответственно.
Для k - самая близкая классификация соседей, смотрите fitcknn
и ClassificationKNN
.
[1] Фридман, J. H. Bentely, J. и Finkel, R. A. (1977). “Алгоритм для Нахождения Лучших Соответствий в Логарифмическое Ожидаемое Время”. Транзакции ACM на Издании 3 Mathematical Software, Выпуске 3, сентябрь 1977, стр 209–226.
Указания и ограничения по применению:
Эта таблица содержит примечания об аргументах knnsearch
. Аргументы, не включенные в эту таблицу, полностью поддержаны.
Аргумент | Примечания и ограничения |
---|---|
Mdl |
Существует два способа использовать
Если
|
'Distance' |
|
'IncludeTies' |
Должно быть постоянное время компиляции; его значение не может измениться в сгенерированном коде. |
'SortIndices' | Не поддерживаемый. Выходные аргументы всегда сортируются. |
Аргументы в виде пар имя-значение |
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательскую экспоненту для расстояния Минковскего в сгенерированном коде, включайте |
Idx |
Когда вы задаете |
Для получения дополнительной информации смотрите Введение в Генерацию кода и Генерацию кода для Самого близкого Соседнего Искателя.
ClassificationKNN
| ExhaustiveSearcher
| KDTreeSearcher
| createns
| fitcknn
| knnsearch
| rangesearch
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.