Ebook

第 3 章

MATLAB 预处理 App


上一章讨论了如何使用 MATLAB 命令和实时编辑器执行常见的预处理方法。不过,MATLAB 还专门设计了一些 App,能将任务化繁为简。本章将介绍两个 App,它们分别适用于时间序列数据处理和参数方程数据清理,在数据探查和预处理方面很有帮助。

section

使用 Signal Analyzer 预处理数据

为顺利训练机器学习模型,您需要预处理时序数据并使用重要特征,这其实会降低信号数据的维度和变异性。

为时序数据创建预处理脚本时,较好的做法是首先选取一部分信号来代表数据集整体。

Signal Analyzer 可为您简化接下来的操作:

  • 探查数据
  • 确定合适的预处理方法
  • 创建或更新脚本,以针对完整数据集运行

探查时序数据

了解数据的第一步是可视化。Signal Analyzer 不仅能帮助您一次查看多个信号并识别模式,还能同时在时域、频域和时频域探查信号。

要使用此 App,请展开 MATLAB 工具条中的 APP 选项卡,或在 MATLAB 命令行窗口中键入 signalAnalyzer.

注意:将数据用于 Signal Analyzer 之前,您必须先清理缺失数据。请参阅下一节了解如何处理缺失数据。

下面是同一信号的三个副本。每个副本分别使用高通、带通和低通滤波器进行预处理。您可以在时域和频域中查看每个信号处理后的形态及原始信号频谱图。

使用 Signal Analyzer 时,您需要先清理缺失数据。此外,Signal Analyzer 会将时间表中的数据视为持续时间,当前采用日期时间格式的数据会被转换为持续时间。

若要使用存储为日期时间数组的时间值分析时间表,请从所有其他元素中减去第一个元素,从而将该数组转换为相对持续时间数组。以下示例创建了一个行时间采用日期时间格式的时间表,并将其转换为 Signal Analyzer 可读的时间表。

Tt = timetable(datetime(2016,11,9,2,30,1:10)',randn(10,1));
dt = tt.Time-tt.Time(1);
tn = timetable(dt,tt.Var1);

尝试完整示例:

确定合适的预处理技术和方法

探查数据有助于发现需要应用的预处理方法。推荐的做法是创建一个信号副本,以便了解预处理任务对信号产生的影响。

下面是两项预处理任务:

  • 通过重采样创建统一数据,该任务通常在数据清理早期阶段执行
  • 通过平滑处理发现数据模式,该任务在重采样后执行

时序数据并不总是均匀采样的。传感器可能以不同的间隔记录信号,也可能仅在由事件触发时进行记录。在这些情况下,采样率可能出现剧烈波动。还有一些情况下,您可能需要处理多个采样率各不相同的规则采样信号。无论具体情况究竟如何,针对数据进行重采样并生成均匀采样信号将大幅简化后续任务。

获取均匀采样信号后,您可以应用多种信号处理算法完成以下任务:

  • 提取特征,将数据用于各种机器学习算法
  • 将信号数据变换为时频图(例如频谱图和小波变换),以用于可视化,或用于支持二维数据表示的模型
  • 识别关注(和非关注)区域

在 Signal Analyzer 中,信号重采样是一项十分简单的任务。将要使用的数据从工作区浏览器拖放到信号表显示。右键单击信号并定义时间值,描述所选信号的采样率、采样时间或时间值向量。

这个简单示例使用的是非均匀采样数据(连续六周每天采样一次)。请参阅此示例的完整文档

 

分析器选项卡中,展开预处理库,单击重采样图标。Signal Analyzer 使用 Signal Processing Toolbox™ 函数 函数 resample 进行重采样。

Anazlyzer menu

如果数据并非均匀采样,则可以使用此 App 基于均匀网格对其插值,需要指定方法(线性插值、保形分段三次插值或三次样条插值)和采样率。

如果希望查看采用其他插值方法或重采样设置的处理效果,请单击撤消预处理,然后再次对信号进行重采样。

对于均匀采样的信号,可以使用该 App 更改采样率。您可以指定所需的采样率,也可以指定所需的信号插值或抽取因子。

平滑处理不仅有助于发现数据模式,还能通过滤波舍去不重要的信息。平滑处理的目标是消除数据噪声成分,让缓慢的变化和趋势更为明显。

比如,您在一个整月内每小时采集一组温度读数,以摄氏度为单位。

您可以使用移动平均滤波器和重采样隔离一天中不同时段导致的周期性分量对每小时温度读数的影响,并消除开环电压测量所产生的线路噪声。

您可以看到一天中的时段对温度读数的影响。如果您希望了解这个月每天的温度变化,则每小时波动只会产生噪音,可能导致难以辨别每天的变化。您可以在 Signal Analyzer 的预处理部分选择平滑函数,快速消除一天中的时段带来的影响。

有八种平滑处理方法可供选择,如上图所示。

您可以查看使用移动均值和默认设置对信号图线产生的影响。

有关如何以编程方式完成此操作的说明,请参阅 信号平滑处理示例.

 

smoothed termperature readings

创建或更新脚本,以针对完整数据集运行

当您最终确定希望对整个数据集应用的预处理技术时,可以在分析器选项卡中单击生成函数

MATLAB toolstrip

此操作会将您应用的所有预处理任务以单个函数形式生成代码,您可以将其保存为 MATLAB 脚本。现在,您可以借助这一 MATLAB 小程序对所有相关数据记录迭代应用该函数,从而对任意大型数据集执行自动预处理。

MATLAB example
section

Curve Fitting

要在 MATLAB 中清理离群值,另一种方法是使用 Curve Fitting。有时,我们或许能够使用参数方程较好地逼近数据所捕获的底层过程。在这种情况下,您可以使用曲线拟合对数据进行方程拟合,然后通过检查残差来识别离群值。

在前文涉及资历与年龄的调查示例中,我们发现缺失数据在高龄段较为普遍。假设绘制年龄与资历相对应的图,并使用移动均值填充缺失数据,可以合理预期的是,线性拟合将取得良好效果。为检验这一结果,您需要针对每个变量建立数组(需要先完成数据清理),即生成一个受访者年龄的 499x1 双精度数组和一个受访者资历的 499x1 双精度数组。

首先,在 MATLAB 工具条中打开 Curve Fitting:

Curve fitting on the tool strip

用户界面将在新窗口中打开。用户界面的左上方是下拉菜单,用于选择希望绘制的对象。工作区中现有的变量将决定此处可选的变量。

顶部中央的下拉菜单提供了一系列对数据进行曲线拟合的方法。在本例中,线性拟合取得了良好效果。视图 (View) 菜单下有一个选项可绘制残差,从而生成图示的第二个绘图。结果较为符合预期。年龄越小,资历差异越小;20 岁的年轻人很难拥有 15 年工作经验。相反,随着年龄的增长,拟合曲线的波动越来越大。

您可以尝试对数据进行不同的拟合;确定数据绘制方法后,选择文件 (File) > 生成代码 (Generate Code) 创建函数,以便随后添加到预处理脚本。

您也可以使用此 App 选择并排除离群值,查看删除离群值对拟合模型的影响。

代码生成

完成一些初步数据清理后,您可以尝试将数据用于算法。您有必要就数据是否需要进一步预处理得到快速反馈。

重复过程

针对机器学习算法清理数据是一个迭代的过程。您通过探查数据来确定所需的预处理方法,执行方法,然后查看算法基于这些数据运行的效果。如果模型准确性不佳,您可能需要返回查看是否需要执行进一步的预处理。

您可以跟随 数据科学:预测天气事件灾害损失 这一示例亲自尝试,也可以观看本视频为您演示该示例的中的预处理步骤。