В этом примере показано, как использовать блок ClassificationSVM Predict для предсказания метки в Simulink®. Блок принимает наблюдение (данные о предикторе) и возвращает предсказанную метку класса и счет класса к наблюдению с помощью обученной модели классификации машин опорных векторов (SVM).
Этот пример использует ionosphere
набор данных, который содержит радар, возвращает качества (Y
) и данные о предикторе (X
) из 34 переменных. Радар возвращается, или имеют хорошее качество ('g'
) или плохое качество ('b'
).
Загрузите ionosphere
набор данных. Определите объем выборки.
load ionosphere
n = numel(Y)
n = 351
Предположим, что радарные возвраты обнаруживаются в последовательности, и у вас есть первые 300 наблюдений, но вы еще не получили последние 51. Разделите данные в настоящие и будущие выборки.
prsntX = X(1:300,:); prsntY = Y(1:300); ftrX = X(301:end,:); ftrY = Y(301:end);
Обучите модель SVM с помощью всех в настоящее время доступных данных. Задайте стандартизацию данных о предикторе.
svmMdl = fitcsvm(prsntX,prsntY,'Standardize',true);
svmMdl
ClassificationSVM
модель.
Проверяйте отрицательные и положительные имена классов при помощи ClassNames
свойство svmMdl
.
svmMdl.ClassNames
ans = 2x1 cell
{'b'}
{'g'}
Отрицательным классом является 'b'
, и положительным классом является 'g'
. Выходные значения от порта счета блока ClassificationSVM Predict имеют тот же порядок. Первые и вторые элементы соответствуют отрицательному классу и положительным баллам класса, соответственно.
Этот пример предоставляет модели Simulink slexIonosphereClassificationSVMPredictExample.slx
, который включает блок ClassificationSVM Predict. Можно открыть модель Simulink или создать новую модель как описано в этом разделе.
Откройте модель Simulink slexIonosphereClassificationSVMPredictExample.slx
.
SimMdlName = 'slexIonosphereClassificationSVMPredictExample';
open_system(SimMdlName)
PreLoadFcn
функция обратного вызова slexIonosphereClassificationSVMPredictExample
включает код, чтобы загрузить выборочные данные, обучить модель SVM и создать входной сигнал для модели Simulink. Если вы открываете модель Simulink, то программное обеспечение запускает код в PreLoadFcn
прежде, чем загрузить модель Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup по вкладке Modeling, нажимают Model Settings и выбирают Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn
функция обратного вызова в панели коллбэков Модели.
Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок ClassificationSVM Predict. Добавьте блоки Inport и Outport и соедините их с блоком ClassificationSVM Predict.
Дважды кликните блок ClassificationSVM Predict, чтобы открыть диалоговое окно Block Parameters. Укажите, что Выбор обучил параметр модели машинного обучения как svmMdl
, который является именем переменной рабочей области, которая содержит обученную модель SVM. Нажмите Кнопку Обновить. Диалоговое окно отображается, опции раньше обучали модель SVM svmMdl
в соответствии с Обученной Моделью Машинного обучения. Выберите выходной порт Add для предсказанного флажка баллов класса, чтобы добавить второй счет выходного порта.
Блок ClassificationSVM Predict ожидает наблюдение, содержащее 34 значения предиктора. Дважды кликните Inport блок и установите размерности Порта на 34 на вкладке Signal Attributes.
Создайте входной сигнал в форме массива структур для модели Simulink. Массив структур должен содержать эти поля:
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);
Импортировать данные сигнала из рабочей области:
Откройте диалоговое окно Configuration Parameters. На вкладке Modeling нажмите Model Settings.
В панели Импорта/Экспорта Данных установите флажок Input и введите radarReturnInput
в смежном текстовом поле.
В панели Решателя, под Временем симуляции, Временем остановки набора к radarReturnInput.time(end)
. При выборе Решателя, Типе набора к Fixed-step
, и Решатель набора к discrete (no continuous states)
.
Для получения дополнительной информации смотрите Данные сигнала Загрузки для Симуляции (Simulink).
Симулируйте модель.
sim(SimMdlName);
Когда Inport блок обнаруживает наблюдение, он направляет наблюдение в блок ClassificationSVM Predict. Можно использовать Инспектора Данных моделирования (Simulink), чтобы просмотреть записанные данные блоков Выходного порта.