Ebook

第 1 章:

探查数据


本电子书演示在 MATLAB® 中对机器学习算法所用数据进行预处理所涉及的各项任务。

众所周知,机器学习离不开数据预处理。同时想必您也知道,手动处理会是一个繁琐而枯燥的过程。您必须基于特定框架更新预处理脚本,并确保该框架可以快速评估这些变化对机器学习模型准确性造成的影响。

我们在小学数学课上都学过运算顺序,规则简明易记:括号指数,乘除加减。无论问题是数苹果还是计算抵押贷款利率,运算顺序总是相同的,2 * (6+4)2 也总是等于 200。

数据预处理任务的运算顺序却不那么简单。任务执行顺序几乎没有硬性规定,但每个问题都有一些影响运算顺序的特定因素。

预处理数据之前,您必须先了解需要执行哪些预处理任务。您需要通过查询、可视化等方式探查数据以把握工作重点,进而构建以探查引导预处理的迭代工作流程。重复这一过程,直至探查不再产生需要解决的问题为止。

Workflow diagram

为在这一工作流程中持续跟踪迭代,您不妨使用脚本来跟踪预处理运算。这也可以方便您调整预处理步骤的顺序,因为数据预处理的结果可能因步骤先后而异。

以下是一个 MATLAB 数据预处理脚本示例。

section

创建需要预处理的数据

% 创建含噪正弦波并删除部分值,以形成缺失值。

rng default;
t = 0:0.01:5;
y = sin(t) + randn(size(t));
missingIdx = randi([1 length(y)],100,1);
y(missingIdx) = NaN;

% 绘制数据。您可以在绘图中看到间隙,表示该位置数据缺失。

figure;
plot(t,y)
Graph data with gaps
section

预处理缺失值

% 使用 fillmissing 函数以线性插值方法填充数据间隙。

y_filled = fillmissing(y, "linear");

% 将填充数据添加到绘图中。您可以看到,间隙现已填充

hold on;
plot(t, y_filled, ':r')
Graph data with filled gaps
section

使用实时编辑器任务清理缺失数据

您也可以通过实时编辑器任务完成此项预处理。您可以在 MATLAB 工具栏的“实时编辑器 > 任务”下拉列表中找到各种实时编辑器任务。“清理缺失数据”实时编辑器任务显示包含已清理数据及所填充缺失值的绘图。该任务还提供可用于清理数据的各种方法。

section

平滑处理数据

接下来,您可以使用“平滑处理数据”实时编辑器任务对噪声进行平滑处理。应用移动窗口宽度为 1 的高斯滤波器。

在此脚本中,我们在应用平滑处理之前先清理了缺失数据。但是,这种做法未必总是最佳选择。不过,由于脚本记录了所有步骤,我们可以轻松返回并调整代码节的顺序,从而了解预处理顺序变化对结果产生的影响。