(一)离差标准化数据
离差表转化是对原始数据的一种线性变换,结果是将原始的数据映射到[0,1]区间之间,转换公式为:

其中 max 为样本数据的最大值,min 为样本数据的最小值,max-min 为极差。利差标准化保留了原始数据值之间的联系,是消除量纲和数据取值范围影响最简单的方法。离差标准化的特点:
(1)数据的整体分布情况并不会随离差标准化而发生改变,原先取值较大的数据,在做完离差标准化后的值依旧较大。
(2)当数据和最小值相等的时候,通过离差标准化可以发现数据变为 0。
(3)若数据极差过大就会出现数据在离差标准化后数据之间的差值非常小的情况。
(4)同时,还可以看出离差标准化的缺点:若数据集中某个数值很大,则离差标准化的值就会接近于 0,并且相互之间差别不大。若将来遇到超过目前属性[min,max]取值范围的时候,会引起系统出错,这时便需要重新确定 min 和max。
1 # 标准化 2 # 1、离差标准化 3 # 对数据的线性变化,将数据映射到[0,1]范围 4 # new_x = (x - min) /(max -min) 5 # min 表示该列最小值, max表示该列的最大值 6 # 特点: 7 # (1)转化之后,大数据还是较大的,小数据还是较小的 8 # (2)当数据为最小值,转化为的数据为0 9 # (3)极差过大--->分母过大--->整体的数据偏小 ---之间差异不太明显 10 # (4) 如果数据中的某个数值很大,分母很大,--整体趋向于0 11 # 标准化之后,要记录下,最小值、最大值--->计算原始数据 12 # 如果出现新的数据,不在之前记录[min,max]之间---转化之后,>1或者<0的情况 13 # 实现离差标准化
1 def min_max_sca(data): 2 """ 3 离差标准化 4 :param data: series/dataframe 5 :return: 标准化之后的数据 6 """ 7 data = (data - data.min()) / (data.max() - data.min()) 8 9 return data
(二)标准差标准化数据
标准差标准化也叫零均值标准化或分数标准化,是当前使用最广泛的数据标准化方法。

经过该方法处理后的均值为 0,标准差为 1,转化公式为:其中 X 为原始数据的均值,
为原始数据的标准差。标准差后的值区间不局限于[0,1],并且存在负值。同时也不难发现,标准差标准化和离差标准化一样不会改变数据的分布情况

1 # 2、标准差标准化 2 # 目前使用最为广泛的一种标准化数据的方式 3 # 将数据转化为均值为0,标准差为的1 数据--->将数据转化为服从标准正态分布的数据 4 # new_x = (x - mean) / std 5 # 特点: 6 # (1)标准化之后的数据不仅局限于[0,1],可以为正的,也可以为负的,总之,均值为0,标准差为1 7 # (2)不会影响数据的整体分布,大的值转化之后还是较大的,小的值转化之后还是较小的
1 def stand_sca(data): 2 """ 3 标准差标准化数据 4 :param data: series/datafrmae 5 :return: 标准化之后的数据 6 """ 7 data = (data - data.mean()) / data.std() 8 9 return data
(三)小数定标标准化数据
通过移动数据的小数位数,将数据映射到区间[-1,1]之间,移动的小数位数取决于数据绝对值的最大值。转化公式如下:
1 # 3、小数定标标准化 2 # 通过移动小数点的位置来进行数据转化,将数据转化为[-1,1]之间 3 # 小数点移动的位数 取决于该列数据绝对值的最大值 4 # new_x = x / 10 ^ k 5 # k ---> log10(|x|.max()) 向上取整 ---转化int 6 # 假设存在一列数据 --->该列数据 [-99,99]之间 7 # a、该列数据取绝对值---[0,99] 8 # b、取绝对值的最大值---99 9 # c、对99进行取log10对数 --->(1,2)小数 10 # d、对 (1,2)小数 ---向上取整 ---> 2.0 11 # e、转化为int ---> 2 --->k = 2 12 # f、根据公式 分母 =100,--->小数点向左移动2位 ---->[-0.99,0.99]之间 13 # 特点: 14 # (1)将数据映射到[-1,1]区间 15 # (2)数据的分布不会变化,大的数据转化之后还是较大的,小的数据转化之后还是小的 16 17 # 实现小数定标标准化 18 def desc_sca(data): 19 """ 20 小数定标标准化 21 :param data: series/dataframe 22 :return: 标准化之后的数据 23 """ 24 # abs() --取绝对值 25 # np.ceil --向上取整 26 data = data / (10 ** (int(np.ceil(np.log10(data.abs().max()))))) 27 28 return data
(四)三种标准化的特点:
离差标准化方法简单,便于理解,标准化后的数据限定在[0,1]区间内;
标准差标准化收到数据分布的影响较小;
小数定标标准化方法的适用范围广,并且受到数据分布的影响较小,相比较于前面两种方法而言该方法适用程度适中。