В этом примере показано, как подготовить модель Simulink ®, которая классифицирует человеческую активность на основе сигналов датчиков смартфона для генерации кода и развертывания смартфона. В примере представлены две модели Simulink, готовые к развертыванию на Android™ устройстве и устройстве iOS. После установки необходимого пакета поддержки для целевого устройства обучите классификационную модель и разверните модель Simulink на устройстве .
Загрузить humanactivity набор данных.
load humanactivity humanactivity набор данных содержит 24 075 наблюдений за пятью различными физическими видами деятельности человека: сидя, стоя, ходя, бега и танцев. Каждое наблюдение имеет 60 особенностей, извлеченных из данных ускорения, измеренных датчиками акселерометра смартфона. Набор данных содержит следующие переменные:
actid - Вектор ответа, содержащий идентификаторы активности в целых числах: 1, 2, 3, 4 и 5, представляющих Сидячие, Стоячие, Ходячие, Бегущие и Танцующие соответственно
actnames - Имена операций, соответствующие целочисленным идентификаторам операций
feat - Матрица признаков из 60 признаков для 24 075 наблюдений
featlabels - Метки 60 элементов
Приложение Sensor HAR (распознавание человеческой деятельности) [1] использовалось для создания humanactivity набор данных. При измерении необработанных данных ускорения с помощью этого приложения человек поместил смартфон в карман так, чтобы смартфон был перевернут, а экран обращен к человеку. Затем программное обеспечение соответствующим образом откалибровало измеренные необработанные данные и извлекло 60 признаков из откалиброванных данных. Для получения подробной информации о калибровке и извлечении функций см. [2] и [3] соответственно. Модели Simulink, описанные ниже, также используют необработанные данные ускорения и включают блоки для калибровки и извлечения элементов.
Этот пример использует 90% наблюдений для обучения модели, которая классифицирует пять типов человеческой деятельности, и 10% наблюдений для проверки обученной модели. Использовать cvpartition для указания 10% удержания для тестового набора.
rng('default') % For reproducibility Partition = cvpartition(actid,'Holdout',0.10); trainingInds = training(Partition); % Indices for the training set XTrain = feat(trainingInds,:); YTrain = actid(trainingInds); testInds = test(Partition); % Indices for the test set XTest = feat(testInds,:); YTest = actid(testInds);
Преобразование матрицы элементов XTrain и вектор отклика YTrain в таблицу для загрузки набора данных обучения в приложении Classification Learner.
tTrain = array2table([XTrain YTrain]);
Укажите имя переменной для каждого столбца таблицы.
tTrain.Properties.VariableNames = [featlabels' 'Activities'];Обучение модели классификации с помощью приложения Классификатор. Чтобы открыть приложение Классификатор, введите classificationLearner в командной строке. Либо перейдите на вкладку Приложения и щелкните стрелку справа от раздела Приложения, чтобы открыть галерею. Затем в разделе Машинное обучение и Глубокое обучение щелкните Классификатор.
На вкладке «Классификатор» в разделе «Файл» щелкните «Создать сеанс» и выберите «Из рабочей области».
В диалоговом окне Создать сессию из рабочей области (New Session from Workspace) щелкните стрелку для параметра Переменная набора данных (Data Set Variable), а затем выберите таблицу. tTrain. Classification Learner обнаруживает предикторы и ответ из таблицы.

Опция по умолчанию - пятикратная перекрестная проверка, которая защищает от переоборудования. Щелкните Начать сеанс (Start Session). Classification Learner загружает набор данных и строит график рассеяния первых двух элементов.

На вкладке «Классификатор» щелкните стрелку справа от раздела «Тип модели», чтобы открыть галерею. Затем в разделе Ensemble Classifiers выберите Busted Trees.

На панели Сводка текущей модели (Current Model Summary) отображаются настройки по умолчанию для модели усиленного ансамбля дерева.

На вкладке Classification Learner в разделе Training нажмите Train. По завершении обучения на панели Модели (Models) отображается пятикратная точность классификации с перекрестной проверкой.

На вкладке Ученик по классификации в разделе Экспорт щелкните Экспорт модели, а затем выберите Экспорт компактной модели. Нажмите кнопку ОК в диалоговом окне. Структура trainedModel отображается в рабочей области MATLAB ®. ОбластьClassificationEnsemble из trainedModel содержит компактную модель. Извлеките обученную модель из структуры.
classificationEnsemble = trainedModel.ClassificationEnsemble;
Можно также обучить одну и ту же классификационную модель в командной строке.
template = templateTree('MaxNumSplits',20,'Reproducible',true); classificationEnsemble = fitcensemble(XTrain,YTrain, ... 'Method','AdaBoostM2', ... 'NumLearningCycles',30, ... 'Learners',template, ... 'LearnRate',0.1, ... 'ClassNames',[1; 2; 3; 4; 5]);
5-кратная перекрестная проверка для classificationEnsemble и вычисляют точность проверки.
partitionedModel = crossval(classificationEnsemble,'KFold',5);
validationAccuracy = 1-kfoldLoss(partitionedModel)validationAccuracy = 0.9833
Оцените производительность набора тестовых данных.
testAccuracy = 1-loss(classificationEnsemble,XTest,YTest)
testAccuracy = 0.9759
Обученная модель правильно классифицирует 97,59% деятельности человека по набору тестовых данных. Этот результат подтверждает, что обученная модель не соответствует набору данных обучения.
Обратите внимание, что значения точности могут незначительно изменяться в зависимости от операционной системы.
Для создания кода, включая объект классификационной модели, используйте saveLearnerForCoder и loadLearnerForCoder.
Сохранение обучаемой модели с помощью saveLearnerForCoder.
saveLearnerForCoder(classificationEnsemble,'EnsembleModel.mat');Функциональный блок PredictActivity в моделях Simulink загружает обученную модель с помощью loadLearnerForCoder и использует обученную модель для классификации новых данных.
Теперь, когда вы подготовили классификационную модель, вы можете открыть модель Simulink в зависимости от того, какой тип смартфона у вас есть, и развернуть модель на своем устройстве. Обратите внимание, что для модели Simulink требуется EnsembleModel.mat файл и файл матрицы калибровки slexHARAndroidCalibrationMatrix.mat или slexHARiOSCalibrationMatrix.mat. Если нажать кнопку, расположенную в правом верхнем разделе этой страницы, и открыть этот пример в MATLAB, то MATLAB откроет папку примеров, содержащую эти файлы калибровочной матрицы.
Напечатать slexHARAndroidExample для открытия модели Simulink для развертывания Android.

Напечатать slexHARiOSExample для открытия модели Simulink для развертывания iOS. Модель можно открыть на платформе Mac OS.

Две модели Simulink классифицируют человеческую активность на основе данных ускорения, измеренных датчиком смартфона. Модели включают следующие блоки:
Блок акселерометров получает необработанные данные ускорения от датчиков акселерометров на устройстве.
Блок калибровки является функциональным блоком MATLAB, который калибрует необработанные данные ускорения. Этот блок использует калибровочную матрицу в slexHARAndroidCalibrationMatrix.mat файл или slexHARiOSCalibrationMatrix.mat файл. Если нажать кнопку, расположенную в правом верхнем разделе этой страницы, и открыть этот пример в MATLAB, то MATLAB откроет папку примеров, содержащую эти файлы.
Блоки отображения Acc X, Acc Y и Acc Z соединены с блоком калибровки и отображают калиброванные точки данных для каждой оси устройства.
Каждый из буферных блоков, X Buffer, Y Buffer и Z Buffer, буферирует 32 выборки оси акселерометра с 12 выборками перекрытия между буферными кадрами. После сбора 20 выборок каждый блок буфера соединяет 20 выборок с 12 выборками из предыдущего кадра и передает 32 выборки в блок extractFeatures. Каждый буферный блок принимает входную выборку каждые 0,1 секунды и выводит буферный кадр, включающий 32 выборки, каждые 2 секунды.
Блок extractFeatures представляет собой блок MATLAB Function, который извлекает 60 признаков из буферизированного кадра из 32 выборок акселерометра. Этот функциональный блок использует системные Toolbox™ DSP и Toolbox™ обработки сигналов.
Блок predictActivity является функциональным блоком MATLAB, который загружает обученную модель из EnsembleModel.mat файл с помощью loadLearnerForCoder и классифицирует действие пользователя, используя извлеченные элементы. Выходной сигнал представляет собой целое число от 1 до 5, соответствующее Sitting, Standing, Walking, Running и Dancing соответственно.
Блок Прогнозируемая активность отображает классифицированные значения активности пользователя на устройстве.
Подсистема видеовыхода использует блок многопортового коммутатора для выбора соответствующих данных изображения активности пользователя для отображения на устройстве. Блок «Преобразовать в RGB» разлагает выбранное изображение на отдельные векторы RGB и передает изображение в блок «Отображение активности».
Чтобы развернуть модель Simulink на устройстве, выполните действия, описанные в разделе Запуск модели на устройствах Android (пакет поддержки Simulink для устройств Android) или Запуск модели на устройствах Apple iOS (пакет поддержки Simulink для устройств Apple iOS). Запустите модель на устройстве, поместите устройство таким же образом, как описано выше для сбора данных обучения, и попробуйте выполнить пять действий. Модель соответственно отображает классифицированную операцию.

Для обеспечения точности модели необходимо разместить устройство так же, как описано для сбора обучающих данных. Если вы хотите разместить устройство в другом месте или в другой ориентации, соберите данные по-своему и используйте данные для обучения модели классификации.
Точность модели может отличаться от точности набора тестовых данных (testaccuracy), в зависимости от устройства. Для улучшения модели можно использовать дополнительные датчики и обновить калибровочную матрицу. Кроме того, можно добавить еще один выходной блок для звуковой обратной связи в подсистему вывода с помощью Audio Toolbox™. Используйте блок записи ThingSpeak™ для публикации засекреченных действий и данных ускорения с устройства в Интернете вещей. Дополнительные сведения см. в разделе https://thingspeak.com/.
[1] El Helou, A. Приложение распознавания HAR датчика MathWorks https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app обмена файлами
[2] STMicroelectronics, AN4508 Примечание к заявке. «Параметры и калибровка 3-осевого акселерометра низкого g». 2014.
[3] El Helou, A. Анализ данных датчиков. https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics--french-webinar-code- обмена файлами MathWorks
fitcensemble | loadLearnerForCoder | predict | saveLearnerForCoder