Предсказание меток классов с помощью блока ClassificationSVM Predict

В этом примере показано, как использовать блок 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

Этот пример предоставляет модель Simulink slexIonosphereClassificationSVMPredictExample.slx, который включает блок ClassificationSVM Predict. Можно открыть модель Simulink или создать новую модель, как описано в этом разделе.

Откройте модель Simulink slexIonosphereClassificationSVMPredictExample.slx.

SimMdlName = 'slexIonosphereClassificationSVMPredictExample'; 
open_system(SimMdlName)

The PreLoadFcn функция обратного вызова от slexIonosphereClassificationSVMPredictExample включает код для загрузки выборочных данных, обучения модели SVM и создания входного сигнала для модели Simulink. Если вы открываете модель Simulink, то программное обеспечение запускает код в PreLoadFcn перед загрузкой модели Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup на вкладке Modeling, нажмите Model Settings и выберите Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn функция обратного вызова на панели обратных коллбэков Model.

Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок ClassificationSVM Predict. Добавьте блоки Inport и Outport и соедините их с блоком ClassificationSVM Predict.

Дважды кликните блок ClassificationSVM Predict, чтобы открыть диалоговое окно Параметров блоков. Задайте значение Select trained машинного обучения параметра модели как svmMdl, которое является именем переменной рабочей области, содержащей обученную модель SVM. "Нажмите кнопку ""Обновить""". В диалоговом окне отображаются опции, используемые для обучения модели SVM svmMdl в рамках модели обученного машинного обучения. Установите флажок Добавить выходной порт для предсказанных счетов классов, чтобы добавить второй счет выходного порта.

Блок ClassificationSVM Predict ожидает наблюдения, содержащего 34 предикторных значения. Дважды кликните блок Inport и установите для параметра Port dimensions значение 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);

Для импорта данных о сигнале из рабочей области:

  • Откройте диалоговое окно Параметры конфигурации. На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings).

  • На панели Импорт/экспорт данных установите флажок Вход и введите carsmallInput в соседнем текстовом поле.

  • На панели « Решатели» в разделе «Время симуляции» установите значение «Время остановки» radarReturnInput.time(end). В группе «Выбор решателя» установите для параметра «Тип» значение Fixed-step, и установите решатель на discrete (no continuous states).

Для получения дополнительной информации смотрите Загрузку Данных Сигнала для Симуляции (Simulink).

Симулируйте модель.

sim(SimMdlName);

Когда блок Inport обнаруживает наблюдение, он направляет наблюдение в блок ClassificationSVM Predict. Можно использовать Данные моделирования Inspector (Simulink), чтобы просмотреть записанные данные блоков Outport.

См. также

Похожие темы