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