数据预处理

什么是数据预处理?

数据预处理就是清洗和变换原始数据以使其适合分析和建模。预处理步骤包括数据清洗、数据归一化和数据变换。数据预处理的目标是提高下游分析和建模的准确度和效率。

原始数据通常包含缺失值和离群值,这可能会在分析过程中导致错误的结论。您可以使用 MATLAB® 应用数据预处理方法,如填充缺失数据、删除离群值和进行平滑处理,从而使您能够可视化属性,如幅值、频率和周期的性质。

MATLAB 绘制的具有缺失值和离群值的线图。

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

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

原始数据和应用 smoothdata 函数后的预处理数据。(请参阅 MATLAB 代码。)

数据预处理方法

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

数据清洗

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

  • 管理离群值:识别离群值,然后删除离群值,或用统计估计值替换它们
  • 填充缺失数据:识别缺失或无效的数据点,并用插值替换它们
  • 平滑处理:使用移动均值、线性回归和更专业的过滤方法等滤除噪声
24 小时太阳辐射度的线图,突出显示缺失值和数据预处理的需要。

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

经过数据预处理后,太阳辐射度数据的 MATLAB 绘图显示原始数据集中的缺失值已填充。

通过使用 fillmissing 函数填充缺失值进行预处理的太阳辐射度数据。(请参阅 MATLAB 代码。)

数据变换

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

  • 归一化和重新缩放:将不同缩放的数据集标准化为统一缩放
  • 去趋势:去除多项式趋势以增强数据集中变化的可见性
经过去趋势处理后,趋势偏差被消除,去趋势数据不再遵循趋势线。

原始数据、其趋势以及使用 detrend 函数消除趋势偏差后的预处理版本。(请参阅 MATLAB 代码。)

结构操作

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

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

数据预处理和数据类型

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

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

数据预处理的最佳实践

数据预处理不宜采用一刀切的方法。根据数据的特征、机器学习算法和需要解决的问题,采用的方法也有所不同。采用最佳实践有助于选择数据预处理方法:

  • 根据应用定制方法:选择适当的数据预处理方法对于获得可靠和准确的结果至关重要。有效的数据预处理方法通常需要定制以满足不同应用的需求;例如,金融应用与医学成像应用中的方法会有很大不同。通过针对特定应用自定义数据预处理方法,可以强调输入数据中最重要的特征,从而创建高度精确的自定义模型。这种自定义方法可确保数据为分析或建模进行了最优处理,从而产生更准确和有效的结果。
  • 评估影响:正确的数据预处理方法可以提高模型的准确度、效率和可解释性。但在某些情况下,预处理方法也会对模型的准确度产生负面影响,因此在构建模型的整个过程中评估模型的性能非常重要。周期性验证数据预处理步骤的影响可以确保任何调整都有利于整体模型性能。例如,在医疗保健数据分析中,归一化患者实验室测试结果和输入缺失值是数据预处理的重要步骤。这些方法可确保每个测试结果对预测模型的贡献是均等的,并且分析不会因缺失或不成比例的数据而产生偏差,从而获得更准确和可操作的见解。

机器学习工作流中的数据预处理

数据预处理是机器学习管道中至关重要的一步,它可确保数据集是干净的、相关的,并为建模做好准备。经过正确预处理的数据能够通过为机器学习模型提供准确、相关和标准化的输入显著提高机器学习模型的性能。

机器学习工作流:加载原始数据、数据预处理、特征提取、训练模型、评估模型性能和进行预测。

机器学习工作流。

您对数据进行了一般的预处理后,可能还需要在创建和训练机器学习模型之前再采取一些步骤。特征工程是在数据预处理后的步骤,它是将原始数据转换为机器学习所用特征的迭代过程。它包括:

  • 特征提取将原始数据转换为适合机器学习算法的信息,通过保留基本信息来提高模型性能。此步骤可以是利用特定数据类型(如图像、信号和文本)的专业知识的手动过程;也可以是通过算法或深度学习网络的自动过程。例如,小波散射是一种从信号或图像中提取特征的自动方法,可简化从数据到模型开发的推进。
  • 特征变换将现有特征变换为新特征(预测变量),同时删除描述性较差的特征。MATLAB 中提供了几种方法,包括主成分分析 (PCA)、因子分析和 t 分布随机近邻嵌入 (t-SNE),这些方法有助于为模型创建更有意义的特征。
  • 特征选择是一种降维方法,它会选择为建模提供最佳预测能力的特征子集(预测变量)。MATLAB 支持多种方法,如邻域成分分析 (NCA)、最小冗余最大关联 (MRMR)、F 检验和卡方特征选择,从而确保在模型中使用最相关的特征。

针对不同类型的机器学习算法,定制各种数据预处理方法。这些方法是为机器学习模型准备数据的基础,旨在提高不同类型的算法和用例的模型准确度、效率和泛化能力。

预处理方法 目的 适用于机器学习算法
数据清洗 处理缺失数据、删除离群值并更正错误 所有类型
数据标准化和归一化 缩放特征以确保一致性并提高模型性能 所有类型,尤其支持向量机 (SVM) 和神经网络
分类编码 转换分类变量以在算法中使用 神经网络、决策树、森林
特征缩放 调整特征的缩放以进行距离计算和收敛 SVM、神经网络、k 最近邻 (KNN)
特征选择变换 降低模型复杂度,提高可解释性和模型拟合 决策树、森林、回归模型
降维 通过减少变量关注最具信息性的方面 聚类、PCA

使用 MATLAB 进行数据预处理

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

交互功能

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

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

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

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

“数据预处理”工具栏包括用于清洗数据、查找变化点和极值、去除趋势以及归一化和平滑数据的实时任务。

MATLAB 中的“数据预处理”工具栏,包含一组实时任务。

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

“清洗离群数据”实时编辑器任务使用中位数阈值设置来检测离群值,并使用线性插值填充离群值。(请参阅 MATLAB 代码。)

使用 MATLAB 函数

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

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

经过数据预处理后,太阳辐射度原始输入数据的 MATLAB 二维绘图显示了标注的缺失值和离群值。

太阳辐射度原始数据的时间序列图,其中的缺失值和离群值已识别。(请参阅 isnanisoutlier 函数的 MATLAB 代码。)

使用 MATLAB,可以将五种常见的数据预处理方法应用于此原始太阳辐射度数据集。

数据预处理方法 MATLAB 图

应对离群值

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

填充缺失数据

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

平滑数据

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

归一化数据

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

分组

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

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


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