В этом примере показано, как обучить модель логистической регрессии использование Classification Learner, и затем сгенерировать код С, который предсказывает метки с помощью экспортируемой модели классификации.
Загрузите выборочные данные и импортируйте данные в приложение Classification Learner.
Загрузите patients набор данных. Задайте данные о предикторе X, состоя из p предикторы и переменная отклика Y.
load patients
X = [Age Diastolic Height Systolic Weight];
p = size(X,2);
Y = Gender;На вкладке Apps нажмите Show больше стрелы справа от раздела Apps, чтобы отобразить галерею и выбрать Classification Learner. На вкладке Classification Learner, в Разделе файла, выбирают New Session> From Workspace.
В диалоговом окне New Session from Workspace, под Переменной Набора данных, выбирают X из списка переменных рабочей области. При Ответе нажмите переключатель рабочей области From и затем выберите Y из списка. Чтобы принять схему валидации по умолчанию и продолжиться, нажмите Start Session. Опция валидации по умолчанию является 5-кратной перекрестной проверкой, чтобы защитить от сверхподбора кривой.
По умолчанию Classification Learner создает график рассеивания данных.
Обучите модель логистической регрессии в рамках приложения Classification Learner.
На вкладке Classification Learner, в разделе Model Type, нажимают Show больше стрелы, чтобы отобразить галерею классификаторов. Под Классификаторами Логистической регрессии кликните по модели Logistic Regression. Нажмите Train в разделе Training. Приложение обучает модель и отображается, ее точность перекрестной проверки выигрывают Точность (Валидация).
Экспортируйте модель в MATLAB® Workspace и сохраните его с помощью saveLearnerForCoder.
В Разделе экспорта выберите Export Model> Export Compact Model. Нажмите ОК в диалоговом окне.
Структура 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 и Генерация кода.
Сгенерируйте 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 возвращает логическую единицу, (TRUE) если testLabels и testLabelsMEX равны.
isequal(testLabels,testLabelsMEX)
ans = logical
1
predictFcn и MEX-функция classifyX_mex возвратите те же значения.
loadLearnerForCoder | saveLearnerForCoder | coder.typeof (MATLAB Coder) | codegen (MATLAB Coder) | fitglm | predict