社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

数据科学家必备的5种数据预处理技术:机器学习的支柱

新语数据故事汇 • 4 月前 • 250 次点击  

在机器学习中,从原始数据到经过优化的模型的路径由数据预处理技术铺就,这些数据预处理的技术为成功奠定了基础。数据科学家和机器学习工程师通常花费大量时间准备数据,因为干净、结构良好且经过精心设计的数据能够显著提升模型的性能和洞察力。

“垃圾进,垃圾出。”这是每位数据科学家必须理解的重要原则。接下来,我们将探讨每个数据科学家必须掌握的五种关键预处理技术:处理缺失数据、缩放与规范化、编码分类数据、特征工程和处理不平衡数据。这些主题对于将杂乱的真实数据集转化为机器学习算法可以有效学习的形式至关重要。

1. 处理缺失数据

缺失数据是现实世界机器学习项目中不可避免的挑战。数据集经常由于传感器故障、人工错误或其他原因而出现缺失值。如果处理不当,缺失数据可能导致模型预测偏差、误导性见解,甚至训练失败。在训练任何模型之前,务必以保留数据集完整性的方式处理缺失值。

本节将将探讨诸如逐行删除、均值/众数插补以及多变量插补等策略。

缺失数据的类型:

  • 完全随机缺失 (MCAR):缺失数据点的概率与任何其他观察到或未观察到的样本无关。在这种情况下,删除数据可能不会引入偏差,因为它是随机的。

  • 随机缺失 (MAR):数据点的缺失与其他观察到的变量有关,但与缺失值本身无关。这在调查或人口统计数据集中很常见,例如缺失的收入数据可能与教育水平相关。

  • 非随机缺失 (MNAR):缺失与未观察到的数据本身相关。例如,高收入者可能不愿透露自己的收入,这如果处理不当会导致数据集的偏差。

策略 1:逐行删除(移除缺失数据)

处理缺失数据的最简单方法是删除包含缺失值的行。虽然这种方法适用于缺失条目较少的小数据集,但对于缺失数据频繁的大数据集而言,它实用性较低,因为会导致有价值信息的损失。

最佳实践:谨慎使用逐行删除。当缺失数据是完全随机缺失(MCAR)时,才适合使用此方法,或者在删除行不会对数据集的完整性产生重大影响时使用。

策略 2:插补方法(填补缺失数据)

如果无法删除数据,可以使用统计指标(例如均值、中位数或众数)来插补(即填补)缺失值。插补允许模型利用所有可用信息,确保不会丢弃任何数据。

通常使用该列观察值的均值(或中位数)来插补数值数据。当数据呈对称分布时,这种方法效果良好,但在偏态分布中可能会引入偏差。

最佳实践:均值插补对于偏态较小的数值数据是有效的。对于偏态数据,考虑使用中位数进行插补。

策略 3:类别数据的众数插补

无法使用均值对类别数据(例如,性别或国家)进行插补,要使用众数。因此,我们用出现频率最高的类别填补缺失值。

最佳实践:众数插补适用于类别数据,特别是性别或国家等特征,其中最频繁的值具有实际意义。

策略 4:高级技术 — 链式方程的多元插补(MICE)

简单的插补方法如均值或众数可能会引入偏差,特别是在复杂数据集中。在这种情况下,我们可以使用链式方程的多元插补(MICE)。该技术基于多个特征之间的关系来预测缺失值。

MICE 迭代地将每个有缺失值的特征建模为其他特征的函数,使用回归或其他预测模型。这种方法更加准确,并更好地考虑数据的结构。

最佳实践:在特征之间存在复杂相互依赖关系的数据集中使用 MICE,特别是在简单插补可能引入偏差时。

处理缺失数据是预处理过程中的关键步骤。虽然逐行删除在某些情况下可能有效,但通常需要插补缺失值以保留数据集中有价值的信息。根据数据的特性,选择合适的插补策略;可以选择简单的均值/众数插补方法,或者使用 MICE 等高级方法以获得更高的准确性。

关键要点:

  • 对于缺失值较少的小数据集,可以使用列表删除。

  • 对于数值型数据,使用均值/中位数插补;对于分类数据,使用众数插补。

  • 对于更复杂的数据集,考虑使用高级方法(如 MICE)。

合适的插补策略能够保持数据集的完整性,并为构建稳健的机器学习模型奠定坚实基础。

2.缩放和归一化

许多机器学习算法,特别是涉及基于距离的度量(例如 k 最近邻或支持向量机)或基于梯度的优化器(例如逻辑回归和神经网络),假设特征在相似的尺度上。

当特征的范围差异较大时(例如,一个特征的范围为 [0, 1],而另一个特征的范围为 [1,000, 100,000]),可能会误导这些算法,因为它们会不成比例地权衡特征。

可以通过应用缩放和归一化来解决这个问题。这些方法根据数据分布和机器学习模型的不同,调整特征值。

缩放和归一化主要区别:

  • 归一化通常指将数据重新缩放到特定范围内,通常是 [0, 1]。当数据不符合高斯分布时,通常会使用此方法。

  • 缩放(又称标准化)是指调整值的分布,使其均值为 0,标准差为 1。它通常适用于符合高斯(即正态)分布的数据;在依赖梯度下降的算法中(例如逻辑回归或神经网络)常常使用。

为什么缩放很重要?某些算法对输入特征的相对尺度非常敏感:

  • 基于距离的算法,如 k 最近邻和 k-means 聚类,假设特征具有相似的尺度,因为它们依赖于欧几里得距离。如果一个特征的范围比其他特征更大,它将主导距离度量。

  • 基于梯度的算法,如神经网络和逻辑回归,受益于标准化数据,以防止梯度下降振荡并缓慢收敛。

  • 其他算法(例如决策树)不受缩放影响,因为它们基于不依赖于距离度量的分裂标准。

Min-Max 归一化

Min-Max 是最简单且使用最广泛的归一化方法,它将特征值重新缩放到一个固定范围,通常是 [0, 1],具体使用以下公式:

Z-Score 标准化(标准缩放)

当数据遵循高斯分布或其期望值接近零时,Z-Score 标准化更为合适。为什么使用 Z-Score 标准化?

  • 确保每个特征对模型的贡献是均等的。

  • 对于假设数据呈正态分布的算法非常有帮助。

Min-Max 标准化最适合在以下情况下使用:

  • 数据不遵循正态分布。

  • 模型对数据范围有假设(例如,使用像 sigmoid 或 tanh 的神经网络激活函数,期望输入在特定范围内)。

  • 希望保留最小值和最大值之间的关系,并且存在明确的上下限。

另一方面,Z-Score 标准化更适合在以下情况下使用:

  • 数据遵循高斯(即正态)分布。

  • 使用诸如逻辑回归、支持向量机或神经网络等模型,这些模型假设输入标准化以获得最佳性能。

  • 需要特征围绕零中心,这可以防止梯度下降中出现慢收敛的问题。

潜在陷阱与最佳实践

  • 离群值:如果数据包含显著的离群值,Z-score 标准化可能会过度放大它们的影响,因为它依赖于均值和标准差。在标准化之前考虑去除离群值或应用稳健的缩放技术。

  • 数据泄露:始终在训练数据上拟合缩放器,然后再将其应用于测试集。这可以防止数据泄露,即测试集的信息影响训练过程。

缩放和标准化至关重要,缩放和标准化是许多机器学习算法的重要预处理步骤。Min-Max 标准化在保留数据关系方面表现出色(例如,在图像数据或神经网络中);Z-Score 标准化适用于需要特征具有相似统计特性的基于距离或基于梯度的模型。

关键要点:

  • Min-Max 标准化将数据重新缩放到固定范围,通常为 [0, 1],并且对输入的相对大小敏感的模型非常有用。

  • Z-Score 标准化将数据围绕零中心,并调整方差,这对基于梯度下降的算法至关重要。

  • 始终根据数据分布和特定的机器学习算法选择缩放技术。此外,在定义值的范围时,确保上下限不是固定的,或者在应用 Min-Max 标准化时至少可以约束(即,在推断时给出的输入如果超出训练期间定义的范围,可能导致不可预测的模型行为)。

通过正确应用这些技术,可以确保模型具有最佳学习基础,从而提高性能和更好的泛化能力。

3.编码分类数据

大多数机器学习算法,特别是基于数值计算的算法,期望输入为数值。然而,现实世界的数据集往往包含分类数据——如性别、国家或产品类型——在训练机器学习模型之前,必须将其转换为数值形式:编码。

挑战在于确保编码能够正确捕捉分类变量之间的关系,而不引入偏差。例如,给类别分配任意数字可能会无意中暗示它们之间存在某种排序,无论这种排序是否真实存在。

接下来,我们将探讨几种编码技术,如标签编码(Label Encoding)和独热编码(One-Hot Encoding),并讨论每种方法最适合的情况。我们还将提及更高级的技术,如目标编码(Target Encoding)。

标签编码

标签编码为每个类别分配一个唯一的整数。尽管这种方法简单,但它主要适用于有序变量(类别具有内在顺序)。对于无序变量(类别没有顺序),它可能引入意外的有序关系。

education: {'高中': 0, '本科': 1, '硕士': 2}

标签编码通常在分类变量具有有序关系时使用(即类别具有内在排名,例如 [低、中、高])。在这种情况下,数值编码保留了顺序。通过明确定义顺序,编码值保持数据中的固有排名,这对可能将数值视为具有相对意义的模型至关重要。这确保编码正确反映特征的有序性质,并支持有意义的模型训练。

对于名义(无序)变量,谨慎使用标签编码,因为它可能引入虚假的顺序感。

独热编码(One-Hot Encoding)

这种方法将每个类别转换为一个新的二进制列(或特征)。每一列对应一个特定的类别,如果该类别存在,则标记为1,否则标记为0,适用于名义变量。

独热编码适用于名义(无序)变量(例如,性别、国家或颜色)。这种方法避免了引入错误的顺序关系。需要注意的是,独热编码可能会显著增加数据集的维度,尤其是在你有很多独特类别时。

独热编码适用于具有少量独特类别的数据集。然而,当应用于具有许多独特值的列时,它可能会显著增加数据的维度,使得模型更容易过拟合或训练成本更高。

高级编码技术:目标编码

这种方法根据每个类别的目标变量的均值对类别进行编码。在类别特征具有许多级别的情况下非常有用,但如果处理不当,可能会引入过拟合。

目标编码何时使用:

  • 当分类变量有许多独特类别(例如,邮政编码、产品 ID 或用户名)时,可以使用目标编码。

  • 此方法将分类值替换为每个类别的目标变量均值,使模型能够捕捉模式,而不会显著增加特征数量。

注意:如果不小心,目标编码可能导致过拟合,尤其是当模型能够记住类别与目标之间的关系时。为降低这种风险,应该应用交叉验证或正则化等技术。

目标编码的公式:每个类别的目标均值被用作编码。

最佳实践:在使用目标编码时始终应用交叉验证,以避免过拟合。一种常见策略是在训练数据上计算目标编码,并将其应用于验证/测试集,以确保没有数据泄漏。

选择合适的编码策略

编码分类数据是机器学习中的一个关键预处理步骤。正确的编码策略取决于你的分类变量的性质。我们讨论的三种传统技术如下:

  • 标签编码(Label Encoding)适用于类别具有自然顺序的有序变量。

  • 独热编码(One-Hot Encoding)是处理少量唯一类别的无序变量的最佳选择。

  • 目标编码(Target Encoding)是针对高基数分类变量的更高级解决方案,但应谨慎使用以避免过拟合。

编码的关键要点:

  • 始终仔细选择编码方法,以保持分类变量的特性。

  • 独热编码灵活多用,但对于大类别集可能会导致维度问题。

  • 对于大数据集,考虑使用目标编码,但应采取技术避免过拟合。

通过应用适当的编码方法,你可以确保你的机器学习模型充分利用分类数据,同时避免常见的陷阱。

4.特征工程

特征工程通常被视为机器学习的核心,在这里,领域知识和创造力交汇,将原始数据转化为有意义的输入,从而提高模型性能。原始数据在其初始形式下,可能不适合直接输入机器学习算法。特征工程使我们能够从数据中提取额外的洞见和关系。

本节将探讨一些关键的特征工程技术,例如创建多项式特征、生成交互项、使用对数变换处理偏态数据,以及对连续变量进行分箱处理。

多项式特征

多项式特征使机器学习模型能够捕捉特征与目标变量之间的非线性关系。通过添加高阶项,如 or x₁*x₂,我们可以提高模型学习数据中复杂模式的能力。

在数学上,给定一个特征 x,二次多项式特征为:

  • 新特征=

对于两个特征x₁ 和 x₂,交互项为:

  • 交互项=x₁*x

我们将生成多项式特征,以捕捉原始特征之间的交互作用。可以使用 scikit-learn 的 PolynomialFeatures 来生成特征的多项式和交互项。

对数变换

对数变换有助于管理偏斜数据,这是现实世界数据集中常见的现象。像收入、房价和人口规模这样的特征通常具有长尾分布,应用对数变换可以使这些分布更加对称,从而提高模型性能。

当一个特征高度偏斜时,对数变换可以使分布归一化,使其更适合机器学习模型。例如,收入或人口数据通常有明显的右偏。应用对数变换可以压缩大值并拉伸小值,从而减少偏斜:

  • 对数变换特征 = log(x + 1)

为了避免取零的对数,常数1被添加到公式中。

分箱

分箱是将连续变量划分为区间(即箱)。当你想简化数据或创建有意义的分组时,这种方法非常有用。通过将特征转换为类别(例如,低、中、高),该技术限制了特征的范围,使数据更易于解释。

在这里,我们将房价分成三类:低、中和高。当模型可能更从简化的分类值中受益而不是连续值时,这种方法会很有用。

处理高基数特征的特征哈希

另一个常见的问题是当特征具有许多独特类别(即高基数),例如邮政编码、产品ID或用户ID。在这种情况下,使用传统的独热编码可能会大幅增加数据集的维度,导致内存效率低下和更长的计算时间。我们可以使用特征哈希(即哈希技巧)来降低维度并保留重要的数据模式。

特征哈希使用哈希函数将类别转换为整数,并将它们分配到固定数量的“桶”(即列)中。这种方法避免了创建成千上万甚至数百万个独热编码列。

特征工程的力量

特征工程是机器学习工程师工具箱中最强大的工具之一。通过将原始数据转换为更好地代表潜在关系的特征,我们使模型能够更有效地学习并做出更准确的预测。无论是创建多项式特征、规范化偏斜数据还是对连续变量进行分箱,特征工程在提高模型性能方面发挥着关键作用。

关键要点:

  • 多项式特征通过引入高阶项和交互项,使模型能够捕捉非线性关系。

  • 对数转换通过规范化数据来处理偏斜,使其更适合机器学习算法。

  • 分箱将连续变量转换为类别区间,简化数据并提高可解释性。

  • 特征哈希是一种处理高基数类别变量时减少维度的有效技术。

通过掌握这些技术,您可以显著提高模型的准确性和鲁棒性,帮助将原始数据转化为可操作的洞察。

5. 处理不平衡数据

在实际的机器学习应用中,不平衡数据是最常见的挑战之一。不平衡数据指的是在数据集中,一个类或标签的数量明显多于其他类。例如,在欺诈检测中,欺诈交易的数量通常远小于非欺诈交易。如果不加以处理,这种不平衡可能导致模型在多数类上表现良好,而在少数类上表现不佳。

不平衡的数据集可能使模型对多数类产生偏见,因为错分类少数实例的成本在实例中要小得多。因此,采用考虑这种不平衡的技术是至关重要的,以确保模型能够准确捕捉少数类和多数类。

本节将介绍处理不平衡数据的各种技术,包括过采样和欠采样等重采样方法、类别加权以及高级的合成少数类过采样技术(SMOTE)。

技术 1:类别加权

类别加权是一种标准方法,适用于允许您为少数类分配更高权重的模型。通过这样做,模型将少数类中的错误视为更有成本,从而鼓励模型从少数示例中学习。

许多机器学习算法,如逻辑回归、支持向量机(SVM)和决策树,都具有 class_weight 参数,可以设置为平衡(balanced)。该参数会根据每个类别的频率自动调整权重。类权重提高了对少数类的召回率,确保模型更加关注少数实例。

技术 2:随机过采样

随机过采样涉及复制少数类的实例以平衡数据集。这是一种简单有效的方法,但如果模型开始记忆重复的实例,可能会导致过拟合。

少数类现在与多数类达到平衡。然而,过采样可能会引入过拟合,尤其是在少数类示例被多次重复的情况下。

技术3:随机欠采样

随机欠采样涉及移除多数类的实例,以平衡数据集。虽然这种方法可能导致丢失多数类中的有价值数据,但它有助于减少训练时间和内存消耗,特别是对于大型数据集。

随机欠采样通过减少多数类的实例数量来平衡数据集。当多数类的数量明显多于少数类时,这种方法是合适的。

技术 4:合成少数类过采样技术(SMOTE)

SMOTE 是一种先进的过采样技术,通过在现有实例之间插值来创建少数类的合成实例。与随机过采样相比,这种方法生成了更多样化的少数类示例,降低了过拟合的风险。

SMOTE 的数学解释:给定一个少数类实例 xᵢ,SMOTE 通过从其 k 个最近邻中随机选择一个实例 x_{neighbor},并生成新的样本:


其中 λ 是介于 0 和 1 之间的随机数。

SMOTE 创建新的合成少数类样本,平衡数据集,同时避免随机过采样带来的过拟合风险。

模型在不平衡数据上的评估

如前所述,在处理不平衡数据集时,使用适当的评估指标来反映模型在两个类别上的性能至关重要。

模型评估: 精确度(Precision)和召回率(Recall)指标提供了对模型识别少数类的能力的深入理解,这对于不平衡数据集至关重要。

  • 精确度 衡量模型预测为正类的样本中有多少是真正的正类。

  • 召回率 衡量所有实际正类样本中有多少被模型正确识别。

通过关注这些指标,可以更全面地评估模型在少数类上的表现,确保它在关键任务中不会受到不平衡数据的影响。

有效应对不平衡数据

不平衡的数据集是机器学习中常见的问题,如果处理不当,会显著影响模型的性能。通过应用适当的重采样技术,如类权重、过采样、欠采样或SMOTE,可以创建平衡的数据集,从而提高模型的表现。

关键要点:

  • 类权重 通过为错误分类分配更高的成本,调整模型以更加关注少数类。

  • 随机过采样和欠采样 是平衡数据集的简单而有效的方法,尽管它们可能引入过拟合或信息损失。

  • SMOTE 生成少数类的合成样本,创建更具多样性的训练集,并降低过拟合的可能性。

  • 在处理不平衡数据时,使用适当的评估指标,如精确度、召回率和F1分数,因为准确率可能会误导。

通过应用这些技术和评估指标,可以构建更健壮的模型,使其在面对不平衡数据集时也能良好泛化。

数据预处理:机器学习的支柱

数据预处理往往被忽视,但它仍然是任何成功机器学习项目的支柱。即使是最先进的算法,如果没有妥善处理的数据,也难以做出准确的预测。涵盖了从处理缺失数据、缩放数值特征,到编码分类变量、工程化有意义的特征,以及应对不平衡数据集的所有内容。

通过掌握这些技术,你可以确保你的机器学习模型表现最佳、公正,并能良好地泛化到未见数据上。数据预处理不仅仅是机器学习流程中的一步——它是一门工艺,正确执行时为构建健壮、可扩展且有影响力的模型奠定了基础。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175541
 
250 次点击