validatedUpdateInputs

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

Описание

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

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

пример

params = validatedUpdateInputs(configurer,retrainedMdl) возвращает подтвержденные параметры модели машинного обучения, чтобы обновиться. validatedUpdateInputs обнаруживает модифицированные параметры модели в retrainedMdl и подтверждает, удовлетворяют ли они атрибутам кодера, сохраненным в configurer.

Примеры

свернуть все

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

Обучите модель выходных кодов с коррекцией ошибок (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 просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (MATLAB).

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

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

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 просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (MATLAB).

Используйте generateCode сгенерировать код для 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, соответственно. Затем 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 = 1×2 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 = 1×2 logical array

   1   0

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

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

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

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

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

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

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

свернуть все

Кодер configurer модели машинного обучения, заданной как кодер configurer объект, создается при помощи learnerCoderConfigurer.

МодельОбъект кодера Конфигурера
Дерево выбора из двух альтернатив для классификации мультиклассовClassificationTreeCoderConfigurer
SVM для и бинарной классификации одного классаClassificationSVMCoderConfigurer
Линейная модель для бинарной классификацииClassificationLinearCoderConfigurer
Модель Multiclass для SVMs и линейные моделиClassificationECOCCoderConfigurer
Дерево выбора из двух альтернатив для регрессииRegressionTreeCoderConfigurer
Регрессия машины опорных векторов (SVM)RegressionSVMCoderConfigurer
Линейная регрессияRegressionLinearCoderConfigurer

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

МодельПолная Объектная / Объектная Компактная модельУчебная функция
Дерево выбора из двух альтернатив для классификации мультиклассовClassificationTree, CompactClassificationTreefitctree
SVM для и бинарной классификации одного классаClassificationSVM, CompactClassificationSVMfitcsvm
Линейная модель для бинарной классификацииClassificationLinearfitclinear
Модель Multiclass для SVMs и линейные моделиClassificationECOC, CompactClassificationECOCfitcecoc
Дерево выбора из двух альтернатив для регрессииRegressionTree, CompactRegressionTreefitrtree
Регрессия машины опорных векторов (SVM)RegressionSVM, CompactRegressionSVMfitrsvm
Линейная регрессияRegressionLinearfitrlinear

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

свернуть все

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

Параметры модели в params включайте все параметры, перечисленные в UpdateInputs свойство configurer, который является списком настраиваемых параметров модели.

Можно использовать params как входной параметр update обновить параметры модели.

Советы

  • validatedUpdateInputs возвращает сообщение об ошибке, если вы изменяете какой-либо из аргументов пары "имя-значение", перечисленных в этой таблице, когда вы переобучаете модель retrainedMdl. В этом случае вы не можете использовать 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'

  • validatedUpdateInputs отображает предупреждающее сообщение если параметры модели машинного обучения в configurer и retrainedMdl идентичны.

Введенный в R2018b

Для просмотра документации необходимо авторизоваться на сайте