做者:Clare Liu, 英国金融科技数据科学家 翻译:林鹤冲 校对:王紫岳html
本文约2300字,建议阅读10分钟git
本文将解释数据转换中常见的特征缩放方法:“标准化”和“归一化”的不一样之处,并举例说明什么时候使用,以及如何使用它们。github
数据转换的前几步每每能够提高机器学习模型的准确性。本文将解释数据转换中常见的特征缩放方法:“标准化”和“归一化”的不一样之处,并举例说明什么时候使用,以及如何使用它们。算法
数据转换是数据处理中十分基本的步骤之一。当我初学特征缩放的时候,常常用到“缩放” “标准化”“归一化”等术语。可是却很难找到应该在何时,使用哪种方法的信息。因此,我想从如下几方面讲解一下:微信
标准化和归一化的区别网络
什么时候使用标准化和归一化机器学习
如何用Python实现特征缩放ide
特征缩放的意义学习
在实践中,同一个数据集合中常常包含不一样类别的变量。一个很大的问题是这些变量的值域可能大不相同。若是使用原值域将会使得值域大的变量被赋予更多的权重。针对这个问题,咱们须要在数据预处理时对自变量或特征使用缩放的方法。虽然,“归一化”和 “标准化”这两个说法有时候能够互换使用,可是两者本质上确是不一样的。优化
“特征缩放的目的是使得全部特征都在类似的范围内,所以建模时每一个特征都会变得同等重要,而且更便于机器学习的算法进行处理。”
范例
这个数据集包含一个因变量(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
END
转自: 数据派THU 公众号;
版权声明:本号内容部分来自互联网,转载请注明原文连接和做者,若有侵权或出处有误请和咱们联系。
合做请加QQ:365242293
数据分析(ID : ecshujufenxi )互联网科技与数据圈本身的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。