В этом примере показано, как подготовить модель 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 функций
Датчик 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'];
Обучите модель классификации при помощи приложения Classification Learner. Чтобы открыть приложение Classification Learner, введите classificationLearner
в командной строке. В качестве альтернативы кликните по вкладке Apps и кликните по стреле справа от раздела Apps, чтобы открыть галерею. Затем под Машинным обучением и Глубоким обучением, нажмите Classification Learner.
На вкладке Classification Learner, в Разделе файла, нажимают New Session и выбирают From Workspace.
В диалоговом окне New Session кликните по стреле для Переменной Набора данных, и затем выберите таблицу tTrain
. Classification Learner обнаруживает предикторы и ответ из таблицы.
Опция по умолчанию является 5-кратной перекрестной проверкой, которая защищает от сверхподбора кривой. Нажмите Start Session. Classification Learner загружает набор данных и строит график рассеивания первых двух функций.
На вкладке Classification Learner кликните по стреле справа от раздела Model Type, чтобы открыть галерею. Затем под Классификаторами Ансамбля нажмите Boosted Trees.
Панель Текущей модели Браузера Данных отображает настройки по умолчанию повышенной древовидной модели ансамбля.
На вкладке Classification Learner, в разделе Training, нажимают Train. Когда обучение завершено, панель Истории Браузера Данных отображает 5-кратную, перекрестную подтвержденную точность классификации.
На вкладке Classification Learner, в Разделе экспорта, нажимают Export Model, и затем выбирают Export Compact Model. Нажмите ОК в диалоговом окне. Структура trainedModel
появляется в рабочем пространстве MATLAB. Поле ClassificationEnsemble
из trainedModel
содержит компактную модель. Извлеките обученную модель из структуры.
classificationEnsemble = trainedModel.ClassificationEnsemble;
В качестве альтернативы можно обучить ту же модель классификации в командной строке.
template = templateTree('MaxNumSplits',20); 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.9830
Оцените эффективность на наборе тестовых данных.
testAccuracy = 1-loss(classificationEnsemble,XTest,YTest)
testAccuracy = 0.9763
Обученная модель правильно классифицирует 97,63% деятельности человека по набору тестовых данных. Этот результат подтверждает, что обученная модель не сверхсоответствует к обучающему набору данных.
Обратите внимание на то, что значения точности могут варьироваться немного в зависимости от вашей операционной системы.
Для генерации кода включая объект модели классификации используйте 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 классифицируют деятельность человека на основе ускоряющих данных, измеренных датчиком смартфона. Модели включают следующие блоки:
Блок Accelerometer получает необработанные ускоряющие данные из датчиков акселерометра на устройстве.
Калибровать блоком является блок MATLAB function, который калибрует необработанные ускоряющие данные. Этот блок использует калибровочную матрицу в slexHARAndroidCalibrationMatrix.mat
файл или slexHARiOSCalibrationMatrix.mat
файл. Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, то MATLAB® открывает папку в качестве примера, которая включает эти файлы.
Отображение блокирует Acc X, Acc Y, и Acc Z соединяются с калибровать блоком, и отображение калибровало точки данных для каждой оси на устройстве.
Каждый из Буферных блоков, X Буферов, Y Буфер, Буфер andI Z, буферизует 32 выборки оси акселерометра с 12 выборками перекрытия между буферизированными системами координат. После сбора 20 выборок каждый блок Buffer соединяет эти 20 выборок с 12 выборками от предыдущей системы координат и передает общие 32 выборки блоку extractFeatures. Каждый блок Buffer получает вход, производят каждые 0,1 секунды, и выводит буферизированную систему координат включая 32 выборки каждые 2 секунды.
Блоком extractFeatures является блок MATLAB function, который извлекает 60 функций из буферизированной системы координат 32 выборок акселерометра. Этот функциональный блок использует DSP System Toolbox™ и Signal Processing Toolbox™.
Блоком predictActivity является блок MATLAB function, который загружает обученную модель от EnsembleModel.mat
файл при помощи loadLearnerForCoder
и классифицирует пользовательское действие, использующее извлеченные функции. Выход является целым числом между 1 и 5, соответствуя Нахождению, Положению, Обходу, Выполнению и Танцу, соответственно.
Блок Predicted Activity отображает классифицированные пользовательские значения действия на устройстве.
Подсистема Видеовыхода использует многопортовый блок switch, чтобы выбрать соответствующие пользовательские данные изображения действия, чтобы отобразиться на устройстве. Блок Convert to RGB разлагает выбранное изображение на отдельные векторы RGB и передает изображение блоку Activity Display.
Чтобы развернуть модель Simulink в ваше устройство, выполните шаги в Запущенной Модели на устройствах на базе Android (Пакет Поддержки Simulink для устройств на базе Android) или Модели Запуска на устройствах на iOS Apple (Пакет Поддержки Simulink для устройств на iOS Apple). Запустите модель на своем устройстве, поместите устройство, таким же образом аналогичное описанному ранее для сбора обучающих данных, и попробуйте эти пять действий. Модель отображает классифицированное действие соответственно.
Чтобы гарантировать точность модели, необходимо поместить устройство таким же образом как описано для сбора обучающих данных. Если вы хотите поместить свое устройство в другое место или ориентацию, затем собрать данные вашим собственным способом и использовать ваши данные, чтобы обучить модель классификации.
Точность модели может отличаться от точности набора тестовых данных (testaccuracy
), в зависимости от устройства. Чтобы улучшить модель, можно рассмотреть использование дополнительных датчиков и обновления калибровочной матрицы. Кроме того, можно добавить другой выходной блок для звукового отклика к выходной подсистеме с помощью Audio Toolbox™. Используйте блок записи ThingSpeak™, чтобы опубликовать классифицированные действия и ускоряющие данные от вашего устройства до Интернета Вещей. Для получения дополнительной информации см. https://thingspeak.com/.
[1] El Hello, A. Датчик Приложение распознавания HAR. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app
[2] STMicroelectronics, Указания по применению AN4508. “Параметры и калибровка низкого-g акселерометра с 3 осями”. 2014.
[3] El Hello, A. Анализ данных датчика. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics - французский код вебинара -
fitcensemble
| loadLearnerForCoder
| predict
| saveLearnerForCoder