В этом примере показано, как создать код для прогнозирования объектов модели классификации и регрессии в командной строке. Вы также можете создать код с помощью приложения 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 возвращает те же самые метки.
learnerCoderConfigurer | loadLearnerForCoder | saveLearnerForCoder | codegen (кодер MATLAB)