Обновите параметры модели для генерации кода
Сгенерируйте код 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
просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (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
и update
X
, 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
Сравнение подтверждает, что предсказанные ответы и числа узла равны.
Mdl
— Модель машинного обученияМодель машинного обучения, заданная как объект модели, как дали в этой таблице поддерживаемых моделей.
Модель | Объект модели |
---|---|
Дерево выбора из двух альтернатив для классификации мультиклассов | CompactClassificationTree |
SVM для и бинарной классификации одного класса | CompactClassificationSVM |
Линейная модель для бинарной классификации | ClassificationLinear |
Модель Multiclass для SVMs и линейные модели | CompactClassificationECOC |
Дерево выбора из двух альтернатив для регрессии | CompactRegressionTree |
Регрессия машины опорных векторов (SVM) | CompactRegressionSVM |
Линейная регрессия | RegressionLinear |
Для указаний и ограничений по применению генерации кода модели машинного обучения смотрите раздел Code Generation страницы объекта модели.
params
— Параметры, чтобы обновитьсяПараметры, чтобы обновиться в модели машинного обучения, заданной как структура с полем для каждого параметра, чтобы обновиться.
Создайте params
при помощи validatedUpdateInputs
функция. Эта функция обнаруживает измененные параметры в переобученной модели, подтверждает, удовлетворяют ли модифицированные значения параметров атрибутам кодера параметров, и возвращает параметры, чтобы обновиться как структура.
Набор параметров, которые можно обновить, варьируется в зависимости от модели машинного обучения, как описано в этой таблице.
Модель | Параметры, чтобы обновиться |
---|---|
Дерево выбора из двух альтернатив для классификации мультиклассов | Children , ClassProbability , Cost , CutPoint , CutPredictorIndex , Prior |
SVM для и бинарной классификации одного класса |
|
Линейная модель для бинарной классификации | Beta , Bias , Cost , Prior |
Модель Multiclass для SVMs и линейные модели | |
Дерево выбора из двух альтернатив для регрессии | Children , CutPoint , CutPredictorIndex , NodeMean |
Регрессия SVM |
|
Линейная регрессия | Beta , Bias |
Если вы изменяете какой-либо из аргументов пары "имя-значение", перечисленных в этой таблице, когда вы переобучаете модель, вы не можете использовать update
обновить параметры. Необходимо сгенерировать код C/C++ снова.
Модель | Аргументы, не поддержанные для обновления |
---|---|
Дерево выбора из двух альтернатив для классификации мультиклассов | Аргументы fitctree — 'ClassNames' , 'ScoreTransform' |
SVM для и бинарной классификации одного класса | Аргументы fitcsvm — 'ClassNames' , 'KernelFunction' , 'PolynomialOrder' , 'ScoreTransform' , 'Standardize' |
Линейная модель для бинарной классификации | Аргументы fitclinear — 'ClassNames' , 'ScoreTransform' |
Модель Multiclass для SVMs и линейные модели | Аргументы Если вы задаете бинарных учеников в
|
Дерево выбора из двух альтернатив для регрессии | Аргументы 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
объект является уменьшаемой классификацией или моделями регрессии, которые, в основном, содержат свойства, требуемые для прогноза.
Указания и ограничения по применению:
Создайте кодер configurer при помощи learnerCoderConfigurer
и затем сгенерируйте код для predict
и update
при помощи объектного функционального generateCode
.
Для указаний и ограничений по применению генерации кода модели Mdl
машинного обучения, смотрите раздел Code Generation страницы объекта модели.
Модель | Объект модели |
---|---|
Дерево выбора из двух альтернатив для классификации мультиклассов | CompactClassificationTree |
SVM для и бинарной классификации одного класса | CompactClassificationSVM |
Линейная модель для бинарной классификации | ClassificationLinear |
Модель Multiclass для SVMs и линейные модели | CompactClassificationECOC |
Дерево выбора из двух альтернатив для регрессии | CompactRegressionTree |
Регрессия машины опорных векторов (SVM) | CompactRegressionSVM |
Линейная регрессия | RegressionLinear |
Для получения дополнительной информации смотрите Введение в Генерацию кода.
generateCode
| learnerCoderConfigurer
| validatedUpdateInputs
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.