利用手机数据进行人类活动学习

人类活动传感器数据包含从人们在进行不同活动(走路、躺着、坐着等)时佩戴的智能手机上的传感器测量得出的观察结果。本例的目标是提供一种策略来构建一个分类器,该分类器可以在给定传感器测量的情况下自动识别活动类型。

版权所有MathWorks, Inc. 2015

内容

数据说明

数据集包括加速度计和陀螺仪在50Hz下捕获的数据。原始传感器数据包含2.56秒的固定宽度滑动窗口(128读数/窗口)。受试者进行的活动包括:“走”、“爬楼梯”、“坐”、“站”和“躺”

如何获取数据:执行downloadSensorData并按照说明下载并从源网页提取数据。在文件被解压缩后运行saveSensorDataAsMATFiles.这将创建两个MAT文件:rawSensorData_train而且rawSensorData_test用原始传感器数据

  1. total_acc_ (x / y / z) _train:原始加速度计传感器数据
  2. body_gyro_ (x / y / z) _train:原始陀螺仪传感器数据
  3. trainActivity:培训数据标签
  4. testActivity:测试数据标签

参考:

Davide Anguita, Alessandro Ghio, Luca Oneto, Xavier Parra和Jorge L. Reyes-Ortiz。基于多类硬件友好支持向量机的智能手机人体活动识别。金宝app环境辅助生活国际研讨会(IWAAL 2012)。威托利亚-加斯泰兹,西班牙。2012年12月

从源下载数据

如果您是第一次运行这个脚本,请确保您执行了这些函数。
如果~ (“UCI HAR数据集”“文件”) downloadSensorData;结束

从单个文件加载数据并保存为MAT文件以供重用

如果~ (“rawSensorData_train.mat”“文件”)存在(“rawSensorData_test.mat”“文件”) saveSensorDataAsMATFiles;结束

负荷训练数据

负载rawSensorData_train

显示数据汇总

plotRawSensorData (total_acc_x_train total_acc_y_train,...total_acc_z_train trainActivity, 1000)

创建Table变量

rawSensorDataTrain = table(...好,好,好,好,...Body_gyro_x_train, body_gyro_y_train, body_gyro_z_train);

预处理培训数据:特征提取

让我们从一个简单的预处理技术开始。由于原始传感器数据包含2.56秒的固定宽度滑动窗口(128个读数/窗口),我们从每128个点的简单平均特征开始

humanActivityData = varfun(@Wmean,rawSensorDataTrain);humanActivityData。activity = trainActivity;

训练一个模型,并使用分类学习器评估其性能

classificationLearner

附加特征提取

T_mean = varfun(@Wmean, rawSensorDataTrain);T_stdv = varfun(@Wstd,rawSensorDataTrain);T_pca = varfun(@Wpca1,rawSensorDataTrain);humanActivityData = [T_mean, T_stdv, T_pca];humanActivityData。activity = trainActivity;

使用新特性来训练模型并评估其性能

classificationLearner

负载测试数据

负载rawSensorData_test

在测试数据上可视化分类器的性能

步骤1:创建一个表

rawSensorDataTest =表...测试,测试,测试,测试...Body_gyro_x_test, body_gyro_y_test, body_gyro_z_test);第二步:从原始传感器数据中提取特征。T_mean = varfun(@Wmean, rawSensorDataTest);T_stdv = varfun(@Wstd,rawSensorDataTest);T_pca = varfun(@Wpca1,rawSensorDataTest);humanActivityData = [T_mean, T_stdv, T_pca];humanActivityData。activity = testActivity;第三步:使用训练过的模型来预测新的传感器数据上的活动确保您已从。导出'trainedClassifier'% ClassificationLearnerplotActivityResults (trainedClassifier rawSensorDataTest humanActivityData, 0.1)