Найдите k - самые близкие соседи, использующие входные данные
возвращает 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 имя аргумента и 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' — Экспонента для метрики расстояния Минковскего (значение по умолчанию) | положительная скалярная величинаЭкспонента для метрики расстояния Минковскего в виде разделенной запятой пары, состоящей из 'P' и положительная скалярная величина.
Этот аргумент допустим только если 'Distance' 'minkowski'.
Пример: 'P',3
Типы данных: single | double
'Cov' — Ковариационная матрица для метрики расстояния Mahalanobisnancov(X) (значение по умолчанию) | положительная определенная матрицаКовариационная матрица для метрики расстояния Mahalanobis в виде разделенной запятой пары, состоящей из 'Cov' и положительная определенная матрица.
Этот аргумент допустим только если 'Distance' 'mahalanobis'.
Пример: 'Cov',eye(4)
Типы данных: single | double
'Scale' — Значение масштабного коэффициента для стандартизированной Евклидовой метрики расстоянияnanstd(X) (значение по умолчанию) | неотрицательный числовой векторЗначение масштабного коэффициента для стандартизированной Евклидовой метрики расстояния в виде разделенной запятой пары, состоящей из 'Scale' и неотрицательный числовой вектор. 'Scale' имеет длину, равную количеству столбцов в X. Когда knnsearch вычисляет стандартизированное Евклидово расстояние, каждую координату X масштабируется соответствующим элементом 'Scale', как каждая точка запроса. Этот аргумент допустим только когда 'Distance' 'seuclidean'.
Пример: 'Scale',quantile(X,0.75) - quantile(X,0.25)
Типы данных: single | double
'BucketSize' — Максимальное количество точек данных в вершине d-дерева K (значение по умолчанию) | положительное целое числоМаксимальное количество точек данных в вершине 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 ложь по умолчанию), затем 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 ложь по умолчанию), затем 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 - ближайших соседей.
Если вы устанавливаете knnsearch 'NSMethod' функции аргумент пары "имя-значение" соответствующему значению ('exhaustive' для алгоритма исчерпывающего поиска или 'kdtree' для алгоритма d-дерева K), затем результаты поиска эквивалентны результатам, полученным путем проведения поиска расстояния использование knnsearch объектная функция. В отличие от knnsearch функция, knnsearch объектная функция требует ExhaustiveSearcher или KDTreeSearcher объект модели.
[1] Фридман, J. H. Дж. Бентели и Р. А. Финкель. “Алгоритм для Нахождения Лучших Соответствий в Логарифмическое Ожидаемое Время”. Транзакции ACM на Mathematical Software 3, № 3 (1977): 209–226.
Указания и ограничения по применению:
Если X длинный массив, затем Y не может быть длинный массив. Точно так же, если Y длинный массив, затем X не может быть длинный массив.
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Для генерации кода, значения по умолчанию '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.
Начиная в R2020a, knnsearch возвращает целочисленный тип (int32) индексы, а не индексы с двойной точностью, в сгенерированном автономном коде C/C++. Поэтому функция допускает строгую поддержку с одинарной точностью, когда вы используете входные параметры с одинарной точностью. Для генерации кода MEX функция все еще возвращает индексы с двойной точностью, чтобы совпадать с поведением MATLAB.
Для получения дополнительной информации о генерации кода смотрите Введение в Генерацию кода и Общий Рабочий процесс Генерации кода.
Указания и ограничения по применению:
'IncludeTies', 'NSMethod', и 'SortIndices' аргументы пары "имя-значение" не поддержаны.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.