Этот пример показывает, как добавить блок MATLAB function в Simulink® для прогноза метки. Блок MATLAB function принимает данные о потоковой передаче и предсказывает метку и счет классификации с помощью обученной, модели классификации машин вектора поддержки (SVM). Для получения дополнительной информации при использовании блока MATLAB function, смотрите, Создают Пользовательскую Функциональность Используя блок MATLAB function (Simulink).
Набор данных ionosphere
, который включен в Statistics and Machine Learning Toolbox™, содержит, возвращают радар качества (Y
) и данные о предикторе (X
). Радар возвращается, или имеют хорошее качество ('g'
) или плохого качества ('b'
).
Загрузите набор данных ionosphere
. Определите объем выборки.
load ionosphere
n = numel(Y)
n = 351
Блок MATLAB function не может возвратить массивы ячеек. Так, преобразуйте переменную отклика в логический вектор, элементами которого является 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
. В командной строке можно использовать Mdl
, чтобы сделать прогнозы для новых наблюдений. Однако вы не можете использовать Mdl
в качестве входного параметра в функции, предназначенной для генерации кода.
Подготовьте Mdl
, чтобы загрузиться в функции с помощью saveCompactModel
.
saveCompactModel(Mdl,'SVMIonosphere');
saveCompactModel
уплотняет Mdl
, и затем сохраняет его в MAT-файле SVMIonosphere.mat
.
Задайте функцию с именем точки входа svmIonospherePredict.m
, который предсказывает, возвращается ли радар, имеет хорошее качество. Функция должна:
Включайте директиву генерации кода %#codegen
где-нибудь в функции.
Примите возвращают радар данные о предикторе. Данные должны быть соразмерными с X
за исключением количества строк.
Загрузите SVMIonosphere.mat
с помощью loadCompactModel
.
Возвратите предсказанные метки и музыку классификации к предсказанию, что качество радара возвращается как хорошее (то есть, счет положительного класса).
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 preditor 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 = loadCompactModel('SVMIonosphere'); [label,bothscores] = predict(Mdl,X); score = bothscores(:,2); end
Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, затем MATLAB открывает папку в качестве примера. Эта папка включает файл функции точки входа.
Загрузите модель slexSVMIonospherePredictExample.slx
Simulink®.
SimMdlName = 'slexSVMIonospherePredictExample';
open_system(SimMdlName);
Фигура отображает модель Simulink®. Когда входной узел обнаруживает радар, возвращаются, он предписывает, что наблюдение в блок MATLAB function, который отправляет svmIonospherePredict.m
. После предсказания метки и счета, модель возвращает эти значения к рабочей области и отображает значения в модели по одному. То, когда вы загружаете slexSVMIonospherePredictExample.slx
, MATLAB® также загружает набор данных, которого это требует, вызвало radarReturnInput
. Однако этот пример показывает, как создать необходимый набор данных.
Модель ожидает получать входные данные как массив структур под названием radarReturnInput
, содержащий эти поля:
время-
Моменты времени, в которых наблюдения вводят модель. В примере длительность включает целые числа от 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
, и затем задать новое имя в модели. However, 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™, то можно сгенерировать код С от slexSVMIonospherePredictExample.slx
в Simulink® или из командной строки с помощью rtwbuild
. Для получения дополнительной информации смотрите, Генерируют код С для Модели (Simulink Coder).
learnerCoderConfigurer
| loadCompactModel
| predict
| rtwbuild
| saveCompactModel