数据规范化的几种方法

2022-08-26  本文已影响0人  逍遥_yjz

1)在编撰指数,或者综合性指标的时候,必须对数据进行缩放,放到统一的量纲中。因为在权重计算中,如果没有统一的量纲,其实是在变相的给一些量纲大的数据增加权重。比如衡量一个人的综合健康指数,需要采集个人数据,身高、体重、年龄、血压等等,如果不进行量纲缩放和权重设计,单纯将数据相加,得出的指数没有任何意义。

2)在一些机器学习的算法中,尤其是涉及到距离的计算时,需要对数据的量纲进行缩放。比如在聚类过程中,标准化显得尤为重要。这是因为聚类操作依赖于对类间距离和类内聚类之间的衡量量。如果⼀一个变量量的衡量量标准⾼高于其他变量量,那么使⽤的任何衡量标准都将受到该变量的过度影响。还有的如PCA,KNN以及SVM等。

3)为了增强数据可解释性,对数据量化到量纲中。比如将机器学习输出的概率转化成分数,便于运营理解,比如10分就是最高,1分就是最低。

0. Simple Feature scaling 简单特征缩放

简单特征缩放:将各个特征值除以最大的值,得到的规范化结果在 [-1,1] 范围内。

# Python
df["xxx"] = df["xxx"]/df["xxx"].max()

优点是不改变数据集在轴上的稠密程度;但容易受到离群最大值的影响。如果最大值远远大于其他的特征值,这会导致规范化的结果不合理。

1. Min-max规范化:

Min-max 规范化Min-max 规范化方法是将原始数据变换到[0,1]的空间中。用公式表示就是:新数值 =(原数值 - 极小值)/(极大值 - 极小值)。

SciKit-Learn是 Python 的重要机器学习库,它封装了大量的机器学习算法,比如分类、聚类、回归、降维等。此外,它还包括了数据变换模块。我主要使用SciKit-Learn进行数据规范化。

可以让原始数据投射到指定的空间[min, max],在 SciKit-Learn 里有个函数 MinMaxScaler 是专门做这个的,它允许定一个最大值与最小值,然后将原数据投射到[min, max]中。默认情况下[min,max]是[0,1],也就是把原始数据投放到[0,1]范围内。

核心代码:

min_max_scaler= preprocessing.MinMaxScaler()

minmax_x= min_max_scaler.fit_transform(x)
# Python
df[""] = (df[""]-df[""].min())/(df[""].max()-df[""].min())

同样的,这样的方式也容易受到离群最大最小值的影响。

2. Z-Score 规范化

假设 A 与 B 的考试成绩都为 80 分,A 的考卷满分是 100 分(及格 60分),B 的考卷满分是 500 分(及格 300 分)。虽然两个人都考了 80 分,但是 A 的 80 分与 B 的 80 分代表完全不同的含义。那么如何用相同的标准来比较 A 与 B 的成绩呢?Z-Score 就是用来可以解决这一问题的。定义:新数值 =(原数值 - 均值)/ 标准差。假设 A 所在的班级平均分为 80,标准差为10。B 所在的班级平均分为 400,标准差为 100。那么 A 的新数值=(80-80)/10=0,B 的新数值=(80-400)/100=-3.2。那么在 Z-Score 标准下,A 的成绩会比 B 的成绩好。Z-Score 的优点是算法简单,不受数据量级影响,结果易于比较。不足在于,它需要数据整体的平均值和方差,而且结果没有实际意义,只是用于比较。

在 SciKit-Learn 库中使用 preprocessing.scale() 函数,可以直接将给定数据进行Z-Score 规范化。

核心代码:

preprocessing.scale(x)

panda:

# Python
df[""] = (df[""]-df[""].mean())/df[""].std()

3. 小数定标规范化:

通过移动小数点的位置来进行规范化。小数点移动的位数取决于该属性数据取值的最大绝对值。

例如:属性A的取值范围是-800到70,那么就可以将数据的小数点整体向左移三位即[-0.8,0.07]

利用numpy对数据进行小数定标规范化的方法如下:

j = np.ceil(np. log10(np.max( abs(×))))
scaled_x = x/(10**j)

上一篇下一篇

猜你喜欢

热点阅读