Предскажите, что метки класса Используя ClassificationNeuralNetwork предсказывают блок

В этом примере показано, как использовать блок ClassificationNeuralNetwork Predict для предсказания метки в Simulink®. Блок принимает наблюдение (данные о предикторе) и возвращает предсказанную метку класса и счет класса к наблюдению с помощью обученной модели классификации нейронных сетей.

Обучите классификатор нейронной сети

Обучите классификатор нейронной сети и оцените эффективность классификатора на наборе тестов.

Загрузите humanactivity набор данных. Этот набор данных содержит 24 075 наблюдений за пятью физической деятельностью человека: Нахождение, Положение, Обход, Выполнение и Танец. Каждое наблюдение имеет 60 функций, извлеченных из ускоряющих данных, измеренных датчиками акселерометра смартфона.

load humanactivity

Создайте предиктор X как числовая матрица, которая содержит 60 функций 24 075 наблюдений. Создайте класс, маркирует Y как числовой вектор, который содержит идентификаторы действия в целых числах: 1, 2, 3, 4, и 5 Нахождений представления, Положение, Обход, Выполнение и Танец, соответственно.

X = feat;
Y = actid;

Случайным образом наблюдения раздела в набор обучающих данных и набор тестов со стратификацией, с помощью информации о классе в Y. Используйте приблизительно 80% наблюдений, чтобы обучить модель нейронной сети, и 20% наблюдений проверять производительность обученной модели на новых данных.

rng("default") % For reproducibility of the partition
cv = cvpartition(Y,"Holdout",0.20);

Извлеките обучение и протестируйте индексы.

trainingInds = training(cv);
testInds = test(cv);

Задайте наборы тестовых данных и обучение.

XTrain = X(trainingInds,:);
YTrain = Y(trainingInds);
XTest = X(testInds,:);
YTest = Y(testInds);

Обучите классификатор нейронной сети путем передачи обучающих данных XTrain и YTrain к fitcnet функция. Задайте 40 выходных параметров для первого полносвязного слоя и 20 выходных параметров для второго полносвязного слоя.

nnetMdl = fitcnet(XTrain,YTrain,"LayerSizes",[40 20])
nnetMdl = 
  ClassificationNeuralNetwork
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [1 2 3 4 5]
           ScoreTransform: 'none'
          NumObservations: 19260
               LayerSizes: [40 20]
              Activations: 'relu'
    OutputLayerActivation: 'softmax'
                   Solver: 'LBFGS'
          ConvergenceInfo: [1x1 struct]
          TrainingHistory: [1000x7 table]


  Properties, Methods

nnetMdl обученный ClassificationNeuralNetwork модель. Можно использовать запись через точку, чтобы получить доступ к свойствам nnetMdl. Например, можно задать nnetMdl.TrainingHistory получить больше информации об учебной истории модели нейронной сети.

Оцените эффективность классификатора на наборе тестов путем вычисления точности классификации наборов тестов.

testError = loss(nnetMdl,XTest,YTest,"LossFun","classiferror");
testAccuracy = 1 - testError
testAccuracy = 0.9817

Создайте модель Simulink

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

Открытая предоставленная модель

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

SimMdlName = 'slexClassificationNeuralNetworkPredictExample';
open_system(SimMdlName)

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

Создайте новую модель

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

Дважды кликните блок ClassificationNeuralNetwork Predict, чтобы открыть диалоговое окно Block Parameters. Можно задать имя переменной рабочей области, которая содержит обученную модель нейронной сети. Именем переменной по умолчанию является nnetMdl. Нажмите Кнопку Обновить. Раздел Trained Machine Learning Model диалогового окна отображается, опции раньше обучали модель nnetMdl. Выберите выходной порт Add для предсказанного флажка баллов класса, чтобы добавить второй счет выходного порта.

Блок ClassificationNeuralNetwork Predict ожидает наблюдение, содержащее 60 значений предиктора. Дважды кликните Inport блок и установите размерности Порта на 60 на вкладке Signal Attributes.

Создайте входной сигнал в форме массива структур для модели Simulink. Массив структур должен содержать эти поля:

  • time — Моменты времени, в которых наблюдения вводят модель. Ориентация должна соответствовать наблюдениям в данных о предикторе. В этом примере, time должен быть вектор-столбец.

  • signals — Массив структур 1 на 1, описывающий входные данные и содержащий поля values и dimensions, где values матрица данных о предикторе и dimensions количество переменных предикторов.

Создайте соответствующий массив структур для будущей деятельности человека.

activityInput.time = (0:length(YTest)-1)';
activityInput.signals(1).values = XTest;
activityInput.signals(1).dimensions = size(XTest,2);

Импортируйте данные сигнала из рабочей области:

  • Откройте диалоговое окно Configuration Parameters. На вкладке Modeling нажмите Model Settings.

  • В панели Импорта/Экспорта Данных установите флажок Input и введите activityInput в смежном текстовом поле.

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

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

Модель симулируется

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

sim(SimMdlName);

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

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

Похожие темы