exponenta event banner

ExhaustiveSearcher

Создание исчерпывающего поиска ближайшего соседа

Описание

ExhaustiveSearcher объекты модели хранят учебные данные, метрику расстояния и значения параметров метрики расстояния для исчерпывающего поиска ближайшего соседа. Алгоритм исчерпывающего поиска находит расстояние от каждого наблюдения запроса до всех n наблюдений в обучающих данных, которые являются числовой матрицей n-by-K.

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

Создание

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

Описание

пример

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

пример

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

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

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

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

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

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

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

Пример: 'Distance','mahalanobis','Cov',eye(3) определяет использование расстояния Махаланобиса при поиске ближайших соседей и единичной матрицы 3 на 3 для ковариационной матрицы в метрике расстояния Махаланобиса.

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

В этой таблице описываются поддерживаемые метрики расстояния, указанные как векторы символов или строковые скаляры.

СтоимостьОписание
'chebychev'Расстояние Чебычева (максимальная разность координат).
'cityblock'Расстояние между городскими кварталами.
'correlation'Один минус выборочная линейная корреляция между наблюдениями (обрабатываемая как последовательности значений).
'cosine'Один минус косинус включенного угла между наблюдениями (рассматривается как векторы строк).
'euclidean'Евклидово расстояние.
'hamming'Расстояние хэмминга, которое представляет собой процент различающихся координат.
'jaccard'Один минус коэффициент Джаккарда, который представляет собой процент отличных от нуля координат.
'minkowski'Минковская дистанция. Степень по умолчанию равна 2. Чтобы указать другую степень, используйте 'P' аргумент пары имя-значение.
'mahalanobis'Расстояние Махаланобиса, вычисленное с использованием положительной определенной ковариационной матрицы. Чтобы изменить значение ковариационной матрицы, используйте 'Cov' аргумент пары имя-значение.
'seuclidean'Стандартизированное евклидово расстояние. Каждая разность координат между строками в Mdl.X и матрица запроса масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из Mdl.X. Чтобы задать другое масштабирование, используйте 'Scale' аргумент пары имя-значение.
'spearman'Один минус выборка ранговой корреляции Спирмена между наблюдениями (обрабатываемыми как последовательности значений).

Дополнительные сведения см. в разделе Метрики расстояния.

Можно задать дескриптор функции для пользовательской метрики расстояния с помощью @ (например, @distfun). Пользовательская функция расстояния должна:

  • Иметь форму function D2 = distfun(ZI, ZJ).

  • Взять в качестве аргументов:

    • Вектор 1-by-K ZI содержащий одну строку из X или из точек запроса Y, где K - количество столбцов в X.

    • Матрица m-by-K ZJ содержащий несколько строк X или Y, где m - положительное целое число.

  • Возврат вектора расстояния m-by-1 D2, где D2(j) - расстояние между наблюдениями ZI и ZJ(j,:).

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

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

Ковариационная матрица для метрики расстояния Махаланобиса, заданная как разделенная запятыми пара, состоящая из 'Cov' и положительную определенную матрицу K-by-K, где K - количество столбцов в X. Этот аргумент допустим только в том случае, если 'Distance' является 'mahalanobis'.

Пример: 'Cov',eye(3)

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

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

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

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

Значение параметра масштабирования для стандартизированной евклидовой метрики расстояния, определяемой как разделенная запятыми пара, состоящая из 'Scale' и неотрицательный числовой вектор длиной K, где K - количество столбцов в X. Программное обеспечение масштабирует каждую разницу между данными обучения и запроса, используя соответствующий элемент Scale. Этот аргумент допустим только в том случае, если 'Distance' является 'seuclidean'.

Пример: 'Scale',quantile(X,0.75) - quantile(X,0.25)

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

Свойства

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

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

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

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

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

Метрика расстояния, используемая при вызове knnsearch или rangesearch для поиска ближайших соседей для будущих точек запроса, указанных как вектор символа или скаляр строки ('chebychev', 'cityblock', 'correlation', 'cosine', 'euclidean', 'hamming', 'jaccard', 'minkowski', 'mahalanobis', 'seuclidean', или 'spearman') или дескриптор функции.

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

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

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

В этой таблице описываются параметры расстояния для поддерживаемых метрик расстояния.

Метрика расстоянияОписание параметра
'mahalanobis'

Положительная определенная матрица, представляющая ковариационную матрицу, используемую для вычисления расстояния Махаланобиса. По умолчанию программа устанавливает ковариацию с помощью cov(Mdl.X,'omitrows').

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

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

'minkowski'

Положительный скаляр, указывающий экспоненту расстояния Минковского. По умолчанию экспонента равна 2.

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

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

'seuclidean'

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

  1. Оценивает стандартное отклонение каждого предиктора (столбца) X использование scale = std(Mdl.X,'omitnan')

  2. Масштабирует каждую разность координат между строками в X и матрицу запроса путем деления на соответствующий элемент scale

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

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

Если Mdl.Distance не является одним из параметров, перечисленных в этой таблице, то Mdl.DistParameter является [], что означает, что указанная формула метрики расстояния не имеет параметров.

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

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

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

Примеры

свернуть все

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

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

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

Подготовка исчерпывающего поиска ближайшего соседа с использованием всего набора данных в качестве обучающих данных.

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

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

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

Кроме того, можно подготовить исчерпывающий поиск ближайшего соседа с помощью createns и определение 'exhaustive' в качестве метода поиска.

Mdl2 = createns(X,'NSMethod','exhaustive')
Mdl2 = 
  ExhaustiveSearcher with properties:

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

Mdl2 также является ExhaustiveSearcher объект модели, и он эквивалентен Mdl1.

Искать X для ближайших соседей к пакету данных запроса, передайте ExhaustiveSearcher объект модели и данные запроса в knnsearch или rangesearch.

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

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

Подготовьте исчерпывающий поиск ближайшего соседа. Задайте метрику расстояния Махаланобиса.

Mdl = createns(X,'Distance','mahalanobis')
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [2x2 double]
                X: [150x2 double]

Потому что метрика расстояния - Махаланобис, createns создает ExhaustiveSearcher по умолчанию - объект модели.

Свойства доступа Mdl используя точечную нотацию. Например, использовать Mdl.DistParameter для доступа к ковариационному параметру Махаланобиса.

Mdl.DistParameter
ans = 2×2

    3.1163    1.2956
    1.2956    0.5810

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

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

  • rangesearch поиск индексов всех ближайших соседей в пределах указанного расстояния

Создание ExhaustiveSearcher объект модели и изменить Distance с помощью точечной нотации.

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

load fisheriris
X = meas;

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

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

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

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

Mdl.Distance = 'mahalanobis'
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [4x4 double]
                X: [150x4 double]

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

Создание исчерпывающего объекта поиска с помощью createns функция. Передача объекта и данных запроса в knnsearch функция для поиска k-ближайших соседей.

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

load fisheriris

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

rng('default');             % 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,:);

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

Mdl = createns(X,'Distance','mahalanobis')
Mdl = 
  ExhaustiveSearcher with properties:

         Distance: 'mahalanobis'
    DistParameter: [4x4 double]
                X: [145x4 double]

Потому что метрика расстояния - Махаланобис, createns создает ExhaustiveSearcher по умолчанию - объект модели.

Программное обеспечение использует ковариационную матрицу предикторов (столбцов) в обучающих данных для вычисления расстояния Махаланобиса. Чтобы отобразить это значение, используйте Mdl.DistParameter.

Mdl.DistParameter
ans = 4×4

    0.6547   -0.0368    1.2320    0.5026
   -0.0368    0.1914   -0.3227   -0.1193
    1.2320   -0.3227    3.0671    1.2842
    0.5026   -0.1193    1.2842    0.5800

Найдите индексы обучающих данных (Mdl.X), которые являются двумя ближайшими соседями каждой точки в данных запроса (Y).

IdxNN = knnsearch(Mdl,Y,'K',2)
IdxNN = 5×2

     5     6
    98    95
   104   128
   135    65
   102   115

Каждая строка IdxNN соответствует наблюдению данных запроса. Порядок столбцов соответствует порядку ближайших соседей относительно восходящего расстояния. Например, на основе метрики Махаланобиса, второго ближайшего соседа Y(3,:) является X(128,:).

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

.
Представлен в R2010a