Предскажите метки класса Используя блок MATLAB function

В этом примере показано, как добавить Функциональный блок 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

Задайте функцию 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 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).

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

| | | (Simulink) |

Похожие темы