В этом примере показано, как использовать блок 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 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), чтобы просмотреть записанные данные блоков Выходного порта.
ClassificationNeuralNetwork Predict