Валидация и экстракция параметров модели машинного обучения для обновления
Сгенерируйте код C/C + + для predict
и update
функции модели машинного обучения при помощи объекта конфигуратора кодера. Создайте этот объект при помощи learnerCoderConfigurer
и его функции объекта generateCode
. После переобучения модели с новыми данными или настройками можно обновить параметры модели в сгенерированном коде, не регенерируя код. Использовать validatedUpdateInputs
чтобы подтвердить и извлечь параметры модели для обновления. Эта функция помогает вам идентифицировать потенциальные проблемы, прежде чем вы обновляете параметры модели в сгенерированном коде. Можно использовать выход validatedUpdateInputs
, проверенные параметры, как входной параметр из update
функция для обновления параметров модели.
Этот график потока показывает рабочий процесс генерации кода с помощью конфигуратора кодера. Использовать validatedUpdateInputs
для выделенного шага.
возвращает проверенные параметры модели машинного обучения для обновления. params
= validatedUpdateInputs(configurer
,retrainedMdl
)validatedUpdateInputs
обнаруживает измененные параметры модели в retrainedMdl
и подтверждает, удовлетворяют ли они атрибутам кодера, хранящимся в configurer
.
Обучите модель 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
Сравнение подтверждает, что предсказанные отклики и номера узлов равны.
configurer
- Конфигуратор кодераКонфигуратор кодера модели машинного обучения, заданный как объект конфигуратора кодера, созданный при помощи learnerCoderConfigurer
.
Модель | Объект конфигуратора кодера |
---|---|
Двоичное дерево принятия решений для многоклассовой классификации | ClassificationTreeCoderConfigurer |
SVM для одноклассовой и двоичной классификации | ClassificationSVMCoderConfigurer |
Линейная модель для двоичной классификации | ClassificationLinearCoderConfigurer |
Многоклассовая модель для SVM и линейных моделей | ClassificationECOCCoderConfigurer |
Двоичное дерево решений для регрессии | RegressionTreeCoderConfigurer |
Машина опорных векторов (SVM) | RegressionSVMCoderConfigurer |
Линейная регрессия | RegressionLinearCoderConfigurer |
retrainedMdl
- Переобученная модель машинного обученияПереобученная модель машинного обучения, заданная как полный или компактный объект модели, как представлено в этой таблице поддерживаемых моделей.
Модель | Полный/компактный объект модели | Функция обучения |
---|---|---|
Двоичное дерево принятия решений для многоклассовой классификации | ClassificationTree , CompactClassificationTree | fitctree |
SVM для одноклассовой и двоичной классификации | ClassificationSVM , CompactClassificationSVM | fitcsvm |
Линейная модель для двоичной классификации | ClassificationLinear | fitclinear |
Многоклассовая модель для SVM и линейных моделей | ClassificationECOC , CompactClassificationECOC | fitcecoc |
Двоичное дерево решений для регрессии | RegressionTree , CompactRegressionTree | fitrtree |
Машина опорных векторов (SVM) | RegressionSVM , CompactRegressionSVM | fitrsvm |
Линейная регрессия | RegressionLinear | fitrlinear |
params
- Проверенные параметры для обновленияПроверенные параметры для обновления в модели машинного обучения, заданные как структура с полем для каждого параметра, извлеченного из retrainedMdl
.
Параметры модели в params
включить все параметры, перечисленные в UpdateInputs
свойство configurer
, который является списком настраиваемых параметров модели.
Можно использовать params
как входной параметр update
для обновления параметров модели.
validatedUpdateInputs
возвращает сообщение об ошибке, если вы измените любой из аргументов пары "имя-значение", перечисленных в этой таблице, при переобучении модели retrainedMdl
. В этом случае вы не можете использовать update
для обновления параметров. Вы должны сгенерировать код C/C + + снова.
Модель | Аргументы, не поддерживаемые для обновления |
---|---|
Двоичное дерево принятия решений для многоклассовой классификации | Аргументы fitctree — 'ClassNames' , 'ScoreTransform' |
SVM для одноклассовой и двоичной классификации | Аргументы fitcsvm — 'ClassNames' , 'KernelFunction' , 'PolynomialOrder' , 'ScoreTransform' , 'Standardize' |
Линейная модель для двоичной классификации | Аргументы fitclinear — 'ClassNames' , 'ScoreTransform' |
Многоклассовая модель для SVM и линейных моделей | Аргументы Если вы задаете двоичных учащихся в
|
Двоичное дерево решений для регрессии | Аргументы fitrtree — 'ResponseTransform' |
Регрессия SVM | Аргументы fitrsvm — 'KernelFunction' , 'PolynomialOrder' , 'ResponseTransform' , 'Standardize' |
Линейная регрессия | Аргументы fitrlinear — 'ResponseTransform' |
validatedUpdateInputs
отображает предупреждающее сообщение, если параметры модели машинного обучения в configurer
и retrainedMdl
идентичны.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.