Генерация кода для самого близкого соседнего искателя

Объект функционирует knnsearch и rangesearch из самых близких соседних объектов искателя, ExhaustiveSearcher и KDTreeSearcher, поддержите генерацию кода. В этом примере показано, как сгенерировать код для нахождения, что самый близкий сосед, использующий исчерпывающего искателя, возражает в командной строке. Пример показывает два различных способа сгенерировать код, в зависимости от способа, которым вы используете объект: загрузите объект при помощи loadLearnerForCoder в функции точки входа и передаче время компиляции постоянный объект к сгенерированному коду.

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

Загрузите ирисовый набор данных Фишера.

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,:);

Подготовьте исчерпывающего самого близкого соседнего искателя, использующего обучающие данные. Задайте 'Distance' и 'P' аргументы пары "имя-значение", чтобы использовать расстояние Минковскего с экспонентой 1 для нахождения самого близкого соседа.

Mdl = ExhaustiveSearcher(X,'Distance','minkowski','P',1);

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

Idx = knnsearch(Mdl,Y);

Сгенерируйте код Используя saveLearnerForCoder и loadLearnerForCoder

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

Сохраните исчерпывающего искателя в файл с помощью saveLearnerForCoder.

saveLearnerForCoder(Mdl,'searcherModel')

saveLearnerForCoder сохраняет модель в двоичный файл MATLAB searcherModel.mat как массив структур в текущей папке.

Задайте функцию точки входа myknnsearch1 это берет данные о запросе в качестве входного параметра. В функции загрузите объект искателя при помощи loadLearnerForCoder, и затем передайте загруженную модель knnsearch.

type myknnsearch1.m % Display contents of myknnsearch1.m file
function idx = myknnsearch1(Y) %#codegen
Mdl = loadLearnerForCoder('searcherModel');
idx = knnsearch(Mdl,Y);
end

Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, затем MATLAB® открывает папку в качестве примера. Эта папка включает файлы функции точки входа, myknnsearch1.m, myknnsearch2.m, и myknnsearch3.m.

Сгенерируйте код для myknnsearch1 при помощи codegen. Задайте тип данных и размерность входного параметра при помощи coder.typeof так, чтобы сгенерированный код принял массив переменного размера.

codegen myknnsearch1 -args {coder.typeof(Y,[Inf,4],[1,0])}

Для более подробного примера генерации кода, который использует saveLearnerForCoder и loadLearnerForCoder, смотрите Генерацию кода для Прогноза Модели Машинного обучения в Командной строке. Для получения дополнительной информации об определении аргументов переменного размера, смотрите, Задают Аргументы Переменного Размера для Генерации кода.

Передайте данные о запросе (Y) проверять тот myknnsearch1 и файл MEX возвращает те же индексы.

myIdx1 = myknnsearch1(Y);
myIdx1_mex = myknnsearch1_mex(Y);

Сравните myIdx1 и myIdx1_mex при помощи isequal.

verifyMEX1 = isequal(Idx,myIdx1,myIdx1_mex)
verifyMEX1 = logical
   1

isequal возвращает логическую единицу (true) если все входные параметры равны. Это сравнение подтверждает тот myknnsearch1 и файл MEX возвращает те же результаты.

Сгенерируйте код с постоянным свернутым объектом модели

Самые близкие соседние объекты искателя могут быть входным параметром функции, которую вы задаете для генерации кода. -args опция codegen примите время компиляции постоянный объект искателя.

Задайте функцию точки входа myknnsearch2 это берет обоих исчерпывающая модель искателя и данные о запросе как входные параметры вместо того, чтобы загрузить модель в функции.

type myknnsearch2.m % Display contents of myknnsearch2.m file
function idx = myknnsearch2(Mdl,Y) %#codegen
idx = knnsearch(Mdl,Y);
end

Чтобы сгенерировать код, который берет объект модели, а также данные о запросе, назовите объект модели как время компиляции постоянным при помощи coder.Constant и включайте постоянный свернутый объект модели в -args значение codegen.

codegen myknnsearch2 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0])}

Рабочий процесс генерации кода с постоянным свернутым объектом модели следует за общим рабочим процессом генерации кода. Для получения дополнительной информации смотрите Общий Рабочий процесс Генерации кода.

Проверьте тот myknnsearch2 и файл MEX возвращает те же результаты.

myIdx2 = myknnsearch2(Mdl,Y);
myIdx2_mex = myknnsearch2_mex(Mdl,Y);
verifyMEX2 = isequal(Idx,myIdx2,myIdx2_mex)
verifyMEX2 = logical
   1

Сгенерируйте код с Аргументами в виде пар имя-значение

Задайте функцию точки входа myknnsearch3 это берет объект модели, данные о запросе и аргументы пары "имя-значение". Можно допускать дополнительные аргументы значения имени путем определения varargin как входной параметр. Для получения дополнительной информации смотрите Генерацию кода для Списков аргументов Переменной длины (MATLAB Coder).

type myknnsearch3.m % Display contents of myknnsearch3.m file
function idx = myknnsearch3(Mdl,Y,varargin) %#codegen
idx = knnsearch(Mdl,Y,varargin{:});
end

Чтобы сгенерировать код, который позволяет пользовательскую экспоненту для расстояния Минковскего, включайте {coder.Constant('P'),0} в -args значение codegen. Используйте coder.Constant потому что имя аргумента пары "имя-значение" должно быть постоянным временем компиляции.

codegen myknnsearch3 -args {coder.Constant(Mdl),coder.typeof(Y,[Inf,4],[1,0]),coder.Constant('P'),0}

Проверьте тот myknnsearch3 и файл MEX возвращает те же результаты.

newIdx = knnsearch(Mdl,Y,'P',2);
myIdx3 = myknnsearch3(Mdl,Y,'P',2);
myIdx3_mex = myknnsearch3_mex(Mdl,Y,'P',2);
verifyMEX3 = isequal(newIdx,myIdx3,myIdx3_mex)
verifyMEX3 = logical
   1

Смотрите также

| | | | | |

Похожие темы