exponenta event banner

Прогнозирование меток классов с использованием функционального блока MATLAB

В этом примере показано, как добавить функциональный блок MATLAB ® в модель Simulink ® для прогнозирования метки. Функциональный блок MATLAB принимает потоковые данные и прогнозирует метку и оценку классификации с использованием обученной модели классификации, поддерживающей векторную машину (SVM). Дополнительные сведения об использовании функционального блока MATLAB см. в разделе Создание пользовательских функциональных возможностей с использованием функционального блока MATLAB (Simulink).

Модель классификации поездов

В этом примере используется ionosphere набор данных, содержащий радиолокационно-возвратные качества (Y) и данные предиктора (X). Радиолокаторы имеют хорошее качество ('g') или плохого качества ('b').

Загрузить ionosphere набор данных. Определите размер выборки.

load ionosphere
n = numel(Y)
n = 351

Функциональный блок MATLAB не может возвращать массивы ячеек. Преобразовать переменную ответа в логический вектор, элементами которого являются 1 если возврат радара хороший, и 0 в противном случае.

Y = strcmp(Y,'g');

Предположим, что возврат радара обнаруживается последовательно, и у вас есть первые 300 наблюдений, но вы еще не получили последний 51. Разбейте данные на текущую и будущую выборки.

prsntX = X(1:300,:);
prsntY = Y(1:300);
ftrX = X(301:end,:);
ftrY = Y(301:end);

Обучение модели SVM с использованием всех имеющихся в настоящее время данных. Укажите стандартизацию данных предиктора.

Mdl = fitcsvm(prsntX,prsntY,'Standardize',true);

Mdl является ClassificationSVM модель.

Сохранить модель с помощью saveLearnerForCoder

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

Подготовиться Mdl для загрузки внутри функции с помощью saveLearnerForCoder.

saveLearnerForCoder(Mdl,'SVMIonosphere');

saveLearnerForCoder уплотняет Mdl, а затем сохраняет его в MAT-файле SVMIonosphere.mat.

Определение функции MATLAB

Определение функции MATLAB с именем svmIonospherePredict.m это предсказывает, является ли возврат радара хорошим качеством. Функция должна:

  • Включить директиву создания кода %#codegen где-то в функции.

  • Примите данные предсказателя с радиолокационным возвратом. Данные должны быть соизмеримы с X за исключением количества строк.

  • Груз SVMIonosphere.mat использование loadLearnerForCoder.

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

function [label,score] = svmIonospherePredict(X) %#codegen
%svmIonospherePredict Predict radar-return quality using SVM model
%   svmIonospherePredict predicts labels and estimates classification
%   scores of the radar returns in the numeric matrix of predictor data X
%   using the compact SVM model in the file SVMIonosphere.mat.  Rows of X
%   correspond to observations and columns to predictor variables.  label
%   is the predicted label and score is the confidence measure for
%   classifying the radar-return quality as good.
%
% Copyright 2016 The MathWorks Inc.
Mdl = loadLearnerForCoder('SVMIonosphere');
[label,bothscores] = predict(Mdl,X);
score = bothscores(:,2);
end

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

Создание модели Simulink

Создание модели Simulink с блоком MATLAB Function, который отправляется в svmIonospherePredict.m.

В этом примере представлена модель Simulink slexSVMIonospherePredictExample.slx. Откройте модель Simulink.

SimMdlName = 'slexSVMIonospherePredictExample'; 
open_system(SimMdlName)

На рисунке показана модель Simulink. Когда входной узел обнаруживает возврат радара, он направляет это наблюдение в блок функции MATLAB, который отправляет svmIonospherePredict.m. После прогнозирования метки и оценки модель возвращает эти значения в рабочую область и отображает значения в модели по одному. При загрузке slexSVMIonospherePredictExample.slx, MATLAB также загружает набор данных, который требует вызова radarReturnInput. Однако в этом примере показано, как создать требуемый набор данных.

Модель ожидает получение входных данных в виде структурного массива с именем radarReturnInput содержащие следующие поля:

  • time - моменты времени, в которые наблюдения входят в модель. В примере длительность включает целые числа от 0 до 50. Ориентация должна соответствовать наблюдениям в данных предиктора. Итак, для этого примера: time должен быть вектором столбца.

  • signals - Структурный массив 1 к 1, описывающий входные данные и содержащий поля values и dimensions. values является матрицей данных предиктора. dimensions - количество переменных предиктора.

Создайте соответствующий структурный массив для будущих радарных возвращений.

radarReturnInput.time = (0:50)';
radarReturnInput.signals(1).values = ftrX;
radarReturnInput.signals(1).dimensions = size(ftrX,2);

Можно изменить имя с radarReturnInput, а затем укажите новое имя в модели. Однако Simulink ожидает, что массив структуры будет содержать описанные имена полей.

Моделирование модели с использованием данных, удерживаемых вне обучения, то есть данных в radarReturnInput.

sim(SimMdlName);

На рисунке показана модель после обработки всех наблюдений в radarReturnInput по одному. Прогнозируемая метка X(351,:) является 1 и его оценка положительного класса 1.431. Переменные tout, yout, и svmlogsout отображаются в рабочей области. yout и svmlogsout являются SimulinkData.Dataset объекты, содержащие прогнозируемые метки и оценки. Дополнительные сведения см. в разделе Формат данных для данных моделирования в журнале (Simulink).

Извлеките данные моделирования из журнала моделирования.

labelsSL = svmlogsout.getElement(1).Values.Data;
scoresSL = svmlogsout.getElement(2).Values.Data;

labelsSL - числовой вектор предсказанных меток 51 на 1. labelsSL(j) = 1 означает, что модель SVM предсказывает возврат радара j в будущем образец имеет хорошее качество, и 0 означает иное. scoresSL является числовым вектором 51 на 1 положительных оценок класса, то есть подписанных расстояний от границы принятия решения. Положительные оценки соответствуют прогнозируемым меткам 1и отрицательные оценки соответствуют прогнозируемым меткам 0.

Прогнозирование меток и положительных оценок класса в командной строке с помощью predict.

[labelCMD,scoresCMD] = predict(Mdl,ftrX);
scoresCMD = scoresCMD(:,2);

labelCMD и scoresCMD соизмеримы с labelsSL и scoresSL.

Сравните оценки будущего образца, положительного класса, возвращенные slexSVMIonospherePredictExample тем, кто был возвращен по телефону predict в командной строке.

err = sum((scoresCMD - scoresSL).^2);
err < eps
ans = logical
   1

Сумма квадратичных отклонений между наборами баллов ничтожна.

При наличии лицензии Simulink Coder™ можно создать код C из slexSVMIonospherePredictExample.slx в Simulink или из командной строки с помощью slbuild (Симулинк). Дополнительные сведения см. в разделе Создание кода C для модели (Simulink Coder).

См. также

| | | | (Симулинк)

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