В этом примере показано, как подготовить модель Simulink®, которая классифицирует деятельность человека на основе сигналов датчика для генерации кода и развертывания на оборудовании малой мощности. Пример предоставляет модель классификации Simulink, которая готова к развертыванию на BBC micro:bit устройство. Во-первых, загрузите и установите Пакет поддержки Simulink Coder™ для BBC micro:bit из Add-On Explorer. Затем обучите модель классификации и разверните модель 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 описали, позже также используют необработанные ускоряющие данные и включают блоки для калибровки и извлечения признаков.
Чтобы уменьшать объем потребляемой памяти для развертывания фиксированной точки, задайте, чтобы использовать только первые 15 функций набора данных в обученном классификаторе.
feat = feat(:,1:15); featlabels = featlabels(1:15);
Этот пример использует 90% наблюдений, чтобы обучить модель, которая классифицирует пять типов деятельности человека и 10% наблюдений, чтобы подтвердить обученную модель. Используйте cvpartition
задавать 10%-ю затяжку для набора тестов.
rng('default') % For reproducibility Partition = cvpartition(actid,'Holdout',0.10);
Извлеките обучение и протестируйте индексы.
trainInds = training(Partition); testInds = test(Partition);
Задайте наборы тестовых данных и обучение.
XTrain = feat(trainInds,:); YTrain = actid(trainInds); XTest = feat(testInds,:); YTest = actid(testInds);
Обучите подходящее бинарное дерево решений классификации с помощью предикторов XTrain
и класс маркирует YTrain
. Методические рекомендации должны задать имена классов. Кроме того, задайте максимум 20 узлов ветви для дерева решений.
classificationTree = fitctree(XTrain,YTrain,... 'ClassNames',[1;2;3;4;5],... 'MaxNumSplits',20)
classificationTree = ClassificationTree ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 21668 Properties, Methods
Выполните 5-кратную перекрестную проверку для classificationTree
и вычислите точность валидации.
partitionedModel = crossval(classificationTree,'KFold',5);
validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9700
В качестве альтернативы можно обучить и перекрестный подтвердить ту же модель классификации использование приложения Classification Learner. Для подобного примера смотрите Распознавание Деятельности человека Модель Simulink для Развертывания Смартфона.
Определите, как хорошо алгоритм делает вывод путем оценки тестовой ошибки классификации выборок.
testAccuracy = 1-loss(classificationTree,XTest,YTest)
testAccuracy = 0.9617
Обученная модель правильно классифицирует 96,17% деятельности человека по набору тестовых данных. Этот результат подтверждает, что обученная модель не сверхсоответствует к обучающему набору данных.
Обратите внимание на то, что значения точности могут варьироваться немного в зависимости от вашей операционной системы.
Теперь, когда вы подготовили модель классификации, можно открыть модель Simulink. Можно импортировать обученный объект классификации, содержащий дерево решений classificationTree
в блок ClassificationTree Predict. Можно добавить этот блок из библиотеки Statistics and Machine Learning Toolbox™. Для получения дополнительной информации о том, как создать модель, которая включает блок ClassificationTree Predict, смотрите, Предсказывают, что Класс Маркирует Using ClassificationTree Predict Block. В этом случае вы будете использовать модель Simulink slexHARFixedPointExample
предоставленный этот пример.
Создайте большой набор данных об акселерометре ts
использовать в качестве входа к модели Simulink.
inData = load('rawAccData'); Xacc = inData.acc_data; t = 0:size(Xacc,1)-1; ts = timeseries(Xacc,t,'InterpretSingleRowDataAs3D',true); numSteps = numel(t)-1;
Откройте модель Simulink slexHARFixedPointExample
путем ввода следующего в командной строке. Обратите внимание на то, что модель Simulink включает коллбэки, которые загружают необходимые переменные для подсистемы предварительной обработки в базовое рабочее пространство.
slexHARFixedPointExample
slexHARFixedPointExample
модель содержит следующие блоки:
X блоков (входной порт) соединяют ts
сигнала из Рабочей области в систему.
Блок Buffer и Calibration содержит три Буферных блока: X Буферов, Y Буфер и Буфер Z. Каждый из этих блоков буферизует 32 выборки оси акселерометра с 12 выборками перекрытия между буферизированными системами координат. После сбора 20 выборок каждый блок Buffer соединяет их с 12 выборками от предыдущей системы координат и передает общее количество 32 выборок с блоком Preprocessing. Каждый блок Buffer получает вход, производят каждые 0,1 секунды, и выводит буферизированную систему координат включая 32 выборки каждые 2 секунды.
Блок Preprocessing извлекает 15 функций из буферизированной системы координат 32 выборок акселерометра. Этот блок подсистемы использует DSP System Toolbox™ и Signal Processing Toolbox™.
Блок ClassificationTree Predict является библиотечным блоком от библиотеки Statistics and Machine Learning Toolbox, которая классифицирует деятельность человека, использующую извлеченные функции. Выход является целым числом между 1 и 5, соответствуя Нахождению, Положению, Обходу, Выполнению и Танцу, соответственно.
Преобразуйте slexHARFixedPointExample
модель к модели slexHARFixedPointConvertedExample
фиксированной точки. Затем разверните
slexHARFixedPointConvertedExample
к BBC micro:bit плата. Целевое устройство не имеет модуля с плавающей точкой (FPU) и выполняет вычисления фиксированной точки более эффективно, чем вычисления с плавающей точкой.
В slexHARFixedPointExample
модель, щелкните правой кнопкой по порту Label и выберите Log Selected Signals. Затем откройте приложение Fixed-Point Tool путем выбора его из галереи Apps, доступной от вкладки Apps. В Fixed-Point Tool, под Новым рабочим процессом, выбирают Iterative Fixed-Point Conversion
.
На вкладке Iterative Fixed-Point Conversion, в разделе Signal Tolerances, задают допустимый уровень допуска (различие между исходным значением и значением нового проекта) для label
сигнал. Методические рекомендации для моделей классификации должны задать 0 абсолютных погрешностей. С этой установкой метки, возвращенные моделью классификации фиксированных точек, должны совпасть с метками, возвращенными моделью с плавающей точкой. (Для моделей регрессии приемлемый допуск может быть ненулевым пользовательским конкретным количеством.)
Затем рассмотрите шаги в примере, Преобразуют Модель С плавающей точкой в Фиксированную точку (Fixed-Point Designer), чтобы изучить, как создать модель Simulink, которая преобразована в фиксированную точку.
Откройте модель Simulink фиксированной точки slexHARFixedPointConvertedExample
путем ввода следующего в командной строке. Блок Subsystem содержит Буфер и Калибровку, Предварительную обработку, и ClassificationTree Предсказывают блоки как показано ранее для slexHARFixedPointExample
модель.
slexHARFixedPointConvertedExample
В качестве альтернативы можно выбрать Optimized Fixed-Point Conversion
рабочий процесс в приложении Fixed-Point Tool или вручную задает тип данных в диалоговом окне блока. Для получения дополнительной информации смотрите, Конфигурируют Блоки с Фиксированной точкой Выход (Fixed-Point Designer).
Откройте модель Simulink для развертывания на BBC micro:bit устройство путем ввода следующего в командной строке. slexHARFixedPointDeployExample
модель преобразована в фиксированную точку и имеет блоки ввода-вывода для портов акселерометра и отображения на целевом устройстве.
slexHARFixedPointDeployExample
Модель Simulink slexHARFixedPointDeployExample
классифицирует деятельность человека на основе ускоряющих данных, измеренных датчиком смартфона. Модель включает следующие блоки:
Блок Accelerometer получает необработанные ускоряющие данные из датчиков акселерометра на устройстве.
Буфер и Калибровка, Предварительная обработка и ClassificationTree Предсказывают, что блоки совпадают с показанными ранее для slexHARFixedPointExample
модель.
Блок Predicted Activity отображает классифицированные значения деятельности человека на 5x5 матрица LED BBC micro:bit устройство. Буквы "S", "T", "W", "R" и "D" представляют Нахождение, Положение, Обход, Выполнение и Танец, соответственно.
Чтобы развернуть модель Simulink в ваше устройство, выполните шаги в Начале работы с Пакетом поддержки Simulink Coder для BBC micro:bit (Пакет поддержки Simulink Coder для BBC micro:bit). Запустите модель на своем устройстве, поместите устройство, таким же образом аналогичное описанному ранее для сбора обучающих данных, и попробуйте эти пять действий. Модель отображает классифицированное действие соответственно.
Чтобы гарантировать точность модели, необходимо поместить устройство таким же образом как описано для сбора обучающих данных. Если вы хотите поместить свое устройство в другое место или при различной ориентации, затем собрать данные вашим собственным способом и использовать ваши данные, чтобы обучить модель классификации.
Точность модели может отличаться от точности набора тестовых данных (testAccuracy
), в зависимости от устройства. Чтобы улучшить точность модели, рассмотрите использование дополнительных датчиков, таких как гироскоп.
[1] El Hello, Амин. Датчик Приложение Распознавания HAR. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app
[2] STMicroelectronics, Указания по применению AN4508. “Параметры и калибровка низкого-g акселерометра с 3 осями”. 2014. https://www.st.com/resource/en/application_note/dm00119044-parameters-and-calibration-of-a-lowg-3axis-accelerometer-stmicroelectronics.pdf
[3] El Hello, Амин. Анализ данных датчика. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics-french-webinar-code
fitctree
| crossval
| ClassificationTree Predict