exponenta event banner

Формирование кода для прогнозирования модели машинного обучения в командной строке

В этом примере показано, как создать код для прогнозирования объектов модели классификации и регрессии в командной строке. Вы также можете создать код с помощью приложения MATLAB ® Coder™ См. раздел Создание кода для прогнозирования модели машинного обучения с помощью приложения MATLAB Coder App для получения подробной информации.

Некоторые объекты модели классификации и регрессии имеют predict или random функция, поддерживающая генерацию кода. Для прогнозирования с использованием этих функций объекта требуется обученный объект модели классификации или регрессии, но -args вариант codegen (Кодер MATLAB) не принимает эти объекты. Обойти это ограничение с помощью saveLearnerForCoder и loadLearnerForCoder как описано в этом примере.

На этой блок-схеме показан рабочий процесс создания кода для объектных функций объектов модели классификации и регрессии.

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

Модель классификации поездов

Обучение объекта классификационной модели с поддержкой генерации кода predict функция. В этом случае обучайте модель классификации вспомогательных векторных машин (SVM).

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
Y = species(inds);
Mdl = fitcsvm(X,Y);

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

Сохранить модель с помощью saveLearnerForCoder

Сохранение классификационной модели в файл SVMModel.mat с помощью saveLearnerForCoder.

saveLearnerForCoder(Mdl,'SVMModel');

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

Определение функции точки входа

Функция начального уровня, также известная как функция верхнего уровня или первичная функция, является функцией, определяемой для создания кода. Потому что вы не можете вызвать какую-либо функцию на верхнем уровне с помощью codegen, необходимо определить функцию точки входа, которая вызывает функции с поддержкой генерации кода, и создать код C/C + + для функции точки входа с помощью codegen. Все функции в рамках функции начального уровня должны поддерживать генерацию кода.

Определите функцию точки входа, которая возвращает предсказанные метки для входных данных предиктора. В рамках функции загрузите обученную классификационную модель с помощью loadLearnerForCoder, а затем передать загруженную модель в predict. В этом случае определите predictLabelsSVM функция, которая прогнозирует метки с использованием модели SVM Mdl.

type predictLabelsSVM.m % Display contents of predictLabelsSVM.m file
function label = predictLabelsSVM(x) %#codegen
%PREDICTLABELSSVM Label new observations using trained SVM model Mdl
%   predictLabelsSVM predicts the vector of labels label using 
%   the saved SVM model Mdl and the predictor data x.
Mdl = loadLearnerForCoder('SVMModel');
label = predict(Mdl,x);
end

Добавить %#codegen директива компилятора (или прагматика) для функции начального уровня после сигнатуры функции, указывающая, что предполагается создать код для алгоритма MATLAB. Добавление этой директивы дает команду анализатору кода MATLAB помочь в диагностике и устранении нарушений, которые могут привести к ошибкам при создании кода. См. раздел Проверка кода с помощью анализатора кода (кодер MATLAB).

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

Создать код

Настройка компилятора

Для создания кода C/C + + необходимо иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый установленный компилятор. Вы можете использоватьmex -setup для просмотра и изменения компилятора по умолчанию. Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.

Создать код с помощью codegen

Создание кода для функции точки входа с помощью codegen (Кодер MATLAB). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Укажите типы данных и размеры всех входов функции точки входа при вызове codegen с помощью -args вариант.

В этом случае проходите X как значение -args параметр, указывающий, что сгенерированный код должен принимать входные данные, имеющие тот же тип данных и размер массива, что и обучающие данные X.

codegen predictLabelsSVM -args {X}
Code generation successful.

Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделах Определение аргументов переменного размера для генерации кода и Определение свойств входов функции точки входа (кодер MATLAB).

Тип построения

Кодер MATLAB может генерировать код для следующих типов сборки:

  • Функция MEX (MATLAB Executable)

  • Автономный код C/C + +

  • Автономный код C/C + +, скомпилированный в статическую библиотеку

  • Автономный код C/C + +, скомпилированный в динамически связанную библиотеку

  • Автономный код C/C + +, скомпилированный в исполняемый файл

Тип сборки можно указать с помощью -config вариант codegen (Кодер MATLAB). Дополнительные сведения о настройке параметров генерации кода см. в разделе -config вариант codegen (Кодер MATLAB) и Настройка параметров построения (Кодер MATLAB).

По умолчанию codegen генерирует функцию MEX. Функция MEX - это программа C/C + +, выполняемая из MATLAB. Функцию MEX можно использовать для ускорения алгоритмов MATLAB и тестирования сгенерированного кода на наличие проблем функциональности и времени выполнения. Дополнительные сведения см. в разделах Ускорение алгоритма MATLAB (кодер MATLAB) и Зачем тестировать функции MEX в MATLAB? (Кодер MATLAB).

Отчет о создании кода

Вы можете использовать -report для создания отчета о создании кода. Этот отчет помогает отладить проблемы создания кода и просмотреть созданный код C/C + +. Для получения дополнительной информации см. Отчеты по генерации кода (кодер MATLAB).

Проверить созданный код

Протестируйте функцию MEX для проверки того, что сгенерированный код обеспечивает те же функциональные возможности, что и исходный код MATLAB. Для выполнения этого теста запустите функцию MEX, используя те же входные данные, которые использовались для запуска исходного кода MATLAB, а затем сравните результаты. Запуск функции MEX в MATLAB перед созданием автономного кода также позволяет обнаруживать и исправлять ошибки времени выполнения, которые гораздо сложнее диагностировать в сгенерированном автономном коде. Дополнительные сведения см. в разделе Зачем тестировать функции MEX в MATLAB? (Кодер MATLAB).

Передайте некоторые данные предиктора, чтобы проверить, predict, predictLabelsSVMи функция MEX возвращает те же самые метки.

labels1 = predict(Mdl,X);
labels2 = predictLabelsSVM(X);
labels3 = predictLabelsSVM_mex(X);

Сравнение прогнозируемых меток с помощью isequal.

verifyMEX = isequal(labels1,labels2,labels3)
verifyMEX = logical
   1

isequal возвращает логический 1 (true), что означает, что все входы равны. Сравнение подтверждает, что predict функция, predictLabelsSVM функция, и функция MEX возвращает те же самые метки.

См. также

| | | (кодер MATLAB)

Связанные темы