使用智能手机进行人类活动识别2025 年 6 月 20 日 | 19 分钟阅读 HAR(人类活动识别)使用手机或可穿戴设备的数据来识别某人正在进行的身体运动。这个问题很棘手,因为需要处理大量数据;数据不断流动,传感器感知到的东西与实际发生的事情之间的关系往往是间接的。传统方法通过手动创建特征,使用固定的时间窗口和决策树集成等模型,这需要领域知识才能应用。 相反,最近的技术,如循环神经网络 (RNNs) 和一维卷积神经网络 (1D CNNs),在 HAR 任务上取得了创纪录的结果,即使没有特征工程,这使得它们更容易应用于更多情况。 在本教程中,我们将使用智能手机活动识别 (ARUOS) 数据集,该数据集常用于时间序列分类研究。您将掌握以下能力:
理解人类活动识别HAR 意味着使用传感器数据来判断一个人正在进行的活动。通常,此类活动指的是进行典型的运动,例如坐、站、走、跳或在室内上下楼梯。通常,放置在身体某处(通常是可穿戴设备或智能手机)的加速度计传感器会记录沿所有三个轴(x、y、z)的运动数据。 HAR 旨在确保计算机能够分析人类行为并做出适当的响应。 由于没有一套固定的通用规则将传感器信息与活动类型联系起来,因此 HAR 是一个复杂的过程。它还依赖于管理大量时间序列数据,并且在过去,主要由人们通过运用他们对行业的理解来创建特征。 使用深度学习进行 HAR 的数据分析取得了成功,它自动发现有用的模式和特征,因此工程师无需为这些系统设计复杂的输入。 用于活动识别的智能手机数据2012 年,意大利热那亚大学的 Davide Anguita 及其同事创建了智能手机活动识别数据集,该数据集已成为衡量人类活动识别的流行工具。您可以在他们 2013 年的论文《用于人类活动识别的智能手机公共领域数据集》中阅读完整的解释,而他们 2012 年的研究将其建模为多类别、硬件高效的支持向量机 (SVM)。 “UCI 机器学习库”免费提供该数据集。 数据收集数据来自 30 名年龄在 19 到 48 岁之间的参与者。 在进行六项活动时,所有受试者都将三星 Galaxy S II 智能手机佩戴在腰部。
带有加速度计和陀螺仪的智能手机每秒以 50 赫兹的速率收集传感器数据(沿三个轴的加速度数据和沿 x、y 和 z 轴的旋转速度数据)。 每次任务都在手机处于不同位置的情况下进行测试,总是先左后右。 所有活动都通过视频捕获,之后进行双重检查和标记以确保准确性。 数据预处理数据集不包含传感器捕获的所有原始信息。它不发送原始数据;它首先通过一系列步骤处理数据
数据集格式在数据集中,70% 用于训练,30% 用于测试,这种划分基于 20 名参与者(21 名用于训练,9 名用于测试)的数据和 ID,保证每个参与者只出现在一个集合中。 建模的目的是根据工程特征预测未来 2.56 秒内将发生什么活动。 初步结果通过应用适合移动设备的 SVM(采用定点算术),作者在测试集上取得了 89% 的准确率,他们的结果与传统 SVM 实现的结果相似。 这些数据现已成为检查机器学习和深度学习技术在人类活动识别任务中表现的主要指导方针。 下载数据集人们可以通过从 UCI 机器学习库下载智能手机活动识别数据集来获取它。 它以 ZIP 压缩包(58 MB)的形式提供:UCI HAR Dataset.zip 文件。 下载完成后,将所有内容放入您的工作目录中名为“HARDataset”的文件夹中。 文件结构中的文件夹是如何创建的?收集完成后,数据集包含以下内容 一个 README.txt 文件,详细解释了数据集包含的内容以及每个文件的信息。 有一个 features.txt 文件,包含所有 561 个工程特征的描述。 Bin 和 Networking 是两个主要文件夹
每个文件夹内都有一组文档
惯性信号列表在 Inertial Signals 子目录中,您将找到每组(训练/测试)九个文件
每个文件都有以空格分隔的列,并且值在 -1 到 1 之间,如 README.txt 中所述。 本研究的特殊之处本教程将重点介绍 Inertial Signals 文件夹中发现的原始、预处理的传感器数据。这些文件可以直接用于训练机器学习模型,这意味着您无需自己进行特征工程。 将数据加载到数据库我们将在此处编写代码,将 HAR 数据集加载到内存中,以便进行建模。 步骤 1:打开单个文件我们可以通过使用 pandas.read_csv() 并设置 header=None 和 delim_whitespace=True 来加载单个传感器数据文件,因为这些文件是空格分隔且没有标题的 示例用法 输出 (7352, 128) 每行有 128 个样本用于每个特征,这代表一个 2.56 秒的时间窗口。 步骤 2:同时上传多个文件要加载多变量时间序列数据,例如来自同一传感器的 x、y 和 z 轴,我们可以使用 NumPy 的 dstack() 沿着第三轴堆叠数据数组 示例用法 输出 (7352, 128, 3) 步骤 3:加载整个数据集(训练或测试)接下来,我们将使用辅助函数加载一组(训练或测试)的所有九个信号及其对应的活动标签 步骤 4:加载训练集和测试集有了这个功能,我们现在可以加载训练集和测试集。 所有数据点都是 128 个时间步长,由 9 个特征(来自所有传感器轴)组成。每个样本都分配有标准类别中的活动标签。 HAR 数据集类别平衡检查在训练任何模型之前,我们还需要确保数据集是平衡的(即,每个活动类别以大致相同的示例数量表示)。平衡数据集之所以被使用,是因为它有助于避免训练过程中的偏差,或者例如,提供更好的泛化能力。 30 名受试者应该已经完成了所有六项活动。检查此假设还可以确保我们在数据加载步骤中没有遗漏任何内容。 总结类别分布函数我们定义一个辅助函数 class_breakdown(),它
加载标签并检查平衡现在,我们加载训练和测试标签,并单独总结类别分布,然后检查组合的细分。 输出 Train Dataset Class=1, total=1226, percentage=16.676 Class=2, total=1073, percentage=14.595 Class=3, total=986, percentage=13.411 Class=4, total=1286, percentage=17.492 Class=5, total=1374, percentage=18.689 Class=6, total=1407, percentage=19.138 Test Dataset Class=1, total=496, percentage=16.831 Class=2, total=471, percentage=15.982 Class=3, total=420, percentage=14.252 Class=4, total=491, percentage=16.661 Class=5, total=532, percentage=18.052 Class=6, total=537, percentage=18.222 Combined Dataset Class=1, total=1722, percentage=16.720 Class=2, total=1544, percentage=14.992 Class=3, total=1406, percentage=13.652 Class=4, total=1777, percentage=17.254 Class=5, total=1906, percentage=18.507 Class=6, total=1944, percentage=18.876 绘制单个受试者的时间序列数据鉴于人类活动识别 (HAR) 数据集以时间序列作为数据,因此有必要审查原始信号。这证实了数据的质量,并发现了与不同体育锻炼相关的规律性。 数据样本的 50% 传感器读数通过从前一个样本中获取而重复,因此必须小心去除这些重复点。 步骤 1:加载训练数据使用名为 load_dataset() 的辅助函数加载训练集中的所有数据。 步骤 2:加载机身之后,加载您的主题映射。数据集中的每个主题都在不同的行中。文件通过 load_file() 加载,并提取唯一主题。 步骤 3:从单个主题数据中获取信息有一个名为 data_for_subject() 的函数,它过滤数据集以仅提供来自已保存主题的样本。 步骤 4:组合重叠窗口以创建一条平面序列因为我们不想要重复内容,所以我们使用 to_series() 将每个窗口的第二部分转换为一维序列。 步骤 5:显示每个传感器通道及其记录内容的图表plot_subject() 函数创建了 10 个垂直堆叠的子图
完整示例 输出 ![]() 绘制每个受试者的直方图在这项工作中,一些个体的数据用于训练,其他受试者的数据用于测试。确保所有受试者的传感器数据彼此相似,特别是由于原始数据已标准化为 -1 到 1 之间。 受试者的相似活动应该产生几乎相同的传感器信号。通过查看多个受试者中所有传感器通道的直方图,我们可以更好地检查这一点。 此函数为每个受试者绘制一个直方图,显示他们某种传感器类型(如总加速度)的数据分布情况。对于每个主题
示例 输出 ![]() 绘制每个活动的直方图了解运动数据区分不同活动能力的一种方法是检查当受试者在活动之间切换时数据模式如何变化。 如果数据点的分布因活动而异,则意味着模型很可能会发现它们之间的差异。 我们可以在以下情况下做到这一点
它向我们展示了当一个人从一项活动切换到另一项活动时,即使是同一个人参与了这两项活动,传感器信息也会如何变化。 步骤 1:按活动分组数据此函数接收 XData 并对其进行组织,以便每个活动 ID 都链接到正确的数据窗口。 步骤 2:为每个活动制作直方图示例 输出 ![]() 绘制活动持续时间箱线图理解活动数据取决于检查每个人活动标签的平衡程度。 如果受试者使用某些活动比其他活动多得多,模型可能会偏向频繁的活动。 这可以通过以下方式进行检查 我们跟踪每个受试者进行每项活动的数据窗口(样本)数量。 下一步是将数据显示为箱线图,它说明了
示例 输出 ![]() 建模方法本节阐述了使用活动识别数据集的重要策略,并按项目的主要组成部分(如问题框架、数据准备、模型构建和评估)对它们进行分组。 问题框架目标是根据从其他数据集学习到的运动窗口来判断受试者正在做什么。这种测试方式类似于人们实际使用应用程序的方式。框架的其他方法可以是只使用一个时间点、一系列窗口或注意到活动转换。有些可视化可能不完全正确,但它们在查看数据时提供了有用的线索。 数据准备尽管数据是 [-1, 1],但仍然存在有用的预处理技术。您需要标准化或规范化您的信号(对于每个受试者或全局),选择要保留的特征(按轴或传感器类型),并消除异常值。通过过采样或欠采样以及平衡采样率来改变样本数量是提高学习能力的另一种方法。 预测建模这是一个处理时间序列数据的多类分类问题。最初的工作开始于使用工程特征和 SVM 进行比较。其他值得尝试的机器学习方法包括常规机器学习算法、MLP、1D CNN、LSTM 和混合风格,如带有 LSTM 的 CNN,特别是用于处理原始数据。 模型评估数据集最初被划分为 70% 用于训练,其余用于测试。更好的交叉验证方法是按受试者划分,因为这允许分析所有受试者。准确率和混淆矩阵应该是评估的一部分,因为这些显示了哪些活动被错误地分类为其他活动。 结论您使用智能手机活动识别数据集对时间序列数据进行分类,并了解了如何为建模准备数据。您能够下载和加载运动数据集,并使用折线图、直方图和箱线图来查看数据的结构和排列。最后,您掌握了如何在建模过程中继续前进的技能,这意味着构建问题、准备数据、选择最佳模型并评估其结果。 下一主题机器学习的数据结构 |
我们请求您订阅我们的新闻通讯以获取最新更新。