KDTreeSearcher

Создайте K d-дерева ближайшего соседа

Описание

KDTreeSearcher объекты модели хранят результаты поиска по ближайшему соседу, который использует K алгоритм d-tree. Результаты включают обучающие данные, метрику расстояния и ее параметры и максимальное количество точек данных в каждом листовом узле (то есть размер интервала). Алгоритм K d-tree разбивает набор данных n -by K путем рекурсивного разделения точек n в K -мерном пространстве на двоичное дерево.

Как только вы создаете KDTreeSearcher объект модели, можно искать в сохраненном дереве, чтобы найти все соседние точки к данным запроса путем выполнения ближайшего поиска соседа с помощью knnsearch или радиус поиска с помощью rangesearch. Алгоритм K d-tree более эффективен, чем алгоритм исчерпывающего поиска, когда K маленький (то есть K ≤ 10), наборы обучения и запросов не разрежены, и наборы обучения и запросов имеют много наблюдений.

Создание

Используйте либо createns функцию или KDTreeSearcher функция (описанная здесь) для создания KDTreeSearcher объект модели. Обе функции используют один и тот же синтаксис, кроме того, что createns функция имеет 'NSMethod' аргумент пары "имя-значение", который используется для выбора метода поиска по ближайшему соседу. createns функция также создает ExhaustiveSearcher объект. Задайте 'NSMethod','kdtree' для создания KDTreeSearcher объект. Значение по умолчанию является 'kdtree' если K ≤ 10, обучающие данные не разрежены, и метрика расстояния является Евклидовым, городским блоком, Чебычевым или Минковским.

Описание

пример

Mdl = KDTreeSearcher(X) выращивает K d-дерево по умолчанию (Mdl) использование n -by K числовой матрицы обучающих данных (X).

пример

Mdl = KDTreeSearcher(X,Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Можно задать максимальное количество точек данных в каждом узле листа (то есть размер блока) и метрике расстояния, и задать параметр метрики расстояния (DistParameter) свойство. Для примера, KDTreeSearcher(X,'Distance','minkowski','BucketSize',10) задает использование расстояния Минковского при поиске ближайших соседей и использование 10 для размера интервала. Чтобы задать DistParameter, используйте P аргумент пары "имя-значение".

Входные параметры

расширить все

Обучающие данные, который выращивает K d-дерево, заданное как числовая матрица. X имеет n строки, каждая из которых соответствует наблюдению (то есть образцу или примеру), и K столбцов, каждый из которых соответствует предиктору (то есть функции).

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Distance','minkowski','P',3,'BucketSize',10 задает использование следующего при поиске ближайших соседей: расстояние Минковского, 3 для показателя метрики Минковского расстояния и 10 для размера интервала.

Метрика расстояния, используемая при вызове knnsearch или rangesearch для поиска ближайших соседей для будущих точек запроса, заданных как разделенная разделенными запятой парами, состоящая из 'Distance' и одно из этих значений.

ЗначениеОписание
'chebychev'Расстояние Чебычева (максимальное различие координат).
'cityblock'Расстояние между блоками.
'euclidean'Евклидово расстояние.
'minkowski'Расстояние Минковского. Экспонента по умолчанию является 2. Чтобы задать другую экспоненту, используйте 'P' аргумент пары "имя-значение".

Для получения дополнительной информации см. «Метрики расстояния».

Программа не использует метрику расстояния для создания KDTreeSearcher объект модели, так что можно изменить метрику расстояния с помощью записи через точку после создания объекта.

Пример: 'Distance','minkowski'

Экспонента для метрики расстояния Минковского, заданная как разделенная разделенными запятой парами, состоящая из 'P' и положительная скалярная величина. Этот аргумент действителен только в том случае, если 'Distance' является 'minkowski'.

Пример: 'P',3

Типы данных: single | double

Максимальное количество точек данных в каждом конечном узле K d-дерева, заданное как разделенная разделенными запятой парами, состоящая из 'BucketSize' и положительное целое число.

Пример: 'BucketSize',10

Типы данных: single | double

Свойства

расширить все

Это свойство доступно только для чтения.

Обучающие данные, который выращивает K d-дерево, заданное как числовая матрица. X имеет n строки, каждая из которых соответствует наблюдению (то есть образцу или примеру), и K столбцов, каждый из которых соответствует предиктору (то есть функции).

Входной параметр X из createns или KDTreeSearcher устанавливает это свойство.

Типы данных: single | double

Метрика расстояния, используемая при вызове knnsearch или rangesearch для поиска ближайших соседей для будущих точек запроса, заданных как 'chebychev', 'cityblock', 'euclidean', или 'minkowski'.

The 'Distance' Аргумент пары "имя-значение" из createns или KDTreeSearcher устанавливает это свойство.

Программа не использует метрику расстояния для создания KDTreeSearcher объект модели, так что можно изменить его с помощью записи через точку.

Значения параметров метрики расстояния, заданные как пустые ([]) или положительная скалярная величина.

Если Distance является 'minkowski', затем DistParameter - экспонента в формуле расстояния Минковского. В противном случае DistParameter является [], что указывает, что заданная формула метрики расстояния не имеет параметров.

The 'P' Аргумент пары "имя-значение" из createns или KDTreeSearcher устанавливает это свойство.

Можно изменить DistParameter при помощи записи через точку, для примера, Mdl.DistParameter = PNew, где PNew является положительная скалярная величина.

Типы данных: single | double

Это свойство доступно только для чтения.

Максимальное количество точек данных в каждом конечном узле K d-дерева, заданное в виде положительного целого числа.

The 'BucketSize' Аргумент пары "имя-значение" из createns или KDTreeSearcher устанавливает это свойство.

Типы данных: single | double

Функции объекта

knnsearchНайдите k - ближайших соседей, использующих объект searcher
rangesearchНайдите всех соседей на заданном расстоянии с помощью объекта searcher

Примеры

свернуть все

Вырастите четырехмерное Kd-дерево, которое использует евклидово расстояние.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
[n,k] = size(X)
n = 150
k = 4

X имеет 150 наблюдений и 4 предиктора.

Вырастите четырехмерное Kd-дерево, используя весь набор данных в качестве обучающих данных.

Mdl1 = KDTreeSearcher(X)
Mdl1 = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

Mdl1 является KDTreeSearcher объект модели и его свойства появляются в Командном окне. Объект содержит информацию о выращенном четырехмерном Kd-дереве, таком как метрика расстояния. Можно изменить значения свойств с помощью записи через точку.

Также можно вырастить Kd-дерево при помощи createns.

Mdl2 = createns(X)
Mdl2 = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

Mdl2 также является KDTreeSearcher объект модели, и он эквивалентен Mdl1. Потому что X имеет четыре столбца, и метрика расстояния по умолчанию Евклидова, createns создает KDTreeSearcher модель по умолчанию.

Чтобы найти ближайших соседей по X в пакет данных запроса передайте KDTreeSearcher объект модели и данные запроса для knnsearch или rangesearch.

Загрузите данные радужки Фишера. Особое внимание на размерностях лепестка.

load fisheriris
X = meas(:,[3 4]); % Predictors

Вырастите двумерное Kd-дерево с помощью createns и обучающих данных. Задайте метрику расстояния Минковского.

Mdl = createns(X,'Distance','Minkowski')
Mdl = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'minkowski'
    DistParameter: 2
                X: [150x2 double]

Потому что X имеет два столбца и метрика расстояния Минковский, createns создает KDTreeSearcher объект модели по умолчанию.

Свойства доступа к Mdl при помощи записи через точку. Для примера используйте Mdl.DistParameter для доступа к показателю расстояния Минковского.

Mdl.DistParameter
ans = 2

Можно передать данные запроса и Mdl кому:

  • knnsearch найти индексы и расстояния ближайших соседей

  • rangesearch чтобы найти индексы всех ближайших соседей на расстоянии, которое вы задаете

Создайте KDTreeSearcher объекта модели и изменения Distance свойство при помощи записи через точку.

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;

Вырастите четырехмерное Kd-дерево по умолчанию, используя весь набор данных в качестве обучающих данных.

Mdl = KDTreeSearcher(X)
Mdl = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'euclidean'
    DistParameter: []
                X: [150x4 double]

Укажите, что соседний искатель использует метрику Минковского, чтобы вычислить расстояния между данными обучения и запроса.

Mdl.Distance = 'minkowski'
Mdl = 
  KDTreeSearcher with properties:

       BucketSize: 50
         Distance: 'minkowski'
    DistParameter: 2
                X: [150x4 double]

Можно пройти Mdl и данные запроса к любому из knnsearch или rangesearch найти ближайших соседей по точкам в данных запроса на основе расстояния Минковского.

Вырастите объект 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,:).

Расширенные возможности

.
Введенный в R2010a