update

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

Описание

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

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

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

пример

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

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

Примеры

свернуть все

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

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

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

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

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

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

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

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

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

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

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

Во-первых, задайте атрибуты кодера X чтобы сгенерированный код принял любое количество наблюдений. Измените SizeVector и VariableDimensions атрибуты. The 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 возвращает логический 1 (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 и создайте конфигуратор кодера для модели. Используйте свойства конфигуратора кодера, чтобы задать атрибуты кодера параметров модели ECOC. Используйте функцию объекта конфигуратора кодера, чтобы сгенерировать код С, который предсказывает метки для новых данных предиктора. Затем переобучите модель с помощью разных настроек, и обновите параметры в сгенерированном коде, не регенерируя код.

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

Загрузите набор данных радужки Фишера.

load fisheriris
X = meas;
Y = species;

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

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

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

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

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

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

Создайте конфигуратор кодера для ClassificationECOC моделировать при помощи learnerCoderConfigurer. Задайте данные предиктора X. The 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 объект, который является конфигуратором кодера ClassificationECOC объект. На отображении показаны настраиваемые входные параметры predict и update: X, BinaryLearners, Prior, и Cost.

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

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

Во-первых, задайте атрибуты кодера X чтобы сгенерированный код принял любое количество наблюдений. Измените SizeVector и VariableDimensions атрибуты. The 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

Чтобы использовать значение nondefault в сгенерированном коде, необходимо задать значение перед генерацией кода. Задайте 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 (логический 0), программное обеспечение устанавливает Tunability на true (логический 1).

Отображение атрибутов кодера 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 = 
  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.

The 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 возвращает логический 1 (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) с помощью частичного набора данных и создайте конфигуратор кодера для модели. Используйте свойства конфигуратора кодера, чтобы задать атрибуты кодера параметров модели SVM. Используйте функцию объекта конфигуратора кодера, чтобы сгенерировать код С, который предсказывает отклики для новых данных предиктора. Затем переобучите модель, используя весь набор данных и параметры обновления в сгенерированном коде, не регенерируя код.

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

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

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

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

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

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

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

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

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

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

Во-первых, задайте атрибуты кодера X чтобы сгенерированный код принял любое количество наблюдений. Измените SizeVector и VariableDimensions атрибуты. The 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.

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

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

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

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 объект.

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

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

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

configurer является RegressionTreeCoderConfigurer объект, который является конфигуратором кодера RegressionTree объект.

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

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

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

The 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 возвращает логический 1 (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
Многоклассовая модель для SVM и линейных моделей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
Многоклассовая модель для SVM и линейных моделей

BinaryLearners, Cost, Prior

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

  • В противном случае params может включать Alpha, Bias, Mu, Scale(параметр шкалы ядра в 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'
    Многоклассовая модель для SVM и линейных моделей

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

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

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

  • В рабочем процессе конфигуратора кодера вы используете 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 файлы, см. Сгенерировать код используя Coder Configurer.

Алгоритмы

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

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

.
Введенный в R2018b