Обучите модель выходных кодов с коррекцией ошибок (ECOC), использующую двоичных учеников SVM, и создайте кодер configurer для модели. Используйте свойства кодера configurer, чтобы задать атрибуты кодера параметров модели ECOC. Используйте объектную функцию кодера configurer, чтобы сгенерировать код С, который предсказывает метки для новых данных о предикторе. Затем переобучите модель с помощью различных настроек и параметров обновления в сгенерированном коде, не регенерируя код.
Обучите модель
Загрузите ирисовый набор данных Фишера.
Создайте бинарный шаблон ученика SVM, чтобы использовать Гауссову функцию ядра и стандартизировать данные о предикторе.
Обучите мультикласс модель ECOC с помощью шаблона t
.
Mdl
ClassificationECOC
объект.
Создайте кодер Конфигурера
Создайте кодер configurer для ClassificationECOC
модель при помощи learnerCoderConfigurer
. Задайте данные о предикторе X
. learnerCoderConfigurer
функционируйте использует вход X
сконфигурировать атрибуты кодера predict
входной параметр функции. Кроме того, определите номер выходных параметров к 2 так, чтобы сгенерированный код возвратил сначала два выходных параметра predict
функция, которые являются предсказанными метками и инвертировали средние бинарные потери.
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
атрибут задает, имеет ли каждая размерность данных о предикторе переменный размер или фиксированный размер.
Размер первой размерности является количеством наблюдений. В этом случае код указывает, что верхней границей размера является Inf
и размер является переменным, означая тот X
может иметь любое количество наблюдений. Эта спецификация удобна, если вы не знаете количество наблюдений при генерации кода.
Размер второго измерения является количеством переменных предикторов. Это значение должно быть зафиксировано для модели машинного обучения. X
содержит 4 предиктора, таким образом, второе значение SizeVector
атрибут должен быть 4 и второе значение VariableDimensions
атрибутом должен быть false
.
Затем измените атрибуты кодера BinaryLoss
и Decoding
использовать 'BinaryLoss'
и 'Decoding'
аргументы пары "имя-значение" в сгенерированном коде. Отобразите атрибуты кодера BinaryLoss
.
ans =
EnumeratedInput with properties:
Value: 'hinge'
SelectedOption: 'Built-in'
BuiltInOptions: {1x7 cell}
IsConstant: 1
Tunability: 0
Чтобы использовать значение не по умолчанию в сгенерированном коде, необходимо задать значение прежде, чем сгенерировать код. Задайте Value
атрибут BinaryLoss
как 'exponential'
.
ans =
EnumeratedInput with properties:
Value: 'exponential'
SelectedOption: 'Built-in'
BuiltInOptions: {1x7 cell}
IsConstant: 1
Tunability: 1
Если вы изменяете значения атрибута когда Tunability
false
(логический ноль), программное обеспечение устанавливает Tunability
к true
(логическая единица).
Отобразите атрибуты кодера Decoding
.
ans =
EnumeratedInput with properties:
Value: 'lossweighted'
SelectedOption: 'Built-in'
BuiltInOptions: {'lossweighted' 'lossbased'}
IsConstant: 1
Tunability: 0
Задайте IsConstant
атрибут Decoding
как false
так, чтобы можно было использовать все доступные значения в BuiltInOptions
в сгенерированном коде.
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
.
ans =
LearnerCoderInput with properties:
SizeVector: [54 4]
VariableDimensions: [1 0]
DataType: 'double'
Tunability: 1
Значение по умолчанию VariableDimensions
[true false]
потому что у каждого ученика есть различное количество векторов поддержки. Если вы переобучаете модель ECOC с помощью новых данных или различных настроек, количество векторов поддержки в учениках SVM может варьироваться. Поэтому увеличьте верхнюю границу количества векторов поддержки.
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 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
к label_mex
при помощи isequal
.
isequal
возвращает логическую единицу (true
) если все входные параметры равны. Сравнение подтверждает что predict
функция Mdl
и predict
функция в MEX-функции возвращает те же метки.
NegLoss_mex
может включать различия в округлении по сравнению с NegLoss
. В этом случае сравните NegLoss_mex
к NegLoss
, разрешение маленького допуска.
ans =
0x1 empty double column vector
Сравнение подтверждает тот NegLoss
и NegLoss_mex
равны в допуске 1e–8
.
Переобучите параметры модели и обновления в сгенерированном коде
Переобучите модель с помощью различной установки. Задайте 'KernelScale'
как 'auto'
так, чтобы программное обеспечение выбрало соответствующий масштабный коэффициент с помощью эвристической процедуры.
Извлеките параметры, чтобы обновиться при помощи validatedUpdateInputs
. Эта функция обнаруживает модифицированные параметры модели в retrainedMdl
и подтверждает, удовлетворяют ли модифицированные значения параметров атрибутам кодера параметров.
Обновите параметры в сгенерированном коде.
Проверьте сгенерированный код
Сравните выходные параметры от predict
функция retrainedMdl
к выходным параметрам от predict
функция в обновленной MEX-функции.
ans =
0x1 empty double column vector
Сравнение подтверждает тот label
и label_mex
равны, и NegLoss
и NegLoss_mex
равны в допуске.