exponenta event banner

KDTreeSearcher

Создать поиск ближайшего соседнего дерева Kd

Описание

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

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

Создание

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

Описание

пример

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

пример

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

Входные аргументы

развернуть все

Обучающие данные, которые выращивают дерево Kd, указанное как числовая матрица. 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

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

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

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

Свойства

развернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

Вырастите четырехмерное 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