Найдите k - самые близкие соседи, использующие входные данные
Idx = knnsearch(X,Y)Idx = knnsearch(X,Y,Name,Value)[Idx,D] = knnsearch(___) возвращает Idx = knnsearch(X,Y,Name,Value)Idx с дополнительными опциями, заданными с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать количество самых близких соседей поиска и метрики расстояния, используемой в поиске.
Найдите пациентов в наборе данных hospital, которые наиболее тесно напоминают пациентов в Y, согласно возрасту и весу.
Загрузите набор данных hospital.
load hospital; X = [hospital.Age hospital.Weight]; Y = [20 162; 30 169; 40 168; 50 170; 60 171]; % New patients
Выполните knnsearch между X и Y, чтобы найти индексы самых близких соседей.
Idx = knnsearch(X,Y);
Найдите пациентов в X самыми близкими в возрасте и весе тем в Y.
X(Idx,:)
ans = 5×2
25 171
25 171
39 164
49 170
50 172
Найдите 10 самых близких соседей в X к каждой точке в Y, сначала с помощью метрики расстояния Минковскего и затем с помощью метрики расстояния Чебычева.
Загрузите ирисовый набор данных Фишера.
load fisheriris X = meas(:,3:4); % Measurements of original flowers Y = [5 1.45;6 2;2.75 .75]; % New flower data
Выполните knnsearch между X и точками запроса Y с помощью метрик расстояния Минковскего и Чебычева.
[mIdx,mD] = knnsearch(X,Y,'K',10,'Distance','minkowski','P',5); [cIdx,cD] = knnsearch(X,Y,'K',10,'Distance','chebychev');
Визуализируйте результаты двух самых близких соседних поисковых запросов. Отобразите данные тренировки на графике. Постройте точки запроса с маркером X. Используйте круги, чтобы обозначить Минковскего самые близкие соседи. Используйте пентаграммы, чтобы обозначить Чебычева самые близкие соседи.
gscatter(X(:,1),X(:,2),species) line(Y(:,1),Y(:,2),'Marker','x','Color','k',... 'Markersize',10,'Linewidth',2,'Linestyle','none') line(X(mIdx,1),X(mIdx,2),'Color',[.5 .5 .5],'Marker','o',... 'Linestyle','none','Markersize',10) line(X(cIdx,1),X(cIdx,2),'Color',[.5 .5 .5],'Marker','p',... 'Linestyle','none','Markersize',10) legend('setosa','versicolor','virginica','query point',... 'minkowski','chebychev','Location','best')

X Входные данныеВходные данные, заданные как числовая матрица. Строки X соответствуют наблюдениям, и столбцы соответствуют переменным.
Типы данных: single | double
Y Точки запросаТочки запроса, заданные как числовая матрица. Строки Y соответствуют наблюдениям, и столбцы соответствуют переменным. Y должен иметь одинаковое число столбцов как X.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
knnsearch(X,Y,'K',10,'IncludeTies',true,'Distance','cityblock') ищет 10 самых близких соседей, включая связи и использование расстояния городского квартала.'IncludeTies' — Отметьте, чтобы включать всех самых близких соседейfalse (0) (значение по умолчанию) | true (1)Отметьте, чтобы включать всех самых близких соседей, которые имеют то же расстояние от точек запроса, заданных как пара, разделенная запятой, состоящая из 'IncludeTies' и false (0) или true (1).
Если 'IncludeTies' является false, то knnsearch выбирает наблюдение с самым маленьким индексом среди наблюдений, которые имеют то же расстояние от точки запроса.
Если 'IncludeTies' является true, то:
knnsearch включает всех самых близких соседей, расстояния которых равны k th наименьшее расстояние в выходных аргументах. Чтобы задать k, используйте аргумент пары "имя-значение" 'K'.
Idx и D является m-by-1 массивы ячеек, таким образом, что каждая ячейка содержит вектор, по крайней мере, индексов k и расстояний, соответственно. Каждый вектор в D содержит расстояния, расположенные в порядке возрастания. Каждая строка в Idx содержит индексы самых близких соседей, соответствующих расстояниям в D.
Пример: 'IncludeTies',true
'NSMethod' — Самый близкий соседний метод поиска'kdtree' | 'exhaustive'Самый близкий соседний метод поиска, заданный как пара, разделенная запятой, состоящая из 'NSMethod' и одно из этих значений.
'kdtree' — Создает и использует d-дерево K, чтобы найти самых близких соседей. 'kdtree' является значением по умолчанию, когда количество столбцов в X меньше чем или равно 10, X не разрежен, и метрикой расстояния является 'euclidean', 'cityblock', 'chebychev' или 'minkowski'. В противном случае значением по умолчанию является 'exhaustive'.
'kdtree' значения допустим только, когда метрика расстояния является одной из этих четырех метрик, отмеченных выше.
'exhaustive' — Использует алгоритм исчерпывающего поиска путем вычисления значений расстояния из всех точек в X к каждой точке в Y.
Пример: 'NSMethod','exhaustive'
'Distance' — Метрика расстояния'euclidean' (значение по умолчанию) | 'seuclidean' | 'cityblock' | 'chebychev' | 'minkowski' | 'mahalanobis' | указатель на функцию |...Метрика расстояния использование knnsearch, заданное как пара, разделенная запятой, состоящая из 'Distance' и одно из значений в этой таблице или указателе на функцию.
| Значение | Описание |
|---|---|
'euclidean' | Евклидово расстояние. |
'seuclidean' | Стандартизированное Евклидово расстояние. Каждое координатное различие между строками в X и матрице запроса Y масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из X. Чтобы задать другое масштабирование, используйте аргумент пары "имя-значение" 'Scale'. |
'cityblock' | Расстояние городского квартала. |
'chebychev' | Расстояние Чебычева (максимум координируют различие). |
'minkowski' | Расстояние Минковскего. Экспонента по умолчанию равняется 2. Чтобы задать различную экспоненту, используйте аргумент пары "имя-значение" 'P'. |
'mahalanobis' | Расстояние Mahalanobis, вычисленное использование положительной определенной ковариационной матрицы. Чтобы изменить значение ковариационной матрицы, используйте аргумент пары "имя-значение" 'Cov'. |
'cosine' | Один минус косинус включенного угла между наблюдениями (обработанный как векторы). |
'correlation' | Один минус демонстрационная линейная корреляция между наблюдениями (обработанный как последовательности значений). |
'spearman' | Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений). |
'hamming' | Расстояние Хемминга, которое является процентом координат, которые отличаются. |
'jaccard' | Один минус коэффициент Jaccard, который является процентом ненулевых координат, которые отличаются. |
Можно также задать указатель на функцию для пользовательской метрики расстояния при помощи @ (например, @distfun). Пользовательская функция расстояния должна:
Имейте форму function D2 = distfun(ZI,ZJ).
Возьмите в качестве аргументов:
1 n векторным ZI, содержащим одну строку от X или от точек запроса Y.
m2-by-n матричный ZJ, содержащий несколько строк X или Y.
Возвратите m2-by-1 вектор расстояний D2, j которого th элемент является расстоянием между наблюдениями ZI и ZJ(j,:).
Для получения дополнительной информации смотрите Метрики Расстояния.
Пример: 'Distance','chebychev'
P Экспонента для метрики расстояния Минковскего2 (значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего, заданной как пара, разделенная запятой, состоящая из 'P' и положительной скалярной величины. Этот аргумент допустим, только если 'Distance' является 'minkowski'.
Пример: 'P',4
Типы данных: single | double
cov Ковариационная матрица для метрики расстояния Mahalanobisnancov(X) (значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis, заданной как пара, разделенная запятой, состоящая из 'Cov' и положительной определенной матрицы. Этот аргумент допустим только, когда 'Distance' является 'mahalanobis'.
Пример: 'Cov',eye(4)
Типы данных: single | double
шкала Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияnanstd(X) (значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния, заданной как пара, разделенная запятой, состоящая из 'Scale' и неотрицательного числового вектора. 'Scale' имеет длину, равную количеству столбцов в X. Когда knnsearch вычисляет стандартизированное Евклидово расстояние, каждая координата X масштабируется соответствующим элементом 'Scale', как каждая точка запроса. Этот аргумент допустим только, когда 'Distance' является 'seuclidean'.
Пример: 'Scale',quantile(X,0.75) - quantile(X,0.25)
Типы данных: single | double
'BucketSize' — Максимальное количество точек данных в вершине d-дерева K50 (значение по умолчанию) | положительное целое числоМаксимальное количество точек данных в вершине d-дерева K, заданного как пара, разделенная запятой, состоящая из 'BucketSize' и положительного целого числа. Этот аргумент допустим только, когда NSMethod является 'kdtree'.
Пример: 'BucketSize',20
Типы данных: single | double
'SortIndices' — Отметьте, чтобы отсортировать возвращенные индексы согласно расстояниюtrue (1) (значение по умолчанию) | false (0)Отметьте, чтобы отсортировать возвращенные индексы согласно расстоянию, заданному как пара, разделенная запятой, состоящая из 'SortIndices' и или true (1) или false (0).
Для более быстрой производительности можно установить SortIndices на false, когда следующее верно:
Y содержит много наблюдений, которые имеют многих самых близких соседей в X.
NSMethod является 'kdtree'.
IncludeTies является false.
В этом случае knnsearch возвращает индексы самых близких соседей без определенного порядка. Когда SortIndices является true, функция располагает индексы ближайшего соседа в порядке возрастания расстоянием.
SortIndices является true по умолчанию. Когда NSMethod является 'exhaustive', или IncludeTies является true, функция всегда сортирует индексы.
Пример: 'SortIndices',false
Типы данных: логический
Idx Индексы входных данных самых близких соседейИндексы входных данных самых близких соседей, возвращенных как числовой матричный или массив ячеек числовых векторов.
Если вы не задаете IncludeTies (false по умолчанию), то Idx является m-by-k числовая матрица, где m является количеством строк в Y, и k является количеством искавших самых близких соседей. Idx(j,i) указывает, что X(Idx(j,i),:) является одним из k самые близкие наблюдения в X к точке запроса Y(j,:).
Если вы задаете 'IncludeTies',true, то Idx является m-by-1 массив ячеек, таким образом, что ячейка j (Idx{j}) содержит вектор, по крайней мере, индексов k самых близких наблюдений в X к точке запроса Y(j,:).
Если SortIndices является true, то knnsearch располагает индексы в порядке возрастания расстоянием.
D Расстояния самых близких соседейРасстояния самых близких соседей точек запроса, возвращенных как числовой матричный или массив ячеек числовых векторов.
Если вы не задаете IncludeTies (false по умолчанию), то D является m-by-k числовая матрица, где m является количеством строк в Y, и k является количеством искавших самых близких соседей. D(j,i) является расстоянием между X(Idx(j,i),:) и Y(j,:) относительно метрики расстояния.
Если вы задаете 'IncludeTies',true, то D является m-by-1 массив ячеек, таким образом, что ячейка j (D{j}) содержит вектор, по крайней мере, расстояний k самых близких наблюдений в X к точке запроса Y(j,:).
Если SortIndices является true, то knnsearch располагает расстояния в порядке возрастания.
Для фиксированного положительного целочисленного k knnsearch находит точки k в X, которые являются самыми близкими к каждой точке в Y. Чтобы найти все точки в X на фиксированном расстоянии каждой точки в Y, используйте rangesearch.
knnsearch не сохраняет поисковый объект. Чтобы создать поисковый объект, используйте createns.
Для получения информации об определенном алгоритме поиска см. Соседний Поиск Поиска и Радиуса k-Nearest.
Если вы устанавливаете аргумент пары "имя-значение" 'NSMethod' функции knnsearch соответствующему значению ('exhaustive' для алгоритма исчерпывающего поиска или 'kdtree' для алгоритма d-дерева K), то результаты поиска эквивалентны результатам, полученным путем проведения поиска расстояния использование функции объекта knnsearch. В отличие от функции knnsearch, функция объекта knnsearch требует ExhaustiveSearcher или объекта модели KDTreeSearcher.
[1] Фридман, J. H. Дж. Бентели и Р. А. Финкель. “Алгоритм для Нахождения Лучших Соответствий в Логарифмическое Ожидаемое Время”. Транзакции ACM на Mathematical Software 3, № 3 (1977): 209–226.
Указания и ограничения по применению:
Для генерации кода значением по умолчанию аргумента пары "имя-значение" 'NSMethod' является 'exhaustive', когда количество столбцов в X больше, чем 7.
Значение аргумента пары "имя-значение" 'Distance' должно быть постоянным временем компиляции и не может быть пользовательской функцией расстояния.
Значение аргумента пары "имя-значение" 'IncludeTies' должно быть постоянным временем компиляции.
Аргумент пары "имя-значение" 'SortIndices' не поддержан. Выходные аргументы всегда сортируются.
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции. Например, чтобы позволить пользовательскую экспоненту для расстояния Минковскего в сгенерированном коде, включайте {coder.Constant('Distance'),coder.Constant('Minkowski'),coder.Constant('P'),0} в значение -args codegen.
Когда вы задаете 'IncludeTies' как true, отсортированный порядок связанных расстояний в сгенерированном коде может отличаться от порядка в MATLAB® из-за числовой точности.
Когда knnsearch использует kd-алгоритм-поиска-по-дереву, и типом сборки генерации кода является MEX-функция, codegen генерирует MEX-функцию с помощью Intel® Threading Building Blocks (TBB) для параллельного вычисления. В противном случае codegen генерирует код с помощью parfor.
MEX-функция для kd-алгоритма-поиска-по-дереву — codegen генерирует оптимизированное использование MEX-функции Intel TBB для параллельного вычисления на многожильных платформах. Можно использовать MEX-функцию, чтобы ускорить алгоритмы MATLAB. Для получения дополнительной информации на Intel TBB, см. https://software.intel.com/en-us/intel-tbb.
Если вы генерируете MEX-функцию, чтобы протестировать сгенерированный код версии parfor, можно отключить использование Intel TBB. Установите свойство ExtrinsicCalls объекта настройки MEX к false. Для получения дополнительной информации смотрите coder.MexCodeConfig.
MEX-функция для алгоритма исчерпывающего поиска и автономного кода C/C++ для обоих алгоритмов — сгенерированный код knnsearch использует parfor, чтобы создать циклы, которые запускают параллельно на поддерживаемой общей памяти многожильные платформы в сгенерированном коде. Если ваш компилятор не поддерживает интерфейс приложения Open Multiprocessing (OpenMP), или вы отключаете библиотеку OpenMP, MATLAB Coder™ обрабатывает parfor - циклы как for - циклы. Чтобы найти поддерживаемые компиляторы, см. Поддерживаемые Компиляторы. Чтобы отключить библиотеку OpenMP, установите свойство EnableOpenMP объекта настройки к false. Для получения дополнительной информации смотрите coder.CodeConfig.
Для получения дополнительной информации о генерации кода смотрите Введение в Генерацию кода и Общий Рабочий процесс Генерации кода.
Указания и ограничения по применению:
'IncludeTies', 'NSMethod' и аргументы пары "имя-значение" 'SortIndices' не поддержаны.
Для получения дополнительной информации смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.