Этот пример показывает, как подготовить модель Simulink ®, которая классифицирует активность человека на основе сигналов датчика для генерации кода и развертывания на оборудовании с низким энергопотреблением. Пример предоставляет модель классификации Simulink, которая готова к развертыванию на устройстве micro: bit BBC. Во-первых, загрузите и установите Simulink Coder™ Support Package для BBC micro: бит из Add-On Explorer. Затем обучите классификационную модель и разверните модель Simulink на целевом устройстве.
Загрузите humanactivity
набор данных.
load humanactivity
The humanactivity
набор данных содержит 24 075 наблюдений за пятью физическими действиями человека: Сидя, Стоя, Ходьба, Бег и Танцы. Каждое наблюдение имеет 60 функции, извлеченных из данных об ускорении, измеренных датчиками акселерометра смартфона. Набор данных содержит следующие переменные:
actid
- Вектор отклика, содержащий идентификаторы активности в целых числах: 1, 2, 3, 4 и 5, представляющие Сидя, Стоя, Ходьбу, Бег и Танцы, соответственно
actnames
- Имена действий, соответствующие целочисленным идентификаторам действий
feat
- Матрица признаков из 60 функций для 24 075 наблюдений
featlabels
- Метки 60 функций
Приложение Sensor HAR (human распознавания активности) [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. Для аналогичного примера смотрите Модель Human Распознавания активности Simulink для Развертывания смартфона.
Определите, насколько хорошо алгоритм обобщается, оценив ошибку классификации тестовой выборки.
testAccuracy = 1-loss(classificationTree,XTest,YTest)
testAccuracy = 0.9617
Обученная модель правильно классифицирует 96,17% деятельности человека на наборе тестовых данных. Этот результат подтверждает, что обученная модель не перегружается набором обучающих данных.
Обратите внимание, что значения точности могут незначительно варьироваться в зависимости от вашей операционной системы.
Теперь, когда вы подготовили классификационную модель, можно открыть модель Simulink. Можно импортировать обученный объект классификации, содержащий дерево решений classificationTree
в блок ClassificationTree Predict. Можно добавить этот блок из библиотеки Statistics and Machine Learning Toolbox™. Дополнительные сведения о том, как создать модель, включающую блок ClassificationTree Predict, см. в разделе Предсказание меток классов с использованием блока ClassificationTree Predict. В этом случае вы будете использовать модель 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
The slexHARFixedPointExample
модель содержит следующие блоки:
Блок X (входной порт) связывает сигнал ts
из Рабочей области в систему.
Блок Buffer and Calibration содержит три блока Buffer: X Buffer, Y Buffer и Z Buffer. Каждый из этих блоков буферизует 32 выборки оси акселерометра с 12 выборками перекрытия между буферизованными системами координат. После сбора 20 выборки каждый блок Buffer соединяет их с 12 выборками из предыдущей системы координат и передает общее количество 32 выборки в блок предварительной обработки. Каждый блок Buffer получает выборку входа каждые 0,1 секунды и выводит буферизованную систему координат, включающую 32 выборки каждые 2 секунды.
Блок предварительной обработки извлекает 15 функции из буферизованной системы координат из 32 выборок акселерометра. Этот блок подсистемы использует DSP System Toolbox™ и Signal Processing Toolbox™.
Блок ClassificationTree Predict является библиотечным блоком из библиотеки Statistics and Machine Learning Toolbox, который классифицирует действия человека, используя извлеченные функции. Выход является целым числом от 1 до 5, соответствующим Siting, Standing, Walking, Running и Dancing, соответственно.
Преобразуйте slexHARFixedPointExample
модель к модели с фиксированной точкой slexHARFixedPointConvertedExample
. Затем разверните slexHARFixedPointConvertedExample
BBC micro: bit board. Целевое устройство не имеет модуля с плавающей точкой (FPU) и выполняет вычисления с фиксированной точкой более эффективно, чем вычисления с плавающей точкой.
В slexHARFixedPointExample
щелкните правой кнопкой мыши по порту Label и выберите Log Selected Signals. Затем откройте приложение Fixed-Point Tool, выбрав его из галереи Apps, доступной на вкладке Apps. В окне Fixed-Point Tool, в разделе New workflow выберите Iterative Fixed-Point Conversion
.
На вкладке Iterative Fixed-Point Conversion, в разделе Signal Tolerances, задайте приемлемый уровень допуска (различие между исходным значением и значением нового проекта) для label
сигнал. Рекомендуемая практика для классификационных моделей состоит в том, чтобы задать 0 абсолютные погрешности. С помощью этой настройки метки, возвращенные классификационной моделью с фиксированной точкой, должны быть такими же, как метки, возвращенные моделью с плавающей точкой. (Для регрессионных моделей приемлемым допуском может быть ненулевое заданное пользователем число.)
Затем проверьте шаги в примере Преобразовать модель с плавающей точкой в Фиксированную точку (Fixed-Point Designer), чтобы узнать, как создать модель Simulink, которая преобразуется в фиксированную точку.
Откройте модель Simulink с фиксированной точкой slexHARFixedPointConvertedExample
путем ввода следующего в командной строке. Блок Subsystem содержит блоки Buffer и Calibration, Precessing и ClassificationTree Predict, как показано ранее для slexHARFixedPointExample
модель.
slexHARFixedPointConvertedExample
Также можно выбрать Optimized Fixed-Point Conversion
рабочий процесс в приложении Fixed-Point Tool или вручную определить тип данных в диалоговом окне блока. Для получения дополнительной информации см. раздел «Настройка блоков с выходами с фиксированной точкой» (Fixed-Point Designer).
Откройте модель Simulink для развертывания на устройстве micro: bit BBC путем ввода следующего в командной строке. The slexHARFixedPointDeployExample
модель преобразуется в фиксированную точку и имеет блоки ввода-вывода для портов акселерометра и отображения на целевом устройстве.
slexHARFixedPointDeployExample
Модель Simulink slexHARFixedPointDeployExample
классифицирует деятельность человека на основе данных об ускорении, измеренных датчиком смартфона. Модель включает следующие блоки:
Блок Accelerometer получает необработанные данные об ускорении от датчиков акселерометра на устройстве.
Блоки Buffer и Calibration, Precessing и ClassificationTree Predict те же, что и ранее показанные для slexHARFixedPointExample
модель.
Блок Предсказанная Активность отображает классифицированные значения человеческой активности на матрице 5x5 LED устройства micro: bit BBC. Буквы «S», «T», «W», «R» и «D» представляют собой Siting, Standing, Walking, Running и Dancing, соответственно.
Чтобы перенести модель Simulink на ваше устройство, следуйте шагам в BBC micro: бит (Simulink Coder Support Package for BBC micro: бит). Запустите модель на своем устройстве, поместите устройство так же, как описано ранее для сбора обучающих данных, и попробуйте пять действий. Модель соответственно отображает классифицированное действие.
Чтобы гарантировать точность модели, вы должны разместить устройство так же, как описано для сбора обучающих данных. Если вы хотите поместить устройство в другое место или в другой ориентации, соберите данные по-своему и используйте свои данные для обучения классификационной модели.
Точность модели может отличаться от точности тестовых данных набора (testAccuracy
), в зависимости от устройства. Чтобы улучшить точность модели, рассмотрите использование дополнительных датчиков, таких как гироскоп.
[1] Эль Хелу, Амин. Приложение распознавания HAR датчика MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app
[2] STMicroelectronics, AN4508 Application note. «Параметры и калибровка малогабаритного 3-осевого акселерометра». 2014. https://www.st.com/resource/en/application_note/dm00119044-parameters-and-calibration-of-a-lowg-3axis-accelerometer-stmicroelectronics.pdf
[3] Эль Хелу, Амин. Sensor Data Analytics. Файлы MathWorks Exchange https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics--french-webinar-code-
ClassificationTree Predict | crossval
| fitctree