Генерация кода и Classification Learner

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

  1. Используйте набор данных кредитного рейтинга в файле CreditRating_Historical.dat, который входит в комплект Statistics and Machine Learning Toolbox™.

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

  3. Обучите набор моделей, которые поддерживают генерацию кода для предсказания метки.

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

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

Загрузка выборочных данных

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

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

creditrating = readtable('CreditRating_Historical.dat');

На вкладке Apps нажмите Classification Learner.

В Classification Learner, на вкладке Classification Learner, в разделе File, нажмите New Session и выберите From Workspace.

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

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

Scatter plot for credit rating data

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

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

Включите PCA

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

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

Обучите модели

Обучите набор моделей, которые поддерживают генерацию кода для предсказания метки. Список моделей в Classification Learner, которые поддерживают генерацию кода, смотрите в Генерация кода С для предсказания.

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

Модели и опции для выбораОписание
В группе Decision Trees выберите All TreesКлассификационные деревья различной сложности
В группе Support Vector Machines выберите All SVMsСВМ различной сложности и с использованием различных ядер. Комплексным SVM требуется время для соответствия.
В разделе Ensemble Classifiers выберите Boosted Trees. В Model Type разделе нажмите Advanced. Уменьшите Maximum number of splits до 5 и увеличьте Number of learners до 100.Бустерный ансамбль классификационных деревьев
В разделе Ensemble Classifiers выберите Bagged Trees. В Model Type разделе нажмите Advanced. Увеличение Maximum number of splits до 50 и увеличение Number of learners до 100.Случайный лес классификационных деревьев

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

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

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

В Plots разделе щелкните Confusion Matrix и выберите Validation Data.

Confusion matrix for the Fine Gaussian SVM model

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

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

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

В Export разделе щелкните Export Model и выберите Export Compact Model. Нажмите OK в диалоговом окне.

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

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

saveLearnerForCoder(trainedModel.ClassificationSVM,'ClassificationLearnerModel')

Сгенерируйте код С для предсказания

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

Предварительная обработка данных

Предварительно обработайте новые данные таким же образом, как и предварительно обработайте обучающие данные.

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

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

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

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

Задайте индексы переменных предиктора, которые вы удалили при выборе данных с помощью Feature Selection в Classification Learner. Извлечение статистики 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) по оценке Classification Learner

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

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 Coder) и сгенерируйте код с помощью аргументов.

Создайте матрицу двойной точности под названием x для генерации кода с помощью coder.typeof (MATLAB Coder). Задайте, что количество строк 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 CODER) | (MATLAB Coder)

Похожие темы