Генерация кода для модели логистической регрессии, обученной в Classification Learner

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

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

Загрузите выборочные данные и импортируйте данные в приложение Classification Learner.

Загрузите patients набор данных. Задайте данные предиктора X, состоящий из p предикторы и переменная отклика Y.

load patients
X = [Age Diastolic Height Systolic Weight];
p = size(X,2);
Y = Gender;

На вкладке Приложения (Apps) щелкните стрелу Показать больше (Show more) справа от раздела Приложения (Apps), чтобы отобразить галерею и выберите Классификатор (Classification Learner). На вкладке Classification Learner, в Разделе файла, выберите New Session > From Workspace.

В диалоговом окне New Сеанса from Workspace в разделе Данных Set Переменной выберите X из списка переменных рабочей области. В разделе Response нажмите кнопку From рабочей области опции и выберите Y из списка. Чтобы принять схему валидации по умолчанию и продолжить, нажмите кнопку «» Начать сеанс «». Опция валидации по умолчанию является 5-кратной перекрестной валидацией, чтобы защитить от сверхподбора кривой.

По умолчанию Classification Learner создает график поля точек данных.

Обучите модель логистической регрессии

Обучите логистическую регрессионую модель в приложении Classification Learner.

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

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

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

В разделе «Экспорт» выберите Экспорт Модели > Экспортом Compact Модели. Нажмите кнопку ОК в диалоговом окне.

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

Примечание: Если вы запускаете этот пример со всеми вспомогательными файлами, можно загрузить trainedModel.mat файл в командной строке, а не экспорт модели. The trainedModel структура была создана с использованием предыдущих шагов.

load('trainedModel.mat')

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

saveLearnerForCoder(trainedModel.GeneralizedLinearModel,'myModel')

Кроме того, сохраните имена успешных, неудачных и отсутствующих классов обученной модели.

classNames = {trainedModel.SuccessClass, ...
    trainedModel.FailureClass,trainedModel.MissingClass};
save('ModelParameters.mat','classNames');

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

Определите функцию точки входа для предсказания и сгенерируйте код для функции при помощи codegen.

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

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

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

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

  • Преобразует предсказанные вероятности в индексы, где 1 указывает на успех, 2 указывает на отказ 3 указывает на отсутствующее значение

  • Загружает имена классов в ModelParameters.mat

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

function label = classifyX (X) %#codegen 
%CLASSIFYX Classify using Logistic Regression Model 
%  CLASSIFYX classifies the measurements in X 
%  using the logistic regression model in the file myModel.mat, 
%  and then returns class labels in label.

n = size(X,1);
label = coder.nullcopy(cell(n,1));

CompactMdl = loadLearnerForCoder('myModel');
probability = predict(CompactMdl,X);

index = ~isnan(probability).*((probability<0.5)+1) + isnan(probability)*3;

classInfo = coder.load('ModelParameters');
classNames = classInfo.classNames;

for i = 1:n    
    label{i} = classNames{index(i)};
end
end

Примечание. Если вы создаете логистическую регрессионую модель в Classification Learner после использования выбора признаков или анализа основных компонентов (PCA), необходимо включить дополнительные строки кода в функцию точки входа. Для примера, который показывает эти дополнительные шаги, смотрите Генерацию кода и Приложение Classification Learner.

Сгенерируйте MEX-функцию из classifyX.m. Создайте матрицу data для генерации кода с использованием coder.typeof. Задайте, что количество строк в data произвольно, но это data должно иметь p столбцы, где p - количество предикторов, используемых для обучения модели логистической регрессии. Используйте -args опция для задания data как аргумент.

data = coder.typeof(X,[Inf p],[1 0]);
codegen classifyX.m -args data
Code generation successful.

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

Проверьте, что MEX-функция возвращает ожидаемые метки. Случайным образом нарисуйте 15 наблюдений от X.

rng('default') % For reproducibility
testX = datasample(X,15);

Классифицируйте наблюдения при помощи predictFcn функция в классификационной модели, обученная в Classification Learner.

testLabels = trainedModel.predictFcn(testX);

Классифицируйте наблюдения с помощью сгенерированной MEX-функции classifyX_mex.

testLabelsMEX = classifyX_mex(testX);

Сравните наборы предсказаний. isequal возвращает логический 1 (true), если testLabels и testLabelsMEX равны.

isequal(testLabels,testLabelsMEX)
ans = logical
   1

predictFcn и MEX-функцию classifyX_mex возвращает те же значения.

См. также

| | | | (MATLAB CODER) | (MATLAB Coder)

Похожие темы