Найдите k - самые близкие соседи, использующие объект искателя
поиски самого близкого соседа (т.е. самой близкой точки, строки или наблюдения) в 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 - ближайших соседей.
Загрузите ирисовый набор данных Фишера.
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 - ближайших соседей данных о запросе для этих двух моделей.
Загрузите ирисовый набор данных Фишера. Рассмотрите лепестковые измерения как предикторы.
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
имя аргумента и 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'
— Количество самых близких соседей
(значение по умолчанию) | положительное целое числоКоличество самых близких соседей, чтобы искать в обучающих данных на наблюдение запроса в виде разделенной запятой пары, состоящей из 'K'
и положительное целое число.
Пример: 'K',2
Типы данных: single
| double
'P'
— Экспонента для метрики расстояния Минковскего
(значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего в виде разделенной запятой пары, состоящей из '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'
— Ковариационная матрица для метрики расстояния Mahalanobiscov(Mdl.X,'omitrows')
(значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis в виде разделенной запятой пары, состоящей из 'Cov'
и положительная определенная матрица. Cov
K-by-K матрица, где K является количеством столбцов Mdl.X
. Если вы задаете Cov
и не задавайте '
Distance
','mahalanobis'
то knnsearch
возвращает сообщение об ошибке.
Пример: 'Cov',eye(3)
Типы данных: single
| double
'Scale'
— Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияstd(Mdl.X,'omitnan')
(значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния в виде разделенной запятой пары, состоящей из '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
ложь
по умолчанию), затем 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
ложь
по умолчанию), затем 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
| createns
| ExhaustiveSearcher
| fitcknn
| KDTreeSearcher
| knnsearch
| rangesearch
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.