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

Если вы не создаете код, то вам не нужно использовать update функция. При переподготовке модели в MATLAB ® возвращаемая модель уже включает измененные параметры.
возвращает обновленную версию updatedMdl = update(Mdl,params)Mdl который содержит новые параметры в params.
После переподготовки модели используйте validatedUpdateInputs функция обнаружения измененных параметров в переученной модели и проверки того, удовлетворяют ли измененные значения параметров атрибутам кодера параметров. Использовать выходные данные validatedUpdateInputs, проверенные параметры, в качестве входных params для обновления параметров модели.
В этом примере используются:
Обучение модели SVM с использованием частичного набора данных и создание конфигуратора кодера для модели. Используйте свойства конфигуратора кодера для указания атрибутов кодера параметров модели SVM. Используйте функцию объекта конфигуратора кодера для генерации кода C, который предсказывает метки для новых данных предиктора. Затем переобучите модель, используя весь набор данных, и обновите параметры в сгенерированном коде без регенерации кода.
Модель поезда
Загрузить ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный отклик для радарных возвращений, либо плохой ('b') или хорошо ('g'). Тренировка двоичной модели классификации SVM с использованием первых 50 наблюдений.
load ionosphere
Mdl = fitcsvm(X(1:50,:),Y(1:50));Mdl является ClassificationSVM объект.
Создать конфигуратор кодера
Создание конфигуратора кодера для ClassificationSVM модель с использованием learnerCoderConfigurer. Укажите данные предиктора X. learnerCoderConfigurer функция использует вход X для конфигурирования атрибутов кодера predict ввод функции. Кроме того, установите число выходов равным 2, чтобы сгенерированный код возвращал предсказанные метки и оценки.
configurer = learnerCoderConfigurer(Mdl,X(1:50,:),'NumOutputs',2);configurer является ClassificationSVMCoderConfigurer объект, который является конфигуратором кодера ClassificationSVM объект.
Определение атрибутов кодера параметров
Укажите атрибуты кодера параметров модели классификации SVM, чтобы можно было обновить параметры в сгенерированном коде после переподготовки модели. В этом примере указываются атрибуты кодера данных предиктора, которые требуется передать сгенерированному коду, и атрибуты кодера векторов поддержки модели SVM.
Сначала укажите атрибуты кодера X чтобы сгенерированный код принял любое количество наблюдений. Изменение SizeVector и VariableDimensions атрибуты. SizeVector атрибут указывает верхнюю границу размера данных предиктора и VariableDimensions атрибут указывает, имеет ли каждое измерение данных предиктора переменный размер или фиксированный размер.
configurer.X.SizeVector = [Inf 34]; configurer.X.VariableDimensions = [true false];
Размер первого измерения - это количество наблюдений. В этом случае код указывает, что верхняя граница размера равна Inf и размер является переменным, что означает, что X может иметь любое количество наблюдений. Эта спецификация удобна, если не известно количество наблюдений при создании кода.
Размер второго измерения - это количество переменных предиктора. Это значение должно быть фиксированным для модели машинного обучения. X содержит 34 предиктора, поэтому значение SizeVector атрибут должен быть 34, а значение VariableDimensions атрибут должен быть false.
При переподготовке модели SVM с использованием новых данных или различных настроек количество векторов поддержки может варьироваться. Поэтому укажите атрибуты кодера SupportVectors для обновления векторов поддержки в сгенерированном коде.
configurer.SupportVectors.SizeVector = [250 34];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints. SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
configurer.SupportVectors.VariableDimensions = [true false];
VariableDimensions attribute for Alpha has been modified to satisfy configuration constraints. VariableDimensions attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
При изменении атрибутов кодера SupportVectors, то программное обеспечение изменяет атрибуты кодера Alpha и SupportVectorLabels для удовлетворения ограничений конфигурации. Если изменение атрибутов кодера одного параметра требует последующих изменений других зависимых параметров для удовлетворения ограничений конфигурации, то программное обеспечение изменяет атрибуты кодера зависимых параметров.
Создать код
Для создания кода C/C + + необходимо иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый установленный компилятор. Вы можете использоватьmex -setup для просмотра и изменения компилятора по умолчанию. Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.
Использовать generateCode для создания кода для predict и update функции модели классификации SVM (Mdl) с настройками по умолчанию.
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat' Code generation successful.
generateCode создает файлы MATLAB, необходимые для создания кода, включая две функции точки входа predict.m и update.m для predict и update функции Mdlсоответственно. Тогда generateCode создает функцию MEX с именем ClassificationSVMModel для двух функций начального уровня в codegen\mex\ClassificationSVMModel и копирует функцию MEX в текущую папку.
Проверить созданный код
Передайте некоторые данные предиктора, чтобы проверить, predict функция Mdl и predict функция в функции MEX возвращает те же самые метки. Чтобы вызвать функцию точки входа в функции MEX, которая имеет более одной точки входа, укажите имя функции в качестве первого входного аргумента.
[label,score] = predict(Mdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);Выдержать сравнение label и label_mex с помощью isequal.
isequal(label,label_mex)
ans = logical
1
isequal возвращает логический 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. Используйте функцию объекта конфигуратора кодера для генерации кода C, который предсказывает метки для новых данных предиктора. Затем переобучите модель, используя различные настройки, и обновите параметры в сгенерированном коде без регенерации кода.
Модель поезда
Загрузите набор данных радужки Фишера.
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. 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 атрибуты. 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.BinaryLossans =
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.
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. Используйте функцию объекта конфигуратора кодера для генерации кода C, который предсказывает ответы для новых данных предиктора. Затем переобучите модель, используя весь набор данных, и обновите параметры в сгенерированном коде без регенерации кода.
Модель поезда
Загрузить carsmall набор данных и обучение модели регрессии SVM с использованием первых 50 наблюдений.
load carsmall
X = [Horsepower,Weight];
Y = MPG;
Mdl = fitrsvm(X(1:50,:),Y(1:50));Mdl является RegressionSVM объект.
Создать конфигуратор кодера
Создание конфигуратора кодера для RegressionSVM модель с использованием learnerCoderConfigurer. Укажите данные предиктора X. learnerCoderConfigurer функция использует вход X для конфигурирования атрибутов кодера predict ввод функции.
configurer = learnerCoderConfigurer(Mdl,X(1:50,:));
configurer является RegressionSVMCoderConfigurer объект, который является конфигуратором кодера RegressionSVM объект.
Определение атрибутов кодера параметров
Укажите атрибуты кодера параметров модели регрессии SVM, чтобы можно было обновить параметры в сгенерированном коде после переподготовки модели. В этом примере указываются атрибуты кодера данных предиктора, которые требуется передать сгенерированному коду, и атрибуты кодера векторов поддержки регрессионной модели SVM.
Сначала укажите атрибуты кодера X чтобы сгенерированный код принял любое количество наблюдений. Изменение SizeVector и VariableDimensions атрибуты. SizeVector атрибут указывает верхнюю границу размера данных предиктора и VariableDimensions атрибут указывает, имеет ли каждое измерение данных предиктора переменный размер или фиксированный размер.
configurer.X.SizeVector = [Inf 2]; configurer.X.VariableDimensions = [true false];
Размер первого измерения - это количество наблюдений. В этом случае код указывает, что верхняя граница размера равна Inf и размер является переменным, что означает, что X может иметь любое количество наблюдений. Эта спецификация удобна, если не известно количество наблюдений при создании кода.
Размер второго измерения - это количество переменных предиктора. Это значение должно быть фиксированным для модели машинного обучения. X содержит два предиктора, поэтому значение SizeVector атрибут должен быть два и значение VariableDimensions атрибут должен быть false.
При переподготовке модели SVM с использованием новых данных или различных настроек количество векторов поддержки может варьироваться. Поэтому укажите атрибуты кодера SupportVectors для обновления векторов поддержки в сгенерированном коде.
configurer.SupportVectors.SizeVector = [250 2];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints.
configurer.SupportVectors.VariableDimensions = [true false];
VariableDimensions attribute for Alpha has been modified to satisfy configuration constraints.
При изменении атрибутов кодера SupportVectors, то программное обеспечение изменяет атрибуты кодера Alpha для удовлетворения ограничений конфигурации. Если изменение атрибутов кодера одного параметра требует последующих изменений других зависимых параметров для удовлетворения ограничений конфигурации, то программное обеспечение изменяет атрибуты кодера зависимых параметров.
Создать код
Для создания кода C/C + + необходимо иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый установленный компилятор. Вы можете использоватьmex -setup для просмотра и изменения компилятора по умолчанию. Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.
Использовать generateCode для создания кода для predict и update функции регрессионной модели SVM (Mdl) с настройками по умолчанию.
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'RegressionSVMModel.mat' Code generation successful.
generateCode создает файлы MATLAB, необходимые для создания кода, включая две функции точки входа predict.m и update.m для predict и update функции Mdlсоответственно. Тогда generateCode создает функцию MEX с именем RegressionSVMModel для двух функций начального уровня в codegen\mex\RegressionSVMModel и копирует функцию MEX в текущую папку.
Проверить созданный код
Передайте некоторые данные предиктора, чтобы проверить, predict функция Mdl и predict функция в функции MEX возвращает те же предсказанные отклики. Чтобы вызвать функцию точки входа в функции MEX, которая имеет более одной точки входа, укажите имя функции в качестве первого входного аргумента.
yfit = predict(Mdl,X);
yfit_mex = RegressionSVMModel('predict',X);yfit_mex может включать разницы округления по сравнению с yfit. В этом случае сравните yfit и yfit_mex, допуская небольшой допуск.
find(abs(yfit-yfit_mex) > 1e-6)
ans = 0x1 empty double column vector
Сравнение подтверждает, что yfit и yfit_mex равны в пределах допуска 1e–6.
Переподготовка модели и обновление параметров в сгенерированном коде
Переподготовка модели с использованием всего набора данных.
retrainedMdl = fitrsvm(X,Y);
Извлечение параметров для обновления с помощью validatedUpdateInputs. Эта функция обнаруживает измененные параметры модели в retrainedMdl и проверяет, удовлетворяют ли измененные значения параметров атрибутам кодера параметров.
params = validatedUpdateInputs(configurer,retrainedMdl);
Обновите параметры в созданном коде.
RegressionSVMModel('update',params)Проверить созданный код
Сравните выходные данные predict функция retrainedMdl и predict в обновленной функции MEX.
yfit = predict(retrainedMdl,X);
yfit_mex = RegressionSVMModel('predict',X);
find(abs(yfit-yfit_mex) > 1e-6)ans = 0x1 empty double column vector
Сравнение подтверждает, что yfit и yfit_mex равны в пределах допуска 1e-6.
В этом примере используются:
Обучение дерева регрессии с использованием частичного набора данных и создание конфигуратора кодера для модели. Используйте свойства конфигуратора кодера, чтобы указать атрибуты кодера параметров модели. Используйте функцию объекта конфигуратора кодера для генерации кода C, который предсказывает ответы для новых данных предиктора. Затем переобучите модель, используя весь набор данных, и обновите параметры в сгенерированном коде без регенерации кода.
Модель поезда
Загрузить 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 объект.
Создать конфигуратор кодера
Создание конфигуратора кодера для RegressionTree модель с использованием learnerCoderConfigurer. Укажите данные предиктора XTrain. learnerCoderConfigurer функция использует вход XTrain для конфигурирования атрибутов кодера predict ввод функции. Кроме того, установите количество выходов равным 2, чтобы сгенерированный код возвращал предсказанные отклики и номера узлов для прогнозов.
configurer = learnerCoderConfigurer(Mdl,XTrain,'NumOutputs',2);configurer является RegressionTreeCoderConfigurer объект, который является конфигуратором кодера RegressionTree объект.
Определение атрибутов кодера параметров
Укажите атрибуты кодера параметров модели дерева регрессии, чтобы можно было обновить параметры в сгенерированном коде после переподготовки модели.
Укажите атрибуты кодера для X имущество configurer чтобы сгенерированный код принял любое количество наблюдений. Изменение SizeVector и VariableDimensions атрибуты. SizeVector атрибут указывает верхнюю границу размера данных предиктора и VariableDimensions атрибут указывает, имеет ли каждое измерение данных предиктора переменный размер или фиксированный размер.
configurer.X.SizeVector = [Inf 3]; configurer.X.VariableDimensions
ans = 1x2 logical array
1 0
Размер первого измерения - это количество наблюдений. Установка значения SizeVector атрибут для Inf приводит к изменению значения VariableDimensions атрибут для 1. Другими словами, верхняя граница размера равна Inf и размер является переменным, что означает, что данные предиктора могут иметь любое количество наблюдений. Эта спецификация удобна, если не известно количество наблюдений при создании кода.
Размер второго измерения - это количество переменных предиктора. Это значение должно быть фиксированным для модели машинного обучения. Поскольку данные предиктора содержат 3 предиктора, значение SizeVector атрибут должен быть 3 и значение VariableDimensions атрибут должен быть 0.
При переподготовке модели дерева с использованием новых данных или других настроек количество узлов в дереве может изменяться. Поэтому укажите первый размер SizeVector атрибут одного из этих свойств, чтобы можно было обновить количество узлов в сгенерированном коде: Children, CutPoint, CutPredictorIndex, или NodeMean. Затем программа автоматически изменяет другие свойства.
Например, задайте первое значение SizeVector атрибут NodeMean свойство для Inf. Программное обеспечение изменяет SizeVector и VariableDimensions атрибуты Children, CutPoint, и CutPredictorIndex для соответствия новой верхней границе по количеству узлов в дереве. Кроме того, первое значение VariableDimensions атрибут NodeMean изменения в 1.
configurer.NodeMean.SizeVector = [Inf 1];
SizeVector attribute for Children has been modified to satisfy configuration constraints. SizeVector attribute for CutPoint has been modified to satisfy configuration constraints. SizeVector attribute for CutPredictorIndex has been modified to satisfy configuration constraints. VariableDimensions attribute for Children has been modified to satisfy configuration constraints. VariableDimensions attribute for CutPoint has been modified to satisfy configuration constraints. VariableDimensions attribute for CutPredictorIndex has been modified to satisfy configuration constraints.
configurer.NodeMean.VariableDimensions
ans = 1x2 logical array
1 0
Создать код
Для создания кода C/C + + необходимо иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый установленный компилятор. Вы можете использоватьmex -setup для просмотра и изменения компилятора по умолчанию. Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.
Создание кода для predict и update функции модели регрессионного дерева (Mdl).
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'RegressionTreeModel.mat' Code generation successful.
generateCode функция выполняет следующие действия:
Создание файлов MATLAB, необходимых для создания кода, включая две функции точки входа predict.m и update.m для predict и update функции Mdlсоответственно.
Создание функции MEX с именем RegressionTreeModel для двух функций точки входа.
Создайте код для функции MEX в codegen\mex\RegressionTreeModel папка.
Скопируйте функцию MEX в текущую папку.
Проверить созданный код
Передайте некоторые данные предиктора, чтобы проверить, predict функция Mdl и predict функция в функции MEX возвращает те же предсказанные отклики. Чтобы вызвать функцию точки входа в функции MEX, которая имеет более одной точки входа, укажите имя функции в качестве первого входного аргумента.
[Yfit,node] = predict(Mdl,XTrain);
[Yfit_mex,node_mex] = RegressionTreeModel('predict',XTrain);Выдержать сравнение Yfit кому Yfit_mex и node кому node_mex.
max(abs(Yfit-Yfit_mex),[],'all')ans = 0
isequal(node,node_mex)
ans = logical
1
В общем, Yfit_mex может включать разницы округления по сравнению с Yfit. В этом случае сравнение подтверждает, что Yfit и Yfit_mex равны.
isequal возвращает логический 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
Сравнение подтверждает, что прогнозируемые отклики и номера узлов равны.
Mdl - Модель машинного обученияМодель машинного обучения, заданная как объект модели, как указано в этой таблице поддерживаемых моделей.
| Модель | Объект модели |
|---|---|
| Двоичное дерево решений для многоклассовой классификации | CompactClassificationTree |
| SVM для одноклассной и двоичной классификации | CompactClassificationSVM |
| Линейная модель для двоичной классификации | ClassificationLinear |
| Многоклассовая модель для SVM и линейных моделей | CompactClassificationECOC |
| Двоичное дерево решений для регрессии | CompactRegressionTree |
| Регрессия вектора поддержки (SVM) | CompactRegressionSVM |
| Линейная регрессия | RegressionLinear |
Примечания по использованию генерации кода и ограничения модели машинного обучения см. в разделе Создание кода на странице объекта модели.
params - Параметры для обновленияПараметры для обновления в модели машинного обучения, заданные как структура с полем для каждого обновляемого параметра.
Создать params с помощью validatedUpdateInputs функция. Эта функция обнаруживает измененные параметры в переработанной модели, проверяет, удовлетворяют ли измененные значения параметров атрибутам кодера параметров, и возвращает параметры для обновления в виде структуры.
Набор параметров, которые можно обновить, зависит от модели машинного обучения, как описано в этой таблице.
| Модель | Параметры для обновления |
|---|---|
| Двоичное дерево решений для многоклассовой классификации | Children, ClassProbability, Cost, CutPoint, CutPredictorIndex, Prior |
| SVM для одноклассной и двоичной классификации |
|
| Линейная модель для двоичной классификации | Beta, Bias, Cost, Prior |
| Многоклассовая модель для SVM и линейных моделей | |
| Двоичное дерево решений для регрессии | Children, CutPoint, CutPredictorIndex, NodeMean |
| Регрессия SVM |
|
| Линейная регрессия | Beta, Bias |
При изменении любого из аргументов пары «имя-значение», перечисленных в этой таблице, при переподготовке модели нельзя использовать 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' |
В рабочем процессе конфигуратора кодера используется 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 см. раздел Создание кода с помощью конфигуратора кодера.
В рабочем процессе конфигуратора кодера Mdl входной аргумент update является моделью, возвращенной loadLearnerForCoder. Эта модель и updatedMdl объекты представляют собой уменьшенные классификационные или регрессионные модели, которые в первую очередь содержат свойства, необходимые для прогнозирования.
Примечания и ограничения по использованию:
Создание конфигуратора кодера с помощью learnerCoderConfigurer а затем создать код для predict и update с помощью функции объекта generateCode.
Примечания по использованию генерации кода и ограничения модели машинного обучения Mdlсм. раздел Создание кода на странице объекта модели.
| Модель | Объект модели |
|---|---|
| Двоичное дерево решений для многоклассовой классификации | CompactClassificationTree |
| SVM для одноклассной и двоичной классификации | CompactClassificationSVM |
| Линейная модель для двоичной классификации | ClassificationLinear |
| Многоклассовая модель для SVM и линейных моделей | CompactClassificationECOC |
| Двоичное дерево решений для регрессии | CompactRegressionTree |
| Регрессия вектора поддержки (SVM) | CompactRegressionSVM |
| Линейная регрессия | RegressionLinear |
Дополнительные сведения см. в разделе Введение в создание кода.
generateCode | learnerCoderConfigurer | validatedUpdateInputs
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.