Обучение модели выходных кодов с исправлением ошибок (ECOC) с использованием двоичных обучающихся SVM и создание конфигуратора кодера для модели. Используйте свойства конфигуратора кодера для указания атрибутов кодера параметров модели ECOC. Используйте функцию объекта конфигуратора кодера для генерации кода C, который предсказывает метки для новых данных предиктора. Затем переобучите модель, используя различные настройки, и обновите параметры в сгенерированном коде без регенерации кода.
Модель поезда
Загрузите набор данных радужки Фишера.
Создайте двоичный шаблон обучающегося SVM для использования функции ядра Гаусса и стандартизации данных предиктора.
Обучение мультиклассной модели ECOC с помощью шаблона t.
Mdl является ClassificationECOC объект.
Создать конфигуратор кодера
Создание конфигуратора кодера для 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 объект, который является конфигуратором кодера 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 (логический 0), программное обеспечение устанавливает Tunability кому true (логический 1).
Отображение атрибутов кодера 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 =
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 возвращает логический 1 (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 равны в пределах допуска.