Найдите k - ближайших соседей, использующих объект searcher
ищет ближайшего соседа (т.е. ближайшую точку, строку или наблюдение) в Idx
= knnsearch(Mdl
,Y
)Mdl.X
каждой точке (т.е. строке или наблюдению) в данных запроса Y
использование исчерпывающего поиска или K d-дерева. 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
использует выросшее K d-дерево для поиска ближайших соседей .
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' | Один минус коэффициент Жаккара, который является процентом ненулевых координат, которые различаются. |
'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'
'IncludeTies'
- Флаг для включения всех ближайших соседейfalse
(0
) (по умолчанию) | true
(1
)Флаг для включения ближайших соседей, которые имеют то же расстояние от наблюдений запросов, заданный как разделенная разделенными запятой парами, состоящая из 'IncludeTies'
и false
(0
) или true
(1
).
Если IncludeTies
является true
, затем:
knnsearch
включает всех ближайших соседей, чьи расстояния равны k-му наименьшему расстоянию в выходных аргументах, где 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
когда следующее имеет значение true:
Y
содержит много наблюдений, которые имеют много ближайших соседей в X
.
Mdl
является KDTreeSearcher
объект модели.
IncludeTies
является false
.
В этом случае, knnsearch
возвращает индексы ближайших соседей не в определенном порядке. Когда SortIndices
является true
функция упорядочивает индексы ближайшего соседа в порядке возрастания по расстоянию.
SortIndices
является true
по умолчанию. Когда Mdl
является ExhaustiveSearcher
объект модели
является true
функция всегда сортирует индексы.
Пример: 'SortIndices',false
Типы данных: logical
'Cov'
- Ковариационная матрица для метрики расстояния Махаланобисаcov(Mdl.X,'omitrows')
(по умолчанию) | положительно определенную матрицуКовариационная матрица для метрики расстояния Махаланобиса, заданная как разделенная разделенными запятой парами, состоящая из '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
(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] Friedman, J. H., Bentely, J., and Finkel, R. A. (1977). «Алгоритм нахождения оптимальных соответствий за логарифмическое ожидаемое время». Транзакции ACM на математическом программном обеспечении Vol. 3, Issue 3, Sept. 1977, pp. 209-226.
Указания и ограничения по применению:
Эта таблица содержит примечания к аргументам knnsearch
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl |
Существует два способа использования
Если
|
'Distance' |
|
'IncludeTies' |
Должен быть константой времени компиляции; его значение не может измениться в сгенерированном коде. |
'SortIndices' | Не поддерживается. Выходные аргументы всегда сортируются. |
Аргументы пары "имя-значение" |
Имена в аргументах пары "имя-значение" должны быть константами во время компиляции. Для примера, чтобы разрешить заданную пользователем степень для расстояния Минковского в сгенерированном коде, включите |
Idx |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода и Генерацию кода для ближайшего соседа Searcher.
ClassificationKNN
| createns
| ExhaustiveSearcher
| fitcknn
| KDTreeSearcher
| knnsearch
| rangesearch
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.