Обучите модель выходных кодов с коррекцией ошибок (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 и updateX, 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 равны в допуске.