exponenta event banner

Приложение для обучения по генерации и классификации кодов

Classification Learner хорошо подходит для интерактивного выбора и обучения моделей классификации, но не генерирует код C/C + +, который маркирует данные на основе обученной модели. Кнопка «Создать функцию» в разделе «Экспорт» приложения Classification Learner генерирует код MATLAB для обучения модели, но не создает код C/C + +. В этом примере показано, как создать код C из функции, которая прогнозирует метки с использованием экспортированной классификационной модели. Пример строит модель, которая предсказывает кредитный рейтинг бизнеса с учетом различных финансовых коэффициентов, в соответствии со следующими шагами:

  1. Использовать набор данных кредитного рейтинга в файле CreditRating_Historical.dat, которая включена в Toolbox™ статистики и машинного обучения.

  2. Уменьшите размерность данных с помощью анализа основных компонентов (PCA).

  3. Подготовка набора моделей, поддерживающих генерацию кода для прогнозирования меток.

  4. Экспортируйте модель с минимальной пятикратной проверенной точностью классификации.

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

Загрузить данные образца

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

Использовать readtable для загрузки исторических данных кредитного рейтинга в файл CreditRating_Historical.dat в таблицу.

creditrating = readtable('CreditRating_Historical.dat');

На вкладке Приложения щелкните Классификатор.

В разделе «Классификатор» на вкладке «Классификатор» в разделе «Файл» щелкните «Создать сеанс» и выберите «Из рабочей области».

В диалоговом окне Создать сессию из рабочей области (New Session from Workspace) выберите таблицу creditrating. Все переменные, за исключением переменной, идентифицированной как отклик, являются числовыми векторами с двойной точностью. Щелкните Начало сессии (Start Session), чтобы сравнить модели классификации на основе пятикратной, перекрестно проверенной точности классификации.

Classification Learner загружает данные и строит график рассеяния переменных WC_TA против ID. Поскольку идентификационные номера не подходят для отображения на графике, выберите RE_TA для X в разделе Предикторы.

Scatter plot for credit rating data

График рассеяния предполагает, что две переменные могут разделить классы AAA, BBB, BB, и CCC довольно хорошо. Однако наблюдения, соответствующие остальным классам, смешиваются с этими классами.

Идентификационные номера не полезны для прогнозирования. Поэтому в разделе Элементы (Features) щелкните Выбор элемента (Feature Selection) и снимите флажок Идентификатор (ID). Также можно удалить ненужные предикторы с самого начала, используя флажки в диалоговом окне Создать сессию из рабочей области (New Session from Workspace). В этом примере показано, как удалить неиспользуемые предикторы для генерации кода при включении всех предикторов.

Включить PCA

Включите PCA для уменьшения размерности данных.

В разделе Функции щелкните PCA, а затем выберите Включить PCA. Это действие применяет PCA к данным предиктора, а затем преобразует данные перед обучением моделей. Classification Learner использует только компоненты, которые в совокупности объясняют 95% вариабельности.

Модели поездов

Подготовка набора моделей, поддерживающих генерацию кода для прогнозирования меток. Список моделей в Classification Learner, поддерживающих создание кода, см. в разделе Создание кода C для прогнозирования.

Выберите следующие модели и опции классификации, которые поддерживают создание кода для прогнозирования метки, а затем выполните перекрестную проверку (дополнительные сведения см. в разделе Введение в создание кода). Чтобы выбрать каждую модель, в разделе Тип модели (Model Type) щелкните стрелку Показать (Show more), а затем щелкните модель. Выбрав модель и указав любые опции, закройте все открытые меню, а затем щелкните Тренировать (Train) в разделе Обучение (Training).

Модели и опции для выбораОписание
В разделе Деревья решений (Decision Trees) выберите Все деревья (All Trees)Деревья классификации различных сложностей
В разделе Support Vector Machines выберите All SVMSVM различной сложности и с использованием различных ядер. Для установки сложных SVM требуется время.
В разделе «Классификаторы ансамблей» выберите «Усиленные деревья». В разделе Тип модели (Model Type) щелкните Дополнительно (Advanced). Уменьшите максимальное количество разделений до 5 и увеличьте число обучающихся до 100.Усиленный ансамбль классификационных деревьев
В разделе «Классификаторы ансамблей» выберите «Деревья в мешках». В разделе Тип модели (Model Type) щелкните Дополнительно (Advanced). Увеличить Максимальное число разделений до 50 и Увеличить число обучающихся до 100.Случайный лес классификационных деревьев

После перекрестной проверки каждого типа модели на панели Модели (Models) отображается каждая модель и ее пятикратная точность перекрестной проверки классификации, и модель выделяется с наилучшей точностью.

Models pane displaying the trained models and their accuracy. The Fine Gaussian SVM model has the highest accuracy.

Выберите модель, которая дает максимальную пятикратную точность перекрестной проверки классификации, которая является моделью выходных кодов с исправлением ошибок (ECOC) для учеников с тонким гауссовым SVM. С включенным PCA программа Classification Learner использует два предиктора из шести.

В разделе «Графики» щелкните «Матрица путаницы» и выберите «Данные проверки».

Confusion matrix for the Fine Gaussian SVM model

Модель хорошо различает A, B, и C классы. Однако модель не так хорошо различает конкретные уровни в этих группах, в частности более низкие уровни В.

Экспорт модели в рабочую область

Экспорт модели в рабочую область MATLAB ® и сохранение модели с помощьюsaveLearnerForCoder.

В разделе Экспорт щелкните Экспорт модели, а затем выберите Экспорт компактной модели. Нажмите кнопку ОК в диалоговом окне.

Структура trainedModel появляется в рабочей области MATLAB. Область ClassificationSVM из trainedModel содержит компактную модель.

В командной строке сохраните компактную модель в файле с именем ClassificationLearnerModel.mat в текущей папке.

saveLearnerForCoder(trainedModel.ClassificationSVM,'ClassificationLearnerModel')

Создать код C для прогнозирования

Прогнозирование с использованием функций объекта требует обученного объекта модели, но -args вариант codegen (Кодер MATLAB) не принимает такие объекты. Обойти это ограничение с помощью saveLearnerForCoder и loadLearnerForCoder. Сохранение обучаемой модели с помощью saveLearnerForCoder. Затем определите функцию точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Наконец, используйте codegen для создания кода для функции точки входа.

Данные предварительной обработки

Предварительная обработка новых данных выполняется так же, как и предварительная обработка данных обучения.

Для предварительной обработки необходимы следующие три параметра модели:

  • removeVars - Вектор столбца не более p элементы, идентифицирующие индексы переменных для удаления из данных, где p - количество переменных предиктора в необработанных данных

  • pcaCenters - Вектор строки точно q Центры PCA

  • pcaCoefficientsqоколо-r матрица коэффициентов PCA, где r самое большее q

Укажите индексы переменных предиктора, которые были удалены при выборе данных с помощью параметра «Выбор элемента» в разделе «Классификатор». Извлеките статистику PCA из trainedModel.

removeVars = 1;
pcaCenters = trainedModel.PCACenters;
pcaCoefficients = trainedModel.PCACoefficients;

Сохранение параметров модели в файле с именем ModelParameters.mat в текущей папке.

save('ModelParameters.mat','removeVars','pcaCenters','pcaCoefficients');

Определение функции точки входа

Функция точки входа - это функция, определяемая для генерации кода. Потому что вы не можете вызвать какую-либо функцию на верхнем уровне с помощью codegen, необходимо определить функцию точки входа, которая вызывает функции с поддержкой генерации кода, а затем создать код C/C + + для функции точки входа с помощью codegen.

В текущей папке определите функцию с именем mypredictCL.m что:

  • Принимает числовую матрицу (X) необработанных наблюдений, содержащих те же предикторные переменные, что и те, которые были переданы в Classification Learner

  • Загружает классификационную модель в ClassificationLearnerModel.mat и параметры модели в ModelParameters.mat

  • Удаляет переменные предиктора, соответствующие индексам в removeVars

  • Преобразует оставшиеся данные предиктора с помощью центров PCA (pcaCenters) и коэффициенты (pcaCoefficients) оценивается классификатором

  • Возвращает прогнозируемые метки с использованием модели

function label = mypredictCL(X) %#codegen
%MYPREDICTCL Classify credit rating using model exported from
%Classification Learner
%   MYPREDICTCL loads trained classification model (SVM) and model
%   parameters (removeVars, pcaCenters, and pcaCoefficients), removes the
%   columns of the raw matrix of predictor data in X corresponding to the
%   indices in removeVars, transforms the resulting matrix using the PCA
%   centers in pcaCenters and PCA coefficients in pcaCoefficients, and then
%   uses the transformed data to classify credit ratings. X is a numeric
%   matrix with n rows and 7 columns. label is an n-by-1 cell array of
%   predicted labels.

% Load trained classification model and model parameters
SVM = loadLearnerForCoder('ClassificationLearnerModel');
data = coder.load('ModelParameters');
removeVars = data.removeVars;
pcaCenters = data.pcaCenters;
pcaCoefficients = data.pcaCoefficients;

% Remove unused predictor variables
keepvars = 1:size(X,2);
idx = ~ismember(keepvars,removeVars);
keepvars = keepvars(idx);
XwoID = X(:,keepvars);

% Transform predictors via PCA
Xpca = bsxfun(@minus,XwoID,pcaCenters)*pcaCoefficients;

% Generate label from SVM
label = predict(SVM,Xpca);
end

Создать код

Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Укажите аргументы переменного размера с помощью coder.typeof (Кодер MATLAB) и создайте код с помощью аргументов.

Создание матрицы двойной точности с именем x для генерации кода с использованием coder.typeof (Кодер MATLAB). Укажите, что количество строк x является произвольным, но что x должен иметь p столбцы.

p = size(creditrating,2) - 1;
x = coder.typeof(0,[Inf,p],[1 0]);

Дополнительные сведения об указании аргументов переменного размера см. в разделе Указание аргументов переменного размера для создания кода.

Создание функции MEX из mypredictCL.m. Используйте -args параметр для указания x в качестве аргумента.

codegen mypredictCL -args x

codegen создает файл MEX mypredictCL_mex.mexw64 в текущей папке. Расширение файла зависит от платформы.

Проверить созданный код

Убедитесь, что функция MEX возвращает ожидаемые метки.

Удалите переменную ответа из исходного набора данных, а затем произвольно проведите 15 наблюдений.

rng('default'); % For reproducibility
m = 15;
testsampleT = datasample(creditrating(:,1:(end - 1)),m);

Прогнозирование соответствующих меток с помощью predictFcn в модели классификации, обученной Classification Learner.

testLabels = trainedModel.predictFcn(testsampleT);

Преобразование результирующей таблицы в матрицу.

testsample = table2array(testsampleT);

Столбцы testsample соответствуют столбцам данных предиктора, загруженных Classification Learner.

Передача тестовых данных в mypredictCL. Функция mypredictCL предсказывает соответствующие метки с помощью predict и модель классификации, обученную Classification Learner.

testLabelsPredict = mypredictCL(testsample);

Прогнозирование соответствующих меток с помощью созданной функции MEX mypredictCL_mex.

testLabelsMEX = mypredictCL_mex(testsample);

Сравните наборы прогнозов.

isequal(testLabels,testLabelsMEX,testLabelsPredict)
ans =

  logical

   1

isequal возвращает логический 1 (true), если все входы равны. predictFcn, mypredictCLи функция MEX возвращает те же значения.

См. также

| | | (Кодер MATLAB) | (Кодер MATLAB)

Связанные темы