数据预处理

什么是数据预处理

数据预处理就是清洗和变换原始数据以使其适合分析和建模。原始数据通常包括缺失数据、离群值和其他不一致之处,如格式问题。预处理步骤包括数据清洗、数据归一化和数据变换。数据预处理的目标是提高下游分析和建模的准确度和效率。

MATLAB® 提供 App 和函数来预处理输入数据,使其适用于统计建模、机器学习算法和其他数据驱动的应用。

图 1 显示包含缺失值和离群值的原始数据,这可能会在分析时导致错误的结论。图 2 显示应用了三种不同数据预处理方法(填充缺失数据、删除离群值和平滑处理)后的相同数据。改进后的数据质量现在突出显示了诸如幅值、频率和周期性等属性。

包含缺失值和离群值的原始数据集的 MATLAB 图。

图 1. 包含缺失值和离群值的原始数据的 MATLAB 图。

MATLAB 图,显示使用数据预处理方法(如填充缺失数据和删除离群值)进行平滑处理前后的数据。

图 2. 原始数据和应用 MATLAB 中的 smoothdata 函数后的预处理数据。

数据预处理方法

数据预处理方法可以分为三大类:数据清洗、数据变换和结构化操作。您可以按照任何顺序以迭代方式执行这些步骤。

数据清洗

数据清洗是使用以下示例方法解决数据集中异常情况的过程:

  • 管理离群值:识别离群值,然后删除离群值,或用统计估计值替换它们。
  • 填充缺失数据:识别缺失或无效的数据点,并用插值替换它们。
  • 平滑处理:使用移动均值、线性回归和更专业的过滤方法等滤除噪声。
具有缺失值的太阳辐射度原始输入数据时间图,在 MATLAB 中绘制。

图 3. 太阳辐射度原始数据集的时间序列图,包括缺失值。

在原始数据集中填充缺失值后太阳辐射度数据的 MATLAB 图。

图 4. 通过使用 MATLAB 中的 fillmissing 函数填充缺失值进行预处理的太阳辐射度数据。

数据变换

数据变换是通过使用以下示例操作将数据集修改为首选格式的过程:

  • 归一化和重新缩放:将不同缩放的数据集标准化为统一缩放
  • 去趋势:去除多项式趋势以增强数据集中变化的可见性
MATLAB 图:识别原始数据的趋势,并使用去趋势数据预处理方法消除趋势偏差。

图 5. 原始数据、其趋势以及使用 MATLAB 中的 detrend 函数消除趋势偏差后的预处理版本。

结构操作

结构操作通常用于数据集的合并、重组和分类,包括:

  • 联接:使用公共键变量按行合并两个表或时间表
  • 堆叠和分叠:重构多维数组以合并或重新分布表中的数据,使其更易于分析
  • 分组和分 bin:重新组织数据集以提取有价值的见解
  • 计算透视表:将大型表格数据集分解成子表以聚焦信息

数据预处理和数据类型

根据数据类型的不同,数据预处理步骤可能会有所不同。以下是三个不同数据预处理方法的示例,适用于各种数据类型。

时间序列数据 表格数据 图像数据
您可以执行各种数据清洗和预处理任务,例如删除缺失值、过滤、平滑以及同步具有不同时间步的带时间戳的数据。 当表中有杂乱数据时,您可以通过填充或删除缺失值和以不同顺序重新排列表行和变量对表数据进行清洗。 数据预处理对于涉及图像的应用很有用,包括 AI。您可以通过调整图像大小或裁剪图像,甚至是增加深度学习模型的训练数据量来预处理数据。

 

 

 

 

 

预处理和探查带时间戳的数据 清洗表中的杂乱和缺失数据 为深度学习预处理图像

使用 MATLAB 进行数据预处理

正确的预处理方法选择并不总是显而易见。MATLAB 提供交互功能(App 和实时编辑器任务)和高级函数,让您可以轻松尝试不同方法并确定哪种方法适合您的数据。使用不同配置进行迭代并选择最佳设置将有助于您为进一步的分析准备数据。

交互功能

数据清洗器是一款独立的交互式工具,无需编写代码即可预处理时间序列数据。图 6 显示如何导入数据,然后清洗数据、填充缺失数据并删除离群值。然后,您可以将修改后的数据保存到 MATLAB 工作区以供进一步分析。您还可以自动生成 MATLAB 代码来记录您的步骤,并在以后重现它们。

图 6. 使用 MATLAB 中的数据清洗器来探查和清洗时间序列数据。

实时编辑器任务采用简单的点击式界面,您可以将其直接添加到脚本中以执行一组特定操作。您能够以交互方式对这些任务进行配置,以遍历不同设置并为应用确定最佳配置。与数据清洗器一样,您也可以自动生成 MATLAB 代码来重现您的工作。

您可以使用一系列实时编辑器任务,例如清洗缺失数据清洗离群数据归一化数据等,通过在每个步骤可视化数据以交互方式对数据进行预处理。

MATLAB 中数据预处理工具栏的截图,显示一组可用的实时任务。

图 7. MATLAB 数据预处理工具栏,具有一组实时任务。

“清洗离群数据”任务的截图,其中输入数据设置为 A,清洗方法设置为通过线性插值填充离群值,检测方法设置为中位数,生成的图显示两个填充的离群值。

图 8.“清洗离群数据”实时编辑器任务使用中位数阈值设置来检测离群值,并使用线性插值填充离群值。

使用 MATLAB 函数

MATLAB 提供数千个高级内置函数,用于常见的数学、科学和工程计算,包括数据预处理。

您可以通过在 MATLAB 中可视化原始数据集来开始对其的探查。图 9 显示包含缺失值和离群值的原始数据。数据集采集了一个典型自然日的太阳辐射度。恶劣的天气条件可能会干扰无线遥测传输,导致原始数据集不完整。

太阳辐射度原始输入数据的 MATLAB 二维图,突出显示了缺失值和离群值。

图 9. 太阳辐射度原始数据的时间序列图,其中的缺失值和离群值已识别。

下面是五种常用的数据预处理方法,我们用 MATLAB 将其分别应用于图 9 所示的原始太阳辐射度数据集。

数据预处理方法 MATLAB 图

处理离群值值:

遥测数据中的异常值显示为离群值。使用 filloutliers 删除离群值。您可以指定确定离群值的方法,以及用来估计替换离群数据点的值的填充方法。

 

 

填充缺失数据:

通信丢失会导致遥测数据丢失。使用 fillmissing 将数据集中的 NULL 值替换为估计值。您可以指定基于插值或移动窗的方法来估计缺失值。

 

 

平滑数据:

使用 smoothdata 去除含噪太阳辐射度数据。您可以选择并指定最适合数据的平滑方法。

 

 

归一化数据:

使用 normalize 函数,很容易观察到,在该数据集中超出 50% 的峰值太阳辐射度发生在上午 8 点到下午 4 点之间。

 

 

分组:

使用 retime 以 4 小时为间隔对太阳辐射度数据分组,以确定这些时间跨度内的平均太阳辐射度。

 

 

数据可能杂乱,但数据预处理方法可以帮助提高数据质量,为进一步的分析准备数据。有关详细信息,请参阅以下资源。

另请参阅: 数据清洗, 使用 MATLAB 进行数据分析, MATLAB 图形