В этом примере показано, как обучить логистическую регрессионую модель с помощью 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
возвращает те же значения.
fitglm
| loadLearnerForCoder
| predict
| saveLearnerForCoder
| codegen
(MATLAB CODER) | coder.typeof
(MATLAB Coder)