专栏名称: 新语数据故事汇
《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。
目录
相关文章推荐
51好读  ›  专栏  ›  新语数据故事汇

一文带您了解数据缩放(Data Scaling):标准化和最小最大缩放

新语数据故事汇  · 公众号  ·  · 2024-08-16 17:00

正文

数据缩放是数据预处理中的一个关键步骤,它将特征转换为相似的量纲或范围,通常在训练机器学习模型之前进行。数据缩放的主要目的是确保所有特征对模型的贡献是均等的,并提升模型的性能,因为一些算法在特征被缩放后能更快收敛。

常见的数据缩放方法包括标准化(Standardization)和 Min-Max 缩放(Min-Max Scaling):

  • 标准化(Standardization) :将数据转换为均值为 0 和标准差为 1 的分布。这种方法适用于许多机器学习算法(尤其是深度学习算法),它们通常假设数据符合标准正态分布。然而,标准化对异常值较为敏感,更适合于已经呈正态分布的数据。

  • Min-Max 缩放(Min-Max Scaling) :将数据缩放到介于 0 和 1 之间的范围。这种方法对异常值也敏感,但在处理稀疏数据时能够保留值为 0 的数据,并且能够保持数据的原始分布形状。

此外,如果数据集中存在异常值, RobustScaler 是一个有用的替代方案。 RobustScaler 使用中位数和四分位距(IQR)进行缩放,对异常值的影响较小。

什么是数据缩放?

当你第一次将数据集加载到 Python 脚本或Data Notebook中,并查看其中的数值特征时,你可能会注意到它们的量纲各不相同。这意味着每个列或特征的取值范围各异。例如,一个特征的取值范围可能是 0 到 1,而另一个特征的取值范围则可能是 1000 到 10000。

数据缩放本质上是将所有特征拉到一个相似或相同的量纲或范围的过程,例如将所有特征的值转化为介于 0 和 1 之间。

以 UCI 机器学习库中的葡萄酒质量数据集( https://archive.ics.uci.edu/dataset/186/wine+quality )为例:

wine_red=pd.read_csv('/home/winequality-red.csv',sep=';')wine_red

何时(以及为何)需要进行数据缩放

在拟合/训练机器学习模型之前对特征进行缩放有几个重要原因:

  • 确保所有特征对模型的贡献是均等的。当某个特征的数值范围较大且跨度较广时,它可能会对预测产生过大的影响,而其他数值较小的特征则可能被忽视。

  • 提升性能。某些算法在特征被缩放后收敛速度更快。

数据缩放应该在数据清理(如移除空值、移除或填补异常值等)、通过特征工程创建新特征以及进行训练/测试集划分之后进行。它应是数据预处理的最后一步,在模型拟合到缩放后的数据之前完成。

但在决定缩放特征时,需注意以下几点:

  • 只对特征进行缩放,不要缩放目标变量。缩放目标变量并非必要。

  • 只对数值特征进行缩放。不要缩放类别特征——对于这些特征,应使用独热编码或其他类别编码方法。

  • 缩放特征只在某些算法中是必要的。使用梯度下降法最小化损失函数的算法,如线性回归、逻辑回归和神经网络,对特征量纲的差异较为敏感,因此需要进行缩放。使用距离算法如 KNN 也对缩放敏感。然而,基于树的算法如决策树和随机森林则不敏感,因此对这些算法不必进行特征缩放。

标准化还是 Min-Max 缩放?

有两种常见的特征缩放方法:标准缩放和 Min-Max 缩放。标准缩放(也称为标准化)将数据转换为均值为 0、标准差为 1 的形式。在 Python 中,通常使用 StandardScaler 来执行标准化。

Min-Max 缩放将数据转换为每个值都介于 0 和 1 之间。在 Python 中,通常使用 MinMaxScaler 对象来执行 Min-Max 缩放。

通常来说,在训练机器学习模型之前,对数据进行缩放时,无论是标准化还是 Min-Max 缩放都能完成任务。我建议对你的数据集尝试这两种方法,看看哪一种(如果有的话)能带来更好的性能。不过,在选择其中一种方法时,还是有一些考虑因素的。

标准化

  • 结果是均值为 0,标准差为 1 的分布

  • 许多机器学习算法(特别是深度学习算法)假设数据是标准正态分布,即均值为 0,方差为 1

  • 对异常值敏感

  • 更适合已经呈正态分布的数据

Min-Max 缩放

  • 将值范围限制在 [0,1] 之间

  • 对异常值敏感

  • 因为将值范围限制在 0 到 1 之间,所以在处理稀疏数据时能保留值为 0 的数据

  • 保持数据的原始分布/形状

MinMaxScaler, StandardScaler示例

这两种缩放器都可以通过 sklearn.preprocessing 模块获取,并可以通过以下方式导入:

from sklearn.preprocessing import MinMaxScaler, StandardScalerfrom sklearn.model_selection import






请到「今天看啥」查看全文