Сгенерируйте код, чтобы классифицировать числовые данные на таблицу

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

В общем рабочем процессе генерации кода можно обучить классификацию или модель регрессии на данных в таблице, при условии, что вы используете только числовые переменные предикторы. Когда вы создаете функцию точки входа для предсказания, вы передаете числовую матрицу (вместо таблицы) к predict.

Начиная в R2020a, можно передать таблицу predict в вашей функции точки входа. Для получения дополнительной информации о табличной поддержке в генерации кода смотрите Генерацию кода для Таблиц (MATLAB Coder) и Табличные Ограничения для Генерации кода (MATLAB Coder).

Обучите модель классификации

Загрузите patients набор данных. Составьте таблицу, которая содержит числовые предикторы типа single и double и переменная отклика Smoker из типа logical. Каждая строка таблицы соответствует различному пациенту.

load patients
Age = single(Age);
Weight = single(Weight);
Tbl = table(Age,Diastolic,Smoker,Systolic,Weight);

Обучите дерево классификации использование данных в Tbl. Заметьте имена предиктора и их порядок.

Mdl = fitctree(Tbl,'Smoker');
Mdl.PredictorNames
ans = 1x4 cell
    {'Age'}    {'Diastolic'}    {'Systolic'}    {'Weight'}

Сохраните модель

Сохраните древовидный классификатор в файл с помощью saveLearnerForCoder.

saveLearnerForCoder(Mdl,'TreeModel');

saveLearnerForCoder сохраняет классификатор в двоичный файл MATLAB® TreeModel.mat как массив структур в текущей папке.

Задайте функцию точки входа

Задайте функцию точки входа predictSmoker, который берет числовые переменные предикторы в качестве входных параметров. В функции загрузите древовидный классификатор при помощи loadLearnerForCoder, составьте таблицу от входных параметров, и затем передайте классификатор и таблицу к predict.

type predictSmoker.mlx
function [labels,scores] = predictSmoker(age,diastolic,systolic,weight) %#codegen
%PREDICTSMOKER Label new observations using a trained tree model
%   predictSmoker predicts whether patients are smokers (1) or nonsmokers
%   (0) based on their age, diastolic blood pressure, systolic blood
%   pressure, and weight. The function also provides classification scores
%   indicating the likelihood that a predicted label comes from a
%   particular class (smoker or nonsmoker).
mdl = loadLearnerForCoder('TreeModel');
varnames = mdl.PredictorNames;
tbl = table(age,diastolic,systolic,weight,'VariableNames',varnames);
[labels,scores] = predict(mdl,tbl);
end

Когда вы составляете таблицу в функции точки входа, необходимо задать имена переменных (например, при помощи 'VariableNames' аргумент пары "имя-значение" table). Если ваша таблица содержит только переменные предикторы, и предикторы находятся в том же порядке как в таблице, используемой, чтобы обучить модель, то можно найти имена переменного предиктора в mdl.PredictorNames.

Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB, затем MATLAB открывает папку в качестве примера. Эта папка включает файл функции точки входа predictSmoker.mlx.

Сгенерируйте код

Сгенерируйте код для predictSmoker при помощи codegen. Задайте тип данных и размерности входных параметров переменного предиктора с помощью coder.typeof.

  • Первый входной параметр coder.typeof задает тип данных предиктора.

  • Второй входной параметр задает верхнюю границу на количестве строк (Inf) и столбцы (1) в предикторе.

  • Третий входной параметр указывает, что количество строк в предикторе может измениться во время выполнения, но количество столбцов фиксируется.

ARGS = cell(4,1);
ARGS{1} = coder.typeof(Age,[Inf 1],[1 0]);
ARGS{2} = coder.typeof(Diastolic,[Inf 1],[1 0]);
ARGS{3} = coder.typeof(Systolic,[Inf 1],[1 0]);
ARGS{4} = coder.typeof(Weight,[Inf 1],[1 0]);

codegen predictSmoker -args ARGS

codegen генерирует MEX-функцию predictSmoker_mex с зависимым платформой расширением в вашей текущей папке.

Проверьте сгенерированный код

Проверьте тот predict, predictSmoker, и файл MEX возвращает те же результаты для случайной выборки 20 пациентов.

rng('default') % For reproducibility
[newTbl,idx] = datasample(Tbl,20);

[labels1,scores1] = predict(Mdl,newTbl);
[labels2,scores2] = predictSmoker(Age(idx),Diastolic(idx),Systolic(idx),Weight(idx));
[labels3,scores3] = predictSmoker_mex(Age(idx),Diastolic(idx),Systolic(idx),Weight(idx));

verifyMEXlabels = isequal(labels1,labels2,labels3)
verifyMEXlabels = logical
   1

verifyMEXscores = isequal(scores1,scores2,scores3)
verifyMEXscores = logical
   1

Смотрите также

| | (MATLAB Coder) | (MATLAB Coder)

Похожие темы