learnerCoderConfigurer

Создайте кодер configurer модели машинного обучения

После обучения модель машинного обучения создайте кодер configurer для модели при помощи learnerCoderConfigurer. Используйте объектные функции и свойства configurer задать опции генерации кода и сгенерировать код C/C++ для predict и функций update модели машинного обучения. Генерация кода C/C++ требует MATLAB® Coder™.

Эта блок-схема показывает рабочий процесс генерации кода с помощью кодера configurer. Используйте learnerCoderConfigurer для подсвеченного шага.

Синтаксис

configurer = learnerCoderConfigurer(Mdl,X)
configurer = learnerCoderConfigurer(Mdl,X,Name,Value)

Описание

пример

configurer = learnerCoderConfigurer(Mdl,X) возвращает кодер configurer configurer для модели Mdl машинного обучения. Задайте данные о предикторе X для функции predict Mdl.

пример

configurer = learnerCoderConfigurer(Mdl,X,Name,Value) возвращает кодер configurer с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, можно задать количество выходных аргументов в функции predict, имени файла сгенерированного кода C/C++ и уровне многословия кодера configurer.

Примеры

свернуть все

Обучите модель машинного обучения, и затем сгенерируйте код для predict и функций update модели при помощи кодера configurer.

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

load carsmall
X = [Horsepower,Weight];
Y = MPG;
Mdl = fitrsvm(X,Y);

Mdl является объектом RegressionSVM.

Создайте кодер configurer для модели RegressionSVM при помощи learnerCoderConfigurer. Задайте данные о предикторе X. Функция learnerCoderConfigurer использует вход X, чтобы сконфигурировать атрибуты кодера входного параметра функции predict.

configurer = learnerCoderConfigurer(Mdl,X)
configurer = 
  RegressionSVMCoderConfigurer with properties:

   Update Inputs:
             Alpha: [1x1 LearnerCoderInput]
    SupportVectors: [1x1 LearnerCoderInput]
             Scale: [1x1 LearnerCoderInput]
              Bias: [1x1 LearnerCoderInput]

   Predict Inputs:
                 X: [1x1 LearnerCoderInput]

   Code Generation Parameters:
        NumOutputs: 1
    OutputFileName: 'RegressionSVMModel'


  Properties, Methods

configurer является объектом RegressionSVMCoderConfigurer, который является кодером configurer объекта RegressionSVM.

Чтобы сгенерировать код C/C++, у вас должен быть доступ к компилятору C/C++, который сконфигурирован правильно. MATLAB Coder определяет местоположение и использует поддерживаемый, установленный компилятор. Можно использовать mex -setup, чтобы просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (MATLAB).

Сгенерируйте код для predict и функций update модели регрессии SVM (Mdl) с настройками по умолчанию.

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'RegressionSVMModel.mat'

Функция generateCode завершает эти действия:

  • Сгенерируйте файлы MATLAB, требуемые сгенерировать код, включая две функции точки входа predict.m и update.m для predict и функций update Mdl, соответственно.

  • Создайте MEX-функцию под названием RegressionSVMModel для двух функций точки входа.

  • Создайте код для MEX-функции в папке codegen\mex\RegressionSVMModel.

  • Скопируйте MEX-функцию в текущую папку.

Отобразите содержимое predict.m, update.m и файлов initialize.m при помощи функции type.

type predict.m
function varargout = predict(X,varargin) %#codegen
% Autogenerated by MATLAB,  22-Feb-2019 03:27:43
[varargout{1:nargout}] = initialize('predict',X,varargin{:});
end
type update.m
function update(varargin) %#codegen
% Autogenerated by MATLAB,  22-Feb-2019 03:27:43
initialize('update',varargin{:});
end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen
% Autogenerated by MATLAB, 22-Feb-2019 03:27:43
coder.inline('always');
persistent model;
if isempty(model)
    model = loadCompactModel('RegressionSVMModel.mat');
end
switch(command)
    case 'update'
        % Update struct fields: Alpha
        %                       SupportVectors
        %                       Scale
        %                       Bias
        
        model = update(model,varargin{:});
    case 'predict'
        % Predict Inputs: X
        
        X = varargin{1};
        if nargin == 2
            [varargout{1:nargout}] = predict(model,X);
        else
            PVPairs = cell(1,nargin-2);
            for i = 1:nargin-2
                PVPairs{1,i} = varargin{i+1};
            end
            [varargout{1:nargout}] = predict(model,X,PVPairs{:});
        end
end
end

Обучите модель SVM с помощью частичного набора данных и создайте кодер configurer для модели. Используйте свойства кодера configurer, чтобы задать атрибуты кодера параметров модели SVM. Используйте объектную функцию кодера configurer, чтобы сгенерировать код С, который предсказывает метки для новых данных о предикторе. Затем переобучите модель с помощью целого набора данных и обновите параметры в сгенерированном коде, не регенерируя код.

Модель train

Загрузите набор данных ionosphere. Этот набор данных имеет 34 предиктора, и 351 бинарный ответ для радара возвращается, или плохой ('b') или хороший ('g'). Обучите бинарную модель классификации SVM использование первых 50 наблюдений.

load ionosphere
Mdl = fitcsvm(X(1:50,:),Y(1:50));

Mdl является объектом ClassificationSVM.

Создайте кодер Конфигурера

Создайте кодер configurer для модели ClassificationSVM при помощи learnerCoderConfigurer. Задайте данные о предикторе X. Функция learnerCoderConfigurer использует вход X, чтобы сконфигурировать атрибуты кодера входного параметра функции predict. Кроме того, определите номер выходных параметров к 2 так, чтобы сгенерированный код возвратил предсказанные метки и очки.

configurer = learnerCoderConfigurer(Mdl,X(1:50,:),'NumOutputs',2);

configurer является объектом ClassificationSVMCoderConfigurer, который является кодером configurer объекта ClassificationSVM.

Задайте атрибуты кодера параметров

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

Во-первых, задайте атрибуты кодера X так, чтобы сгенерированный код принял любое количество наблюдений. Измените атрибуты VariableDimensions и SizeVector. Атрибут SizeVector задает верхнюю границу размера данных предиктора, и атрибут VariableDimensions задает, имеет ли каждая размерность данных о предикторе переменный размер или фиксированный размер.

configurer.X.SizeVector = [Inf 34];
configurer.X.VariableDimensions = [true false];

Размер первой размерности является количеством наблюдений. В этом случае код указывает, что верхней границей размера является Inf, и размер является переменным, означая, что X может иметь любое количество наблюдений. Эта спецификация удобна, если вы не знаете количество наблюдений при генерации кода.

Размер второго измерения является количеством переменных прогноза. Это значение должно быть зафиксировано для модели машинного обучения. X содержит 34 предиктора, таким образом, значение атрибута SizeVector должно быть 34, и значением атрибута VariableDimensions должен быть false.

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

configurer.SupportVectors.SizeVector = [250 34];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints.
SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
configurer.SupportVectors.VariableDimensions = [true false];
VariableDimensions attribute for Alpha has been modified to satisfy configuration constraints.
VariableDimensions attribute for SupportVectorLabels has been modified to satisfy configuration constraints.

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

Сгенерируйте код

Чтобы сгенерировать код C/C++, у вас должен быть доступ к компилятору C/C++, который сконфигурирован правильно. MATLAB Coder определяет местоположение и использует поддерживаемый, установленный компилятор. Можно использовать mex -setup, чтобы просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (MATLAB).

Используйте generateCode, чтобы сгенерировать код для predict и функций update модели классификации SVM (Mdl) с настройками по умолчанию.

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat'

generateCode генерирует файлы MATLAB, требуемые сгенерировать код, включая две функции точки входа predict.m и update.m для predict и функций update Mdl, соответственно. Затем generateCode создает MEX-функцию под названием ClassificationSVMModel для двух функций точки входа в папке codegen\mex\ClassificationSVMModel и копирует MEX-функцию в текущую папку.

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

Передайте некоторые данные о предикторе, чтобы проверить, возвращают ли функция predict Mdl и функция predict в MEX-функции те же метки. Чтобы вызвать функцию точки входа в MEX-функции, которая имеет больше чем одну точку входа, задайте имя функции как первый входной параметр.

[label,score] = predict(Mdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);

Сравните label и label_mex при помощи isequal.

isequal(label,label_mex)
ans = logical
   1

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

score_mex может включать различия в округлении по сравнению с score. В этом случае сравните score_mex и score, позволив маленький допуск.

find(abs(score-score_mex) > 1e-8)
ans =

  0x1 empty double column vector

Сравнение подтверждает, что score и score_mex равны в допуске 1e–8.

Переобучите модель и обновите параметры в сгенерированном коде

Переобучите модель с помощью целого набора данных.

retrainedMdl = fitcsvm(X,Y);

Извлеките параметры, чтобы обновить при помощи validatedUpdateInputs. Эта функция обнаруживает измененные параметры модели в retrainedMdl и подтверждает, удовлетворяют ли измененные значения параметров атрибуты кодера параметров.

params = validatedUpdateInputs(configurer,retrainedMdl);

Обновите параметры в сгенерированном коде.

ClassificationSVMModel('update',params)

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

Сравните выходные параметры от функции predict retrainedMdl и функции predict в обновленной MEX-функции.

[label,score] = predict(retrainedMdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);
isequal(label,label_mex)
ans = logical
   1

find(abs(score-score_mex) > 1e-8)
ans =

  0x1 empty double column vector

Сравнение подтверждает, что labels и labels_mex равны, и значения счета равны в допуске.

Входные параметры

свернуть все

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

МодельПолная Объектная / Объектная Компактная модельУчебная функция
Регрессия машины вектора поддержки (SVM)RegressionSVM, CompactRegressionSVMfitrsvm
SVM для и бинарной классификации одного классаClassificationSVM, CompactClassificationSVMfitcsvm
Модель Multiclass для SVMsClassificationECOC, CompactClassificationECOCfitcecoc

Для указаний и ограничений по применению генерации кода модели машинного обучения смотрите раздел Code Generation страницы объекта модели.

Данные о предикторе для функции predict Mdl, заданного как n-by-p числовая матрица, где n является количеством наблюдений и p, являются количеством переменных прогноза.

Функция predict модели машинного обучения предсказывает метки для классификации и ответы для регрессии для данных данных о предикторе. После создания кодера configurer configurer, можно использовать функцию generateCode, чтобы сгенерировать код C/C++ для функции predict Mdl. Сгенерированный код принимает данные о предикторе, которые имеют тот же размер и тип данных X. Можно задать, имеет ли каждая размерность переменный размер или фиксированный размер после создания configurer.

Например, если вы хотите сгенерировать код C/C++, который предсказывает, что метки с помощью 100 наблюдений с тремя переменными прогноза, затем задают X как zeros(100,3). Функция learnerCoderConfigurer использует только размер и тип данных X, не его значения. Поэтому X может быть данными о предикторе или выражением MATLAB, которое представляет множество значений с определенным типом данных. Вывод configurer хранит размер и тип данных X в свойстве X configurer. Можно изменить размер и тип данных X после создания configurer. Например, измените количество наблюдений к 200 и типа данных к single.

configurer.X.SizeVector = [200 3];
configurer.X.DataType = 'single';

Чтобы позволить сгенерированному коду C/C++ принимать данные о предикторе максимум с 100 наблюдениями, задайте X как zeros(100,3) и измените свойство VariableDimensions.

configurer.X.VariableDimensions = [1 0];
[1 0] указывает, что первая размерность X (количество наблюдений) имеет переменный размер, и второе измерение X (количество переменных прогноза) имеет фиксированный размер. Конкретное количество наблюдений, 100 в этом примере, становится максимальным позволенным количеством наблюдений в сгенерированном коде C/C++. Чтобы позволить любое количество наблюдений, задайте связанное как Inf.
configurer.X.SizeVector = [Inf 3];

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: configurer = learnerCoderConfigurer(Mdl,X,'NumOutputs',2,'OutputFileName','myModel') определяет номер выходных параметров в predict к 2 и задает имя файла 'myModel' для сгенерированного кода C/C++.

Количество выходных аргументов в функции predict модели Mdl машинного обучения, заданной как пара, разделенная запятой, состоящая из 'NumOutputs' и положительного целочисленного n.

Эта таблица приводит выходные параметры для функции predict различных моделей. predict в сгенерированном коде C/C++ возвращает первый n выходные параметры функции predict в порядке данных в Выходном столбце.

МодельФункция predict моделиВыходные параметры
Регрессия SVMpredictyfit (предсказанные ответы)
SVM для и бинарной классификации одного классаpredictlabel (предсказанные метки класса), score (очки или апостериорные вероятности)
Модель Multiclass для SVMspredictlabel (предсказанные метки класса), NegLoss (отрицаемые средние бинарные потери), PBScore (очки положительного класса)

Например, если вы задаете 'NumOutputs',1 для модели классификации SVM, затем predict возвращает предсказанные метки класса в сгенерированном коде C/C++.

После создания кодера configurer configurer, можно изменить количество выходных параметров при помощи записи через точку.

configurer.NumOutputs = 2;

Аргумент пары "имя-значение" 'NumOutputs' эквивалентен параметру компилятора '-nargout' codegen. Эта опция задает количество выходных аргументов в функции точки входа генерации кода. Объектный функциональный generateCode кодера configurer генерирует две функции точки входа — predict.m и update.m для predict и функций update Mdl, соответственно — и генерирует код C/C++ для двух функций точки входа. Заданное значение для 'NumOutputs' соответствует количеству выходных аргументов в predict.m.

Пример: 'NumOutputs',2

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

Имя файла сгенерированного кода C/C++, заданного как пара, разделенная запятой, состоящая из 'OutputFileName' и вектора символов или скаляра строки.

Объектный функциональный generateCode кодера configurer генерирует код C/C++ с помощью этого имени файла.

Имя файла не должно содержать пробелы, потому что они могут привести к отказам генерации кода в определенных настройках операционной системы. Кроме того, имя должно быть допустимым именем функции MATLAB.

Имя файла по умолчанию является именем объекта Mdl, сопровождаемого 'Model'. Например, если Mdl является объектом CompactClassificationSVM или ClassificationSVM, то именем по умолчанию является 'ClassificationSVMModel'.

После создания кодера configurer configurer, можно изменить имя файла при помощи записи через точку.

configurer.OutputFileName = 'myModel';

Пример: 'OutputFileName','myModel'

Типы данных: char | string

Уровень многословия, заданный как пара, разделенная запятой, состоящая из 'Verbose' и или true (логическая единица) или false (логический ноль). Контроль уровня многословия отображение уведомлений в командной строке для кодера configurer configurer.

ЗначениеОписание
true (логическая единица)Программное обеспечение отображает уведомления, когда ваши изменения в атрибутах кодера параметра приводят к изменениям для других зависимых параметров.
false (логический ноль)Программное обеспечение не отображает уведомления.

Чтобы позволить обновить параметры модели машинного обучения в сгенерированном коде, необходимо сконфигурировать атрибуты кодера параметров прежде, чем сгенерировать код. Атрибуты кодера параметров зависят друг от друга, таким образом, программное обеспечение хранит зависимости как ограничения настройки. Если вы изменяете атрибуты кодера параметра при помощи кодера configurer, и модификация требует, чтобы последующие изменения к другим зависимым параметрам удовлетворили ограничения настройки, то программное обеспечение изменяет атрибуты кодера зависимых параметров. Уровень многословия определяет, отображает ли программное обеспечение уведомления для этих последующих изменений.

После создания кодера configurer configurer, можно изменить уровень многословия при помощи записи через точку.

configurer.Verbose = false;

Пример: 'Verbose',false

Типы данных: логический

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

свернуть все

Кодер configurer модели машинного обучения, возвращенной как один из кодера configurer, возражает в этой таблице.

МодельОбъект кодера Конфигурера
Регрессия машины вектора поддержки (SVM)RegressionSVMCoderConfigurer
SVM для и бинарной классификации одного классаClassificationSVMCoderConfigurer
Модель Multiclass для SVMsClassificationECOCCoderConfigurer

Используйте объектные функции и свойства кодера configurer объект сконфигурировать опции генерации кода и сгенерировать код C/C++ для predict и функций update модели машинного обучения.

Введенный в R2018b