拿到一批原始数据后,经过对缺失值的填补、异常值的处理以及组合型数据的生成,可以得到一份较为完整的数据集。但是不同指标具有不同的性质(连续、离散)和不同的数量级,直接进行训练会削弱数量级较低数据带来的影响,所以还需要对数据进行标准化处理(目标值通常不需要缩放),才能让数据可以投入训练。

        数据标准化就是把有量纲的数据变成无量纲的数据,把量级不同的数据处理到同一个量级,从而让不同纬度的数据之间具有可比性,对于机器学习来说,用来提升模型的预测效果。

        具体常用的标准化方法有如下几种:

        1.Min-max标准化(Min-max normalization)

        2.z-score标准化(zero-mena normalization)

        3.log函数转换

        4.atan函数转换

1.Min-max标准化(Min-max normalization)

        min-max标准化也称为最小-最大缩放、归一化。归一化的逻辑是将数据缩放到0~1之间,实现方法很简单。是将值减去最小值并除以最大值和最小值之差。 公式为:

Y=\frac{(x-x_{min})}{(x_{max}-x_{min})}

        Scikit-learn提供了一个名为MinMaxScaler的转换器,具体使用方法为:

from sklearn.preprocessing import MinMaxScaler

data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler()
print(scaler.fit(data))
print("*" * 30)
print(scaler.data_max_)
print("*" * 30)
print(scaler.transform(data))

        结果为:

MinMaxScaler()
******************************
[ 1. 18.]
******************************
[[0.   0.  ]
 [0.25 0.25]
 [0.5  0.5 ]
 [1.   1.  ]]

        MinMaxScaler可用参数:

                feature_rangetuple(min,max), default=(0,1):调整参数可以手动设定要缩放到的具体范围

2.z-score标准化(zero-mena normalization)

        z-score标准化方法为先减去平均值(所以标准化的均值总是0),然后除以方差,从而使得结果的分布具备单位方差,不同于最小最大缩放的是,标准化不将值绑定到特定范围,对于某些算法来说,可能是个问题(例如,神经网络期望输入的值范围是0~1)。但是标准化的方法受异常值的影响更小。Scikit-Learn提供了一个标准化转换器StandardScaler,具体使用方法为:

from sklearn.preprocessing import StandardScaler

data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler = StandardScaler()
print(scaler.fit(data))
print("*"*30)
print(scaler.mean_)
print("*"*30)
print(scaler.transform(data))

        结果为

StandardScaler()
******************************
[0.5 0.5]
******************************
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]

3.log函数转换

        通过以10为底的log函数转换的方法同样可以通过x=log10(x)实现归一化,但是要是需要数据一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。公式为

Y = \frac{\log_{10}x}{\log_{10}x_{max}}

        python中log10函数计算方法

import numpy as np

y = np.log10(x)


import math

y = math.log10(x)

4.atan函数转换

        用反正切函数也可以实现数据的归一化,使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,公式为

Y=\frac{2 * \arctan x}{\pi }

        python中反正切函数计算方法

import math

y = math.atan(x)

参考链接:数据标准化方法 - 知乎

更多推荐