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

Этот пример показывает, как добавить блок 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).

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

| | | |

Похожие темы