exponenta event banner

ClassificationECOCCoderConfigurer

Конфигуратор кодера для многоклассовой модели с использованием двоичных учеников

Описание

A ClassificationECOCCoderConfigurer объект является конфигуратором кодера многоклассовой модели классификации выходных кодов с исправлением ошибок (ECOC) (ClassificationECOC или CompactClassificationECOC), которая использует вспомогательную векторную машину (SVM) или линейных двоичных учеников.

Конфигуратор кодера предлагает удобные функции для настройки параметров генерации кода, генерации кода C/C + + и обновления параметров модели в сгенерированном коде.

  • Настройте параметры генерации кода и укажите атрибуты кодера параметров модели с помощью свойств объекта.

  • Создание кода C/C + + для predict и update функции модели ECOC с использованием generateCode. Для создания кода C/C + + требуется Coder™ MATLAB ®.

  • Обновление параметров модели в сгенерированном коде C/C + + без необходимости регенерации кода. Эта функция уменьшает усилия, необходимые для регенерации, повторного развертывания и восстановления кода C/C + + при переподготовке модели с новыми данными или настройками. Перед обновлением параметров модели используйтеvalidatedUpdateInputs для проверки и извлечения обновляемых параметров модели.

На этой блок-схеме показан рабочий процесс создания кода с использованием конфигуратора кодера.

Примечания по использованию генерации кода и ограничения многоклассной модели классификации ECOC см. в разделах Создание кода (Code Generation) CompactClassificationECOC, predict, и update.

Создание

После обучения мультиклассная модель классификации ECOC с SVM или линейными двоичными учениками с использованием fitcecoc, создайте конфигуратор кодера для модели с помощью learnerCoderConfigurer. Используйте свойства конфигуратора кодера, чтобы указать атрибуты кодера predict и update аргументы. Затем используйте generateCode для создания кода C/C + + на основе указанных атрибутов кодера.

Свойства

развернуть все

predict Аргументы

Свойства, перечисленные в этом разделе, определяют атрибуты кодера predict аргументы функции в сгенерированном коде.

Атрибуты кодера данных предиктора для передачи в сгенерированный код C/C + + для predict функция модели классификации ECOC, указанная как LearnerCoderInput объект.

При создании конфигуратора кодера с помощью learnerCoderConfigurer функция, входной аргумент X определяет значения по умолчанию для LearnerCoderInput атрибуты кодера:

  • SizeVector - Значением по умолчанию является размер массива входных данных. X.

    • Если Value атрибут ObservationsIn для свойства ClassificationECOCCoderConfigurer является 'rows', то это SizeVector значение равно [n p], где n соответствует количеству наблюдений и p соответствует количеству предикторов.

    • Если Value атрибут ObservationsIn для свойства ClassificationECOCCoderConfigurer является 'columns', то это SizeVector значение равно [p n].

    Переключение элементов SizeVector (например, для изменения [n p] кому [p n]), измените Value атрибут ObservationsIn для свойства ClassificationECOCCoderConfigurer соответственно. Вы не можете изменить SizeVector непосредственно значение.

  • VariableDimensions - Значение по умолчанию: [0 0], который указывает, что размер массива фиксирован, как указано в SizeVector.

    Это значение можно установить равным [1 0] если SizeVector значение равно [n p] или в [0 1] если это [p n], что указывает на наличие в массиве строк переменного размера и столбцов фиксированного размера. Например, [1 0] указывает, что первое значение SizeVector (n) - верхняя граница для количества строк и второе значение SizeVector (p) - количество столбцов.

  • DataType - Это значение равно single или double. Тип данных по умолчанию зависит от типа входных данных X.

  • Tunability - Это значение должно быть true, означающее, что predict в сгенерированном коде C/C + + всегда содержит данные предиктора в качестве входных данных.

Можно изменить атрибуты кодера с помощью точечной нотации. Например, чтобы создать код C/C + +, который принимает данные предиктора со 100 наблюдениями (в строках) трех переменных предиктора (в столбцах), укажите эти атрибуты кодера X для конфигуратора кодера configurer:

configurer.X.SizeVector = [100 3];
configurer.X.DataType = 'double';
configurer.X.VariableDimensions = [0 0];
[0 0] указывает, что первый и второй размеры X (количество наблюдений и количество переменных предиктора соответственно) имеют фиксированные размеры.

Чтобы позволить сгенерированному коду C/C + + принимать данные предиктора с до 100 наблюдениями, укажите эти атрибуты кодера X:

configurer.X.SizeVector = [100 3];
configurer.X.DataType = 'double';
configurer.X.VariableDimensions = [1 0];
[1 0] указывает, что первое измерение X (количество наблюдений) имеет переменный размер и второе измерение X (количество переменных предиктора) имеет фиксированный размер. Указанное количество наблюдений, 100 в этом примере, становится максимально допустимым количеством наблюдений в сгенерированном коде C/C + +. Чтобы разрешить любое количество наблюдений, укажите границу какInf.

Атрибуты кодера двоичной функции потери учащегося ('BinaryLoss' аргумент пары имя-значение predict), указанный как EnumeratedInput объект.

Значения атрибутов по умолчанию для EnumeratedInput основаны на значениях по умолчанию predict функция:

  • Value - Двоичная функция потери ученика, заданная как один из векторов символов в BuiltInOptions или вектор символов, обозначающий имя пользовательской функции. Если двоичными учащимися являются модели SVM или модели линейной классификации учащихся SVM, значением по умолчанию является 'hinge'. Если двоичные ученики являются линейными моделями классификации учащихся логистической регрессии, значением по умолчанию является 'quadratic'.

    Чтобы использовать пользовательскую опцию, определите пользовательскую функцию в пути поиска MATLAB и укажите Value в качестве имени пользовательской функции.

  • SelectedOption - Это значение равно 'Built-in'(по умолчанию) или 'Custom'. Наборы программного обеспечения SelectedOption в соответствии с Value. Этот атрибут доступен только для чтения.

  • BuiltInOptions - Массив ячеек 'hamming', 'linear', 'quadratic', 'exponential', 'binodeviance', 'hinge', и 'logit'. Этот атрибут доступен только для чтения.

  • IsConstant - Это значение должно быть true.

  • Tunability - Значение по умолчанию: false. При указании других значений атрибутов Tunability является false, комплекты программного обеспечения Tunability кому true.

Атрибуты кодера схемы декодирования ('Decoding' аргумент пары имя-значение predict), указанный как EnumeratedInput объект.

Значения атрибутов по умолчанию для EnumeratedInput основаны на значениях по умолчанию predict функция:

  • Value - Значение схемы декодирования, указанное как 'lossweighted'(по умолчанию), 'lossbased', или LearnerCoderInput объект.

    Если установить IsConstant кому false, затем программное обеспечение изменяется Value в LearnerCoderInput объект со следующими значениями атрибутов кодера только для чтения:

    • SizeVector[1 12]

    • VariableDimensions[0 1]

    • DataType'char'

    • Tunability — 1

    Входной сигнал в сгенерированном коде представляет собой настраиваемый символьный вектор переменного размера, который представляет собой 'lossweighted' или 'lossbased'.

  • SelectedOption - Это значение равно 'Built-in'(по умолчанию) или 'NonConstant'. Наборы программного обеспечения SelectedOption в соответствии с Value. Этот атрибут доступен только для чтения.

  • BuiltInOptions - Массив ячеек 'lossweighted' и 'lossbased'. Этот атрибут доступен только для чтения.

  • IsConstant - Значение по умолчанию: true. Если это значение равно false, программное обеспечение изменяется Value в LearnerCoderInput объект.

  • Tunability - Значение по умолчанию: false. При указании других значений атрибутов Tunability является false, комплекты программного обеспечения Tunability кому true.

Атрибуты кодера измерения наблюдения данных предиктора ('ObservationsIn' аргумент пары имя-значение predict), указанный как EnumeratedInput объект.

При создании конфигуратора кодера с помощью learnerCoderConfigurer функция, 'ObservationsIn' аргумент пары имя-значение определяет значения по умолчанию EnumeratedInput атрибуты кодера:

  • Value - Значением по умолчанию является измерение наблюдения данных предиктора, используемое при создании конфигуратора кодера, указанное как 'rows' или 'columns'. Если не указать 'ObservationsIn' при создании конфигуратора кодера значением по умолчанию является 'rows'.

    Это значение должно быть 'rows' для модели, в которой используются двоичные ученики SVM.

  • SelectedOption - Это значение всегда 'Built-in'. Этот атрибут доступен только для чтения.

  • BuiltInOptions - Массив ячеек 'rows' и 'columns'. Этот атрибут доступен только для чтения.

  • IsConstant - Это значение должно быть true.

  • Tunability - Значение по умолчанию: false при указании 'ObservationsIn','rows' при создании конфигуратора кодера, и true при указании 'ObservationsIn','columns'. Если установить Tunability кому false, комплекты программного обеспечения Value кому 'rows'. При указании других значений атрибутов Tunability является false, комплекты программного обеспечения Tunability кому true.

Количество выходных аргументов, возвращаемых из сгенерированного кода C/C + + для predict функция модели классификации ECOC, заданная как 1, 2 или 3.

Выходные аргументы predict являются, в порядке: label (прогнозируемые метки класса), NegLoss (сведенные на нет средние двоичные потери), и PBScore(положительные оценки класса). predict в сгенерированном коде C/C + + возвращает первыйn выходных данных predict функция, где n является NumOutputs значение.

После создания конфигуратора кодера configurerможно указать количество выходов с помощью точечной нотации.

configurer.NumOutputs = 2;

NumOutputs свойство эквивалентно '-nargout' параметр компилятора codegen (Кодер MATLAB). Этот параметр определяет количество выходных аргументов в функции начального значения генерации кода. Функция объекта generateCode генерирует две функции точки входа -predict.m и update.m для predict и update функции модели классификации ECOC, соответственно, и генерирует код C/C + + для двух функций точки входа. Указанное значение для NumOutputs свойство соответствует количеству выходных аргументов в функции точки входа predict.m.

Типы данных: double

update Аргументы

Свойства, перечисленные в этом разделе, определяют атрибуты кодера update аргументы функции в сгенерированном коде. update функция принимает обученную модель и новые параметры модели в качестве входных аргументов и возвращает обновленную версию модели, содержащую новые параметры. Чтобы включить обновление параметров в сгенерированном коде, перед созданием кода необходимо указать атрибуты кодера параметров. Использовать LearnerCoderInput для указания атрибутов кодера каждого параметра. Значения атрибутов по умолчанию основаны на параметрах модели во входном аргументе Mdl из learnerCoderConfigurer.

Атрибуты кодера обученных двоичных учеников (BinaryLearners модели классификации ECOC), указанной как ClassificationSVMCoderConfigurer объект (для двоичных учеников SVM) или ClassificationLinearCoderConfigurer объект (для линейных двоичных учеников).

Используйте update аргументы SVM или объекта конфигурации линейного кодера для указания атрибутов кодера всех двоичных учеников.

Для конфигурирования BinaryLearners, программное обеспечение использует только update и игнорирует другие свойства объекта.

При обучении модели ECOC с использованием двоичных обучающихся SVM каждый обучающийся может иметь различное количество векторов поддержки. Поэтому программное обеспечение настраивает значения атрибутов по умолчанию для LearnerCoderInput объекты для Alpha, SupportVectorLabels, и SupportVectors для размещения всех двоичных учеников на основе входного аргумента Mdl из learnerCoderConfigurer.

  • SizeVector

    • Это значение равно [s 1] для Alpha и SupportVectorLabels, где s - наибольшее число векторов поддержки в двоичных учениках.

    • Это значение равно [s p] для SupportVectors, где p - количество предикторов.

  • VariableDimensions - Это значение равно [0 0] или [1 0]. Если у каждого учащегося одинаковое количество векторов поддержки, значением по умолчанию является [0 0]. В противном случае это значение должно быть [1 0].

    • [0 0] указывает, что размер массива фиксирован, как указано в SizeVector.

    • [1 0] указывает, что массив содержит строки переменного размера и столбцы фиксированного размера. В этом случае первое значение SizeVector - верхняя граница для количества строк и второе значение SizeVector - количество столбцов.

  • DataType - Это значение равно 'single' или 'double'. Тип данных по умолчанию согласуется с типом данных обучения, которые используются для обучения. Mdl.

  • Tunability - Если вы тренируете модель с линейной функцией ядра, и модель сохраняет коэффициенты линейного предиктора (Beta) без векторов поддержки и связанных значений, то это значение должно быть false. В противном случае это значение должно быть true.

Для получения подробной информации о другом update аргументы, см. update аргументы ClassificationSVMCoderConfigurer и update аргументы ClassificationLinearCoderConfigurer.

Атрибуты кодера стоимости неправильной классификации (Cost модели классификации ECOC), указанной как LearnerCoderInput объект.

Значения атрибутов по умолчанию для LearnerCoderInput объекты основаны на входном аргументе Mdl из learnerCoderConfigurer:

  • SizeVector - Это значение должно быть [c c], где c - количество классов.

  • VariableDimensions - Это значение должно быть [0 0], указывающее, что размер массива фиксирован, как указано в SizeVector.

  • DataType - Это значение равно 'single' или 'double'. Тип данных по умолчанию согласуется с типом данных обучения, которые используются для обучения. Mdl.

  • Tunability - Значение по умолчанию: true.

Атрибуты кодера предшествующих вероятностей (Prior модели классификации ECOC), указанной как LearnerCoderInput объект.

Значения атрибутов по умолчанию для LearnerCoderInput объекты основаны на входном аргументе Mdl из learnerCoderConfigurer:

  • SizeVector - Это значение должно быть [1 c], где c - количество классов.

  • VariableDimensions - Это значение должно быть [0 0], указывающее, что размер массива фиксирован, как указано в SizeVector.

  • DataType - Это значение равно 'single' или 'double'. Тип данных по умолчанию согласуется с типом данных обучения, которые используются для обучения. Mdl.

  • Tunability - Значение по умолчанию: true.

Другие опции конфигуратора

Имя файла сгенерированного кода C/C + +, заданного как символьный вектор.

Функция объекта generateCode из ClassificationECOCCoderConfigurer создает код C/C + + с использованием этого имени файла.

Имя файла не должно содержать пробелов, поскольку они могут привести к сбоям при создании кода в определенных конфигурациях операционной системы. Кроме того, имя должно быть допустимым именем функции MATLAB.

После создания конфигуратора кодера configurer, можно указать имя файла с помощью точечной нотации.

configurer.OutputFileName = 'myModel';

Типы данных: char

Уровень детализации, указанный как true (логический 1) или false (логический 0). Уровень детализации управляет отображением уведомлений в командной строке.

СтоимостьОписание
true (логический 1)Программа отображает уведомления, когда изменения атрибутов кодера параметра приводят к изменениям других зависимых параметров.
false (логический 0)Программа не отображает уведомления.

Чтобы включить обновление параметров модели машинного обучения в сгенерированном коде, необходимо настроить атрибуты кодера параметров перед созданием кода. Атрибуты кодера параметров зависят друг от друга, поэтому программное обеспечение сохраняет зависимости как ограничения конфигурации. При изменении атрибутов кодера параметра с помощью конфигуратора кодера и необходимости последующих изменений других зависимых параметров в соответствии с ограничениями конфигурации программа изменяет атрибуты кодера зависимых параметров. Уровень детализации определяет, отображает ли программное обеспечение сообщения уведомления для этих последующих изменений.

После создания конфигуратора кодера configurer, можно изменить уровень детализации с помощью точечной нотации.

configurer.Verbose = false;

Типы данных: logical

Параметры настройки создания кода

Чтобы настроить рабочий процесс создания кода, используйте generateFiles функции и следующих трех свойств с codegen (Кодер MATLAB), вместо использования generateCode функция.

После генерации двух файлов функций начального уровня (predict.m и update.m) с помощью generateFiles можно изменить эти файлы в соответствии с рабочим процессом создания кода. Например, можно изменить predict.m для включения предварительной обработки данных или можно добавить эти функции точки входа в другой проект создания кода. Затем можно создать код C/C + + с помощью codegen (Кодер MATLAB) и codegen аргументы, подходящие для измененных функций точки входа или проекта создания кода. Используйте три свойства, описанные в этом разделе, в качестве начальной точки для установки codegen аргументы.

Это свойство доступно только для чтения.

codegen Аргументы (MATLAB Coder), указанные как массив ячеек.

Это свойство позволяет настроить рабочий процесс создания кода. Используйте generateCode если не требуется настраивать рабочий процесс.

Вместо использования generateCode с конфигуратором кодера configurer, код C/C + + можно создать следующим образом:

generateFiles(configurer)
cgArgs = configurer.CodeGenerationArguments;
codegen(cgArgs{:})
При настройке рабочего процесса создания кода измените cgArgs соответственно перед вызовом codegen.

При изменении других свойств configurer, программное обеспечение обновляет CodeGenerationArguments соответственно собственности.

Типы данных: cell

Это свойство доступно только для чтения.

Список настраиваемых входных аргументов функции точки входа predict.m для генерации кода, заданного как массив ячеек. Массив ячеек содержит другой массив ячеек, включающий coder.PrimitiveType (Кодер MATLAB) объекты и coder.Constant (Кодер MATLAB) объекты.

При изменении атрибутов кодера predict аргументы, то программное обеспечение соответствующим образом обновляет соответствующие объекты. При указании Tunability атрибут как false, то программное обеспечение удаляет соответствующие объекты из PredictInputs список.

Массив ячеек в PredictInputs эквивалентно configurer.CodeGenerationArguments{6} для конфигуратора кодера configurer.

Типы данных: cell

Это свойство доступно только для чтения.

Список настраиваемых входных аргументов функции точки входа update.m для генерации кода, заданного как массив ячеек структуры. Структура включает в себя coder.CellType (Кодер MATLAB) для BinaryLearners и coder.PrimitiveType (Кодер MATLAB) объекты для Cost и Prior.

При изменении атрибутов кодера update аргументы, то программное обеспечение соответствующим образом обновляет соответствующие объекты. При указании Tunability атрибут как false, то программное обеспечение удаляет соответствующий объект из UpdateInputs список.

Структура в UpdateInputs эквивалентно configurer.CodeGenerationArguments{3} для конфигуратора кодера configurer.

Типы данных: cell

Функции объекта

generateCodeСоздание кода C/C + + с помощью конфигуратора кодера
generateFilesСоздание файлов MATLAB для создания кода с помощью конфигуратора кодера
validatedUpdateInputsПроверка и извлечение параметров модели машинного обучения для обновления

Примеры

свернуть все

Обучение модели машинного обучения, а затем создание кода для predict и update функции модели с помощью конфигуратора кодера.

Загрузить набор данных радужки Фишера и обучить многоклассную модель ECOC с использованием двоичных учеников SVM.

load fisheriris
X = meas;
Y = species;
Mdl = fitcecoc(X,Y);

Mdl является ClassificationECOC объект.

Создание конфигуратора кодера для ClassificationECOC модель с использованием learnerCoderConfigurer. Укажите данные предиктора X. learnerCoderConfigurer функция использует вход X для конфигурирования атрибутов кодера predict ввод функции.

configurer = learnerCoderConfigurer(Mdl,X)
configurer = 
  ClassificationECOCCoderConfigurer with properties:

   Update Inputs:
    BinaryLearners: [1x1 ClassificationSVMCoderConfigurer]
             Prior: [1x1 LearnerCoderInput]
              Cost: [1x1 LearnerCoderInput]

   Predict Inputs:
                 X: [1x1 LearnerCoderInput]

   Code Generation Parameters:
        NumOutputs: 1
    OutputFileName: 'ClassificationECOCModel'


  Properties, Methods

configurer является ClassificationECOCCoderConfigurer объект, который является конфигуратором кодера ClassificationECOC объект.

Для создания кода 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.m, update.m, и initialize.m с помощью type функция.

type predict.m
function varargout = predict(X,varargin) %#codegen
% Autogenerated by MATLAB, 23-Apr-2021 12:42:55
[varargout{1:nargout}] = initialize('predict',X,varargin{:});
end
type update.m
function update(varargin) %#codegen
% Autogenerated by MATLAB, 23-Apr-2021 12:42:55
initialize('update',varargin{:});
end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen
% Autogenerated by MATLAB, 23-Apr-2021 12:42:55
coder.inline('always')
persistent model
if isempty(model)
    model = loadLearnerForCoder('ClassificationECOCModel.mat');
end
switch(command)
    case 'update'
        % Update struct fields: BinaryLearners
        %                       Prior
        %                       Cost
        model = update(model,varargin{:});
    case 'predict'
        % Predict Inputs: X
        X = varargin{1};
        if nargin == 2
            [varargout{1:nargout}] = predict(model,X);
        else
            PVPairs = cell(1,nargin-2);
            for i = 1:nargin-2
                PVPairs{1,i} = varargin{i+1};
            end
            [varargout{1:nargout}] = predict(model,X,PVPairs{:});
        end
end
end

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

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 равны в пределах допуска.

Подробнее

развернуть все

Представлен в R2019a