exponenta event banner

Создание кода для модели логистической регрессии, обученной классификатору

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

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

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

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

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

На вкладке Приложения щелкните стрелку Показать больше в правой части раздела Приложения, чтобы отобразить галерею, и выберите Классификатор. На вкладке «Классификатор» в разделе «Файл» выберите «Новый сеанс» > «Из рабочей области».

В диалоговом окне «Новая сессия из рабочей области» в разделе «Переменная набора данных» выберите X из списка переменных рабочей области. В разделе Ответ (Response) нажмите кнопку Из рабочей области (From workspace), а затем выберите Y из списка. Чтобы принять схему проверки по умолчанию и продолжить, щелкните Начать сеанс (Start Session). Для защиты от переоборудования по умолчанию используется пятикратная перекрестная проверка.

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

Модель логистической регрессии поезда

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

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

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

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

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

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

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

load('trainedModel.mat')

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

saveLearnerForCoder(trainedModel.GeneralizedLinearModel,'myModel')

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

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

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

Определите функцию начального уровня для прогнозирования и создайте код для функции с помощью 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 App.

Создание функции 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) | (Кодер MATLAB)

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