update

Обновите параметры модели для генерации кода

Описание

Сгенерируйте код C/C++ для predict и update функции модели машинного обучения при помощи кодера configurer объект. Создайте этот объект при помощи learnerCoderConfigurer и его объектная функция generateCode. Затем можно использовать update функционируйте, чтобы обновить параметры модели в сгенерированном коде, не имея необходимость регенерировать код. Эта функция уменьшает усилие, требуемое регенерировать, повторно развернуть, и повторно проверить код C/C++, когда вы переобучаете модель с новыми данными или настройками.

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

Если вы не генерируете код, то вы не должны использовать update функция. Когда вы переобучаете модель в MATLAB®, возвращенная модель уже включает измененные параметры.

пример

updatedMdl = update(Mdl,params) возвращает обновленную версию Mdl это содержит новые параметры в params.

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

Примеры

свернуть все

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

Обучите модель

Загрузите 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 так, чтобы сгенерированный код принял любое количество наблюдений. Измените SizeVector и VariableDimensions атрибуты. 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 просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения.

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

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

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 равны, и значения баллов равны в допуске.

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

Обучите модель

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

load fisheriris
X = meas;
Y = species;

Создайте бинарный шаблон ученика SVM, чтобы использовать Гауссову функцию ядра и стандартизировать данные о предикторе.

t = templateSVM('KernelFunction','gaussian','Standardize',true);

Обучите мультикласс модель ECOC с помощью шаблона t.

Mdl = fitcecoc(X,Y,'Learners',t);

Mdl ClassificationECOC объект.

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

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

configurer = learnerCoderConfigurer(Mdl,X,'NumOutputs',2)
configurer = 
  ClassificationECOCCoderConfigurer with properties:

   Update Inputs:
    BinaryLearners: [1x1 ClassificationSVMCoderConfigurer]
             Prior: [1x1 LearnerCoderInput]
              Cost: [1x1 LearnerCoderInput]

   Predict Inputs:
                 X: [1x1 LearnerCoderInput]

   Code Generation Parameters:
        NumOutputs: 2
    OutputFileName: 'ClassificationECOCModel'


  Properties, Methods

configurer ClassificationECOCCoderConfigurer объект, который является кодером configurer ClassificationECOC объект. Отображение показывает настраиваемые входные параметры predict и updateX, BinaryLearners, Prior, и Cost.

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

Задайте атрибуты кодера predict аргументы (данные о предикторе и аргументы пары "имя-значение" 'Decoding' и 'BinaryLoss') и update аргументы (поддерживают векторы из учеников SVM) так, чтобы можно было использовать эти аргументы в качестве входных параметров predict и update в сгенерированном коде.

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

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

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

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

Затем измените атрибуты кодера BinaryLoss и Decoding использовать 'BinaryLoss' и 'Decoding' аргументы пары "имя-значение" в сгенерированном коде. Отобразите атрибуты кодера BinaryLoss.

configurer.BinaryLoss
ans = 
  EnumeratedInput with properties:

             Value: 'hinge'
    SelectedOption: 'Built-in'
    BuiltInOptions: {1x7 cell}
        IsConstant: 1
        Tunability: 0

Чтобы использовать значение не по умолчанию в сгенерированном коде, необходимо задать значение прежде, чем сгенерировать код. Задайте Value атрибут BinaryLoss как 'exponential'.

configurer.BinaryLoss.Value = 'exponential';
configurer.BinaryLoss
ans = 
  EnumeratedInput with properties:

             Value: 'exponential'
    SelectedOption: 'Built-in'
    BuiltInOptions: {1x7 cell}
        IsConstant: 1
        Tunability: 1

Если вы изменяете значения атрибута когда Tunability false (логический ноль), программное обеспечение устанавливает Tunability к true (логическая единица).

Отобразите атрибуты кодера Decoding.

configurer.Decoding
ans = 
  EnumeratedInput with properties:

             Value: 'lossweighted'
    SelectedOption: 'Built-in'
    BuiltInOptions: {'lossweighted'  'lossbased'}
        IsConstant: 1
        Tunability: 0

Задайте IsConstant атрибут Decoding как false так, чтобы можно было использовать все доступные значения в BuiltInOptions в сгенерированном коде.

configurer.Decoding.IsConstant = false;
configurer.Decoding
ans = 
  EnumeratedInput with properties:

             Value: [1x1 LearnerCoderInput]
    SelectedOption: 'NonConstant'
    BuiltInOptions: {'lossweighted'  'lossbased'}
        IsConstant: 0
        Tunability: 1

Программное обеспечение изменяет Value атрибут Decoding к LearnerCoderInput возразите так, чтобы можно было использовать оба 'lossweighted' и 'lossbased'как значение 'Decoding'. Кроме того, программное обеспечение устанавливает SelectedOption к 'NonConstant' и Tunability к true.

Наконец, измените атрибуты кодера SupportVectors в BinaryLearners. Отобразите атрибуты кодера SupportVectors.

configurer.BinaryLearners.SupportVectors
ans = 
  LearnerCoderInput with properties:

            SizeVector: [54 4]
    VariableDimensions: [1 0]
              DataType: 'double'
            Tunability: 1

Значение по умолчанию VariableDimensions [true false] потому что у каждого ученика есть различное количество векторов поддержки. Если вы переобучаете модель ECOC с помощью новых данных или различных настроек, количество векторов поддержки в учениках SVM может варьироваться. Поэтому увеличьте верхнюю границу количества векторов поддержки.

configurer.BinaryLearners.SupportVectors.SizeVector = [150 4];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints.
SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.

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

Отобразите кодер configurer.

configurer
configurer = 
  ClassificationECOCCoderConfigurer with properties:

   Update Inputs:
    BinaryLearners: [1x1 ClassificationSVMCoderConfigurer]
             Prior: [1x1 LearnerCoderInput]
              Cost: [1x1 LearnerCoderInput]

   Predict Inputs:
                 X: [1x1 LearnerCoderInput]
        BinaryLoss: [1x1 EnumeratedInput]
          Decoding: [1x1 EnumeratedInput]

   Code Generation Parameters:
        NumOutputs: 2
    OutputFileName: 'ClassificationECOCModel'


  Properties, Methods

Отображение теперь включает BinaryLoss и Decoding также.

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

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

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

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'ClassificationECOCModel.mat'
Code generation successful.

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

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

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

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

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

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

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

[label,NegLoss] = predict(Mdl,X,'BinaryLoss','exponential');
[label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossweighted');

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

isequal(label,label_mex)
ans = logical
   1

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

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

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =

  0x1 empty double column vector

Сравнение подтверждает тот NegLoss и NegLoss_mex равны в допуске 1e–8.

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

Переобучите модель с помощью различной установки. Задайте 'KernelScale' как 'auto' так, чтобы программное обеспечение выбрало соответствующий масштабный коэффициент с помощью эвристической процедуры.

t_new = templateSVM('KernelFunction','gaussian','Standardize',true,'KernelScale','auto');
retrainedMdl = fitcecoc(X,Y,'Learners',t_new);

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

params = validatedUpdateInputs(configurer,retrainedMdl);

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

ClassificationECOCModel('update',params)

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

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

[label,NegLoss] = predict(retrainedMdl,X,'BinaryLoss','exponential','Decoding','lossbased');
[label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossbased');
isequal(label,label_mex)
ans = logical
   1

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =

  0x1 empty double column vector

Сравнение подтверждает тот label и label_mex равны, и NegLoss и NegLoss_mex равны в допуске.

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

Обучите модель

Загрузите carsmall набор данных и обучает модель регрессии SVM использование первых 50 наблюдений.

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

Mdl RegressionSVM объект.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

yfit = predict(Mdl,X);
yfit_mex = RegressionSVMModel('predict',X);

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

find(abs(yfit-yfit_mex) > 1e-6)
ans =

  0x1 empty double column vector

Сравнение подтверждает тот yfit и yfit_mex равны в допуске 1e–6.

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

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

retrainedMdl = fitrsvm(X,Y);

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

params = validatedUpdateInputs(configurer,retrainedMdl);

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

RegressionSVMModel('update',params)

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

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

yfit = predict(retrainedMdl,X);
yfit_mex = RegressionSVMModel('predict',X);
find(abs(yfit-yfit_mex) > 1e-6)
ans =

  0x1 empty double column vector

Сравнение подтверждает тот yfit и yfit_mex равны в допуске 1e-6.

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

Обучите модель

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

load carbig
X = [Displacement Horsepower Weight];
Y = MPG;

rng('default') % For reproducibility
n = length(Y);
idxTrain = randsample(n,n/2);
XTrain = X(idxTrain,:);
YTrain = Y(idxTrain);

Mdl = fitrtree(XTrain,YTrain);

Mdl RegressionTree объект.

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

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

configurer = learnerCoderConfigurer(Mdl,XTrain,'NumOutputs',2);

configurer RegressionTreeCoderConfigurer объект, который является кодером configurer RegressionTree объект.

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

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

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

configurer.X.SizeVector = [Inf 3];
configurer.X.VariableDimensions
ans = 1x2 logical array

   1   0

Размер первой размерности является количеством наблюдений. Устанавливание значения SizeVector припишите Inf заставляет программное обеспечение изменять значение VariableDimensions припишите 1. Другими словами, верхней границей размера является Inf и размер является переменным, означая, что данные о предикторе могут иметь любое количество наблюдений. Эта спецификация удобна, если вы не знаете количество наблюдений при генерации кода.

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

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

Например, установите первое значение SizeVector атрибут NodeMean свойство к Inf. Программное обеспечение изменяет SizeVector и VariableDimensions атрибуты Children, CutPoint, и CutPredictorIndex совпадать с новой верхней границей на количестве узлов в дереве. Кроме того, первое значение VariableDimensions атрибут NodeMean изменения в 1.

configurer.NodeMean.SizeVector = [Inf 1];
SizeVector attribute for Children has been modified to satisfy configuration constraints.
SizeVector attribute for CutPoint has been modified to satisfy configuration constraints.
SizeVector attribute for CutPredictorIndex has been modified to satisfy configuration constraints.
VariableDimensions attribute for Children has been modified to satisfy configuration constraints.
VariableDimensions attribute for CutPoint has been modified to satisfy configuration constraints.
VariableDimensions attribute for CutPredictorIndex has been modified to satisfy configuration constraints.
configurer.NodeMean.VariableDimensions
ans = 1x2 logical array

   1   0

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

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

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

generateCode(configurer)
generateCode creates these files in output folder:
'initialize.m', 'predict.m', 'update.m', 'RegressionTreeModel.mat'
Code generation successful.

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

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

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

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

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

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

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

[Yfit,node] = predict(Mdl,XTrain);
[Yfit_mex,node_mex] = RegressionTreeModel('predict',XTrain);

Сравните Yfit к Yfit_mex и node к node_mex.

max(abs(Yfit-Yfit_mex),[],'all')
ans = 0
isequal(node,node_mex)
ans = logical
   1

В общем случае Yfit_mex может включать различия в округлении по сравнению с Yfit. В этом случае сравнение подтверждает тот Yfit и Yfit_mex равны.

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

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

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

retrainedMdl = fitrtree(X,Y);

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

params = validatedUpdateInputs(configurer,retrainedMdl);

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

RegressionTreeModel('update',params)

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

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

[Yfit,node] = predict(retrainedMdl,X);
[Yfit_mex,node_mex] = RegressionTreeModel('predict',X);

max(abs(Yfit-Yfit_mex),[],'all')
ans = 0
isequal(node,node_mex)
ans = logical
   1

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

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

свернуть все

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

МодельОбъект модели
Дерево выбора из двух альтернатив для классификации мультиклассовCompactClassificationTree
SVM для и бинарной классификации одного классаCompactClassificationSVM
Линейная модель для бинарной классификацииClassificationLinear
Модель Multiclass для SVMs и линейные моделиCompactClassificationECOC
Дерево выбора из двух альтернатив для регрессииCompactRegressionTree
Регрессия машины опорных векторов (SVM)CompactRegressionSVM
Линейная регрессияRegressionLinear

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

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

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

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

МодельПараметры, чтобы обновиться
Дерево выбора из двух альтернатив для классификации мультиклассовChildren, ClassProbability, Cost, CutPoint, CutPredictorIndex, Prior
SVM для и бинарной классификации одного класса
  • Если Mdl модель классификации SVM одного класса, затем params не может включать Cost или Prior.

Линейная модель для бинарной классификацииBeta, Bias, Cost, Prior
Модель Multiclass для SVMs и линейные модели

BinaryLearners, Cost, Prior

Дерево выбора из двух альтернатив для регрессииChildren, CutPoint, CutPredictorIndex, NodeMean
Регрессия SVM
  • Если вы обучаете модель регрессии SVM (Mdl) с линейной функцией ядра и отбрасыванием поддерживают векторы при помощи discardSupportVectors, затем params может включать Beta, Bias\muшкала (масштабный коэффициент ядра в KernelParameters), и Sigma.

  • В противном случае, params может включать Alpha, Bias\muшкала (масштабный коэффициент ядра в KernelParameters\sigma, и SupportVectors.

Линейная регрессияBeta, Bias

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

свернуть все

Обновленная модель машинного обучения, возвращенная как объект модели, который является тем же типом объекта как Mdl. Выход updatedMdl обновленная версия входа Mdl это содержит новые параметры в params.

Советы

  • Если вы изменяете какой-либо из аргументов пары "имя-значение", перечисленных в этой таблице, когда вы переобучаете модель, вы не можете использовать update обновить параметры. Необходимо сгенерировать код C/C++ снова.

    МодельАргументы, не поддержанные для обновления
    Дерево выбора из двух альтернатив для классификации мультиклассовАргументы fitctree'ClassNames', 'ScoreTransform'
    SVM для и бинарной классификации одного классаАргументы fitcsvm'ClassNames', 'KernelFunction', 'PolynomialOrder', 'ScoreTransform', 'Standardize'
    Линейная модель для бинарной классификацииАргументы fitclinear'ClassNames', 'ScoreTransform'
    Модель Multiclass для SVMs и линейные модели

    Аргументы fitcecoc'ClassNames', 'Coding', 'ScoreTransform'

    Если вы задаете бинарных учеников в fitcecoc как объекты шаблона (см. 'Learners'), затем для каждого бинарного ученика, вы не можете изменить следующее:

    Дерево выбора из двух альтернатив для регрессииАргументы fitrtree'ResponseTransform'
    Регрессия SVMАргументы fitrsvm'KernelFunction', 'PolynomialOrder', 'ResponseTransform', 'Standardize'
    Линейная регрессияАргументы fitrlinear'ResponseTransform'

  • В кодере configurer рабочий процесс, вы используете generateCode создать обоих update.m функция точки входа и MEX-функция для функции точки входа. Брать имя MEX-функции является myModel, вы вызываете update использование этого синтаксиса.

    myModel('update',params)

    Чтобы видеть, как синтаксис, описанный на этой странице, используется в функции точки входа, отобразите содержимое update.m и initialize.m файлы при помощи type функция.

    type update.m
    type initialize.m

    Для примера, который показывает содержимое update.m и initialize.m файлы, смотрите, Генерируют Код Используя Кодер Конфигурера.

Алгоритмы

В кодере configurer рабочий процесс, Mdl входной параметр update модель, возвращенная loadLearnerForCoder. Эта модель и updatedMdl объект является уменьшаемой классификацией или моделями регрессии, которые, в основном, содержат свойства, требуемые для предсказания.

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

Введенный в R2018b