В этом примере показано, как добавить Функциональный блок MATLAB® в модель Simulink® для предсказания метки. Блок MATLAB function принимает данные о потоковой передаче и предсказывает метку и классификационную оценку с помощью обученной, модели классификации машин опорных векторов (SVM). Для получения дополнительной информации при использовании блока MATLAB function, смотрите, Создают Пользовательскую Функциональность Используя блоки MATLAB function (Simulink).
Этот пример использует ionosphere
набор данных, который содержит, возвращает радар качества (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
модель.
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 function, который отправляет svmIonospherePredict.m
. После предсказания метки и счета, модель возвращает эти значения к рабочей области и отображает значения в модели по одному. Когда вы загружаете slexSVMIonospherePredictExample.slx
, MATLAB также загружает набор данных, которого он требует, вызвал radarReturnInput
. Однако этот пример показывает, как создать необходимый набор данных.
Модель ожидает получать входные данные как массив структур под названием radarReturnInput
содержа эти поля:
time
- Моменты времени, в которых наблюдения вводят модель. В примере длительность включает целые числа от 0 хотя 50. Ориентация должна соответствовать наблюдениям в данных о предикторе. Так, для этого примера, time
должен быть вектор-столбец.
signals
- Массив структур 1 на 1, описывающий входные данные и содержащий поля values
и dimensions
Значения
матрица данных о предикторе. 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™, то можно сгенерировать код С от slexSVMIonospherePredictExample.slx
в Simulink или из командной строки с помощью slbuild
(Simulink). Для получения дополнительной информации смотрите, Генерируют код С для Модели (Simulink Coder).
predict
| loadLearnerForCoder
| saveLearnerForCoder
| slbuild
(Simulink) | learnerCoderConfigurer