在这篇文章中,MLC人工智能提示文章的第二篇,我们将解释如何管理稳健而有意义的数据收集,以训练可以嵌入ST MEMS传感器的机器学习核心的决策树。

1.简介

开发机器学习分类器的通常流程,特别是决策树算法,如下图所示。数据收集和数据标签(用于监督学习)是前两个步骤。然后,使用训练数据(整个数据集的子集)来训练模型。该模型最终在带有机器学习核心的设备上传输和实现,以使用嵌入式硬件进行实时验证测试。

2.收集数据

传感器数据可以使用各种应用程序收集和标记,如PC上的Unico GUI、ST BLE传感器应用程序、AlgoBuilder、FP-SNS-DATALOG1等,以及不同的硬件设备选项,如ProfiMEMS板、SensorTile.Box、Nucleo板和STWIN。
 

正确的数据收集活动的一般指南基于以下几点:

  • 类定义。必须从要识别的类中定义分类问题。还应该澄清当输入不属于任何定义的类时会发生什么。在这种情况下,考虑包含一个“其他/空闲”类以添加到类列表中。

  • 传感器一些分类问题可以通过使用加速度计信号来解决,一些分类问题具有陀螺仪信号,并且一些分类问题需要两个传感器输入。建议启用两个传感器的日志记录,以研究在6轴惯性模块产品的情况下,哪种配置可以提供最佳精度。还可以通过6轴MLC传感器系列中的传感器集线器功能访问3轴磁力计。

  • 传感器配置用于数据记录的各种工具/系统(例如,带有ProfiMEMS板的Unico GUI)允许设置传感器速率(ODR)和满量程(FS):

    • 确保以足够的ODR和带宽收集传感器数据,以捕获所需的信息。带宽表示系统捕获的最大频率信号,通常是ODR的一半。在准确的ODR选择事先不可行的情况下,优选设置高ODR(例如104Hz)以最大化带宽,然后利用抽取/重采样方法。还要考虑的是,定义的配置必须在整个过程中保持,并且ML算法将以相同的方式处理字段数据。

    • 满量程(FS)应根据应用要求进行定义。例如,如果传感器用于车辆或手腕应用,则陀螺仪FS可能非常不同。

  • 数据一致性和平衡.根据应用程序要求和代表实际用例的数据收集足够的数据。如果该应用程序基于手腕设备,则不包括智能手机上记录的数据。为每个类收集相似数量的数据也很重要。机器学习训练算法将试图实现最大的总精度,因此,具有少量数据的类将获得较低的权重,并且模型可能偏向于具有大量数据的类。例如,在极端情况下,如果类“A”有90%的数据,而类“B”有10%的数据,那么模型可以将所有输出分配给类“A’,最终精度为90%,这当然是错误的。

  • 数据记录格式.数据必须以Unico GUI中定义的相同约定记录在文本文件(.txt)中(有关详细信息,请参阅应用程序说明安5259)如果使用其他工具进行数据记录。

在完成第一个数据收集阶段之后,需要进行一系列操作来设置分类问题。数据应为已验证已清洗以避免异常值和不良标记。可视化数据是数据验证、选择特征、标记等方面的良好实践。
 

3.数据可视化

数据可视化可以用于数据的预处理和分析。它还可以用于理解不同特征之间的关系以及不同类别之间的差异。我们可以将这个过程分为时域和频域。主要差异如下图所示。
 

3.1时域可视化

有几个选项可用于可视化收集的数据。如果我们收集[mg]中的加速度计数据和[dps]中的陀螺仪数据,我们可以使用MATLAB/Python/Excel/R生成如下示例所示的图。

在时域中对信号的分析允许:

  • 目视检查任何质量差或异常值。
  • 了解不同类之间是否存在模式。
  • 选择信息特征(平均值、峰间、峰值等)。

3.2频域可视化

频域分析可能有助于补充时域分析。同样的工具(MATLAB/Python/Excel/R)可以用于计算和生成FFT或频谱图。这样的图可以提供关于在信号被处理以计算特征之前在信号上应用滤波器的见解。或者,它们可以用于评估特定记录的日志是否被正确引用。例如,考虑一个“行走”用例的数据日志。利用FFT图,可以验证与处理后的信号相关联的主频率。如果这个频率太高(例如,2.5 Hz),我们可以假设日志应该被引用为“运行”,而不是“行走”。

下一张图片显示了分类问题中考虑的不同人类活动(步行、快走、慢跑、骑自行车)的频谱。

从图中可以看出,每个活动都有不同的主频分量,因此可以应用适当的滤波器来提取每个类别的信息信号。例如,如果我们在1.8Hz下应用低通滤波器,我们可以将步行和快走类与慢跑类分开,慢跑类的特征是在更高的频率下具有更高的能量。
 

4.清洁和标签数据

传感器数据的标记是决策树模型开发的一个关键点。最佳实践是在开始ML训练练习之前进行健全性检查,以验证收集的数据。数据清理是固定或丢弃的过程数据损坏、格式错误或不完整用户可以很容易地可视化和检查,例如平均值、方差、最小值和最大值。如果计算的特征与同一标记类中的日志明显不同(但它们在该应用程序中应该相似),则标记的数据可能不干净。

在大多数项目中,我们了解并收集基本事实当我们记录数据时。通常,只注册一个类就可以启动和停止日志。但是,由于各种原因,可能会在一个记录的日志文件中包含不同的类。在这种情况下,在日志文件被认为准备好进行ML训练之前,数据应该被截断为每个文件有一个类。
再次考虑使用手腕设备进行活动识别的示例。下一幅图显示了运动模式的加速度信号。理想情况下,这个想法是为静止、行走和快速行走课程收集数据。不幸的是,很明显,记录的日志与所有活动混合在一起。用户应该截断日志并正确标记每个子部分,以包括正确的信息作为模型的正确输入。

另一个问题如下所示。记录了行走模式,但在日志的开始和结束处存在固定样本。此外,在日志记录的中间,有证据表明存在未分类的峰值。建议对记录的日志进行注释,以避免错误的训练数据。

所有这些问题都可能影响生成的决策树和MLC结果的性能。让我们总结一下,以下是关于稳健数据收集的一些基本建议:

  • 标记数据的单位应在每个记录文件中保持一致。例如,使用[mg]表示加速度,使用[dps]表示角速度

  • 基于类,使用任何可用的工具(如Python、MATLAB、R)分离数据。或者直接定义一个过程来记录已经清理和截断的数据

  • 删除不属于任何类的数据,或将其用于“其他/空闲”类。