В этом примере показано, как добавить функциональный блок 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 с именем 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 с блоком 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).
learnerCoderConfigurer | loadLearnerForCoder | predict | saveLearnerForCoder | slbuild (Симулинк)