Clare Liu, 英国金融科技数据科学家作者王紫岳校对林鹤冲翻译

数据转换:标准化vs 归一化(附代码&链接)

数据转换的前几步往往可以提升机器学习模型的准确性。本文将解释数据转换中常见的特征缩放方法:“标准化”和“归一化”的不同之处,并举例说明何时使用,以及如何使用它们。

数据转换是数据处理中十分基本的步骤之一。当我初学特征缩放的时候,经常用到“缩放” “标准化”“归一化”等术语。但是却很难找到应该在什么时候,使用哪一种方法的信息。所以,我想从以下几方面讲解一下:
  • 标准化和归一化的区别

  • 何时使用标准化和归一化

  • 如何用Python实现特征缩放

特征缩放的意义

在实践中,同一个数据集合中经常包含不同类别的变量。一个很大的问题是这些变量的值域可能大不相同。如果使用原值域将会使得值域大的变量被赋予更多的权重。针对这个问题,我们需要在数据预处理时对自变量或特征使用缩放的方法。虽然,“归一化”和 “标准化”这两个说法有时候可以互换使用,但是二者本质上确是不同的。

“特征缩放的目的是使得所有特征都在相似的范围内,因此建模时每个特征都会变得同等重要,并且更便于机器学习的算法进行处理。”

范例

这个数据集包含一个因变量(purchased)以及三个自变量(Country, Age, Salary)。我们能很容易发现变量彼此不在同一个范围内——年龄(Age)的值域在27-50之间,工资(Salary)的区间则是48K-83K。工资的值域远远地超过了年龄的值域。这会干扰我们的训练模型,因为很多的机器学习模型诸如K均值聚类(K-means clustering)和近邻算法(Nearest neighbour classification)都依据了欧氏距离(Euclidean Distance)。

关注年龄和工资变量


当我们计算欧氏距离的时候,(x2-x1)² 的值要远大于(y2-y1)² ,这意味着在不使用特征缩放的情况下,欧氏距离会被工资变量主导。年龄间的差距对整体欧氏距离的影响则很小。因此,我们需要使用特征缩放来将全部的数值统一到一个量级上来解决此问题。为了达到这个目标,基本的解决方法有二:“标准化”和“归一化”。

欧氏距离的应用


标准化 (Standardization):中心标准化

中心标准化(Z-score normalization)的结果是使所有特征的数值被转化成为均值为0、标准差为1的正态分布。公式如下:

这种将特征的值域重新缩放到0到1之间的技巧对于优化算法是很有用的,诸如在回归和神经网问题中应用到的“梯度下降”。缩放也适用于基于距离测量的算法,比如K近邻算法(KNN)。

归一化:离差标准化 (Max-Min Normalization)

另一常用的方法就是离差标准化(Min-Max scaling)。这个方法是将每个特征数值转化到[0,1]区间。对于每个特征,最小值被转化为0,最大值被转化为1。公式如下:

Code
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(df)
scaled_features = scaler.transform(df)
#Convert to table format - MinMaxScaler
df_MinMax = pd.DataFrame(data=scaled_features, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])

中心标准化 vs 离差标准化

相比于中心标准化,离差标准化后的标准差比较小。用上述数据集来展示:

特征缩放后

工资变量的常态分布和标准差

年龄变量的常态分布和标准差

通过以上图表,我们能清楚地发现离差标准化工资和年龄变量后,得到的标准差小于使用中心标准化方法。这说明在使用离差标准化后,数据的数值更加接近平均值。

但是如果特征列中含有异常值(outlier), 离差标准化只能将所有特征统一比例,并不能很好地解决异常值问题。中心标准化在异常值方面则有更好的表现,因此它比离差标准化应用更广。

特征缩放的使用场景:

一些基于距离矩阵的机器学习模型,被称为“距离分类器”,比如K近邻算法(KNN),支持向量机(SVM),神经网络(Neural Network)。特征缩放对于这些模型非常重要,特别是在特征的值域非常不同时。特征缩放减少了大值域变量对计算距离的影响。

离差标准化帮助我们转化不同比例上的数据,消除特殊特征的主导。并且它不需要对数据的分布进行假设(比如k近邻和人工神经网络)。但是,归一化(离差标准化)不能很好地处理异常值。相反,标准化(中心标准化)可以更好地处理异常值,以及加速诸如梯度下降等算法的收敛。所以我们通常选择中心标准化。

注:如果算法不是基于距离计算,特征缩放则不重要,比如朴素贝叶斯线性判别分析,以及树模型(梯度提升随机森林等)。

总结:现在你应懂得
  • 使用特征缩放的目的

  • 标准化与归一化的区别

  • 需要使用标准化或归一化的算法

  • 在Python中实现特征缩放

获取代码和数据集合,请使用一下连接:

https://github.com/clareyan/feasturescaling

原文链接:

https://www.kdnuggets.com/2020/04/data-transformation-standardization-normalization.html

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程归一化特征缩放数据转换
21
相关数据
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

梯度提升技术

梯度提升是用于回归和分类问题的机器学习技术,其以弱预测模型(通常为决策树)的集合的形式产生预测模型。 它像其他增强方法一样以阶段式方式构建模型,并且通过允许优化任意可微损失函数来推广它们。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

朴素贝叶斯技术

朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。

线性判别分析技术

线性判别分析 是对费舍尔的线性鉴别方法的归纳,这种方法使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。

支持向量机技术

在机器学习中,支持向量机是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

找到机构
推荐文章
中心标准化:这种将特征的值域重新缩放到0到1之间的技巧对于优化算法是很有用的.这句话是不是应该是-1到1. 离差标准化帮助我们转化不同比例上的数据,消除特殊特征的主导。并且它不需要对数据的分布进行假设(比如k近邻和人工神经网络)。但是,归一化(离差标准化)不能很好地处理异常值。相反,标准化(中心标准化)可以更好地处理异常值,以及加速诸如梯度下降等算法的收敛。所以我们通常选择中心标准化。ps:神经网络后向传播一般都是梯度下降,那到底是用离差还是中心标准化