数据归一化以及Python实现方式

来源:互联网 发布:免费卡盟源码 编辑:程序博客网 时间:2024/05/09 16:00

数据归一化:

数据的标准化是将数据按比例缩放,使之落入一个小的特定区间,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

为什么要做归一化:

1)加快梯度下降求最优解的速度

如果两个特征的区间相差非常大,其所形成的等高线非常尖,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛。

2)有可能提高精度

一些分类器需要计算样本之间的距离,如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

归一化类型

1)线性归一化

这种归一化比较适用在数值比较集中的情况,缺陷就是如果max和min不稳定,很容易使得归一化结果不稳定,使得后续的效果不稳定,实际使用中可以用经验常量来代替max和min。

2)标准差标准化

经过处理的数据符合标准正态分布,即均值为0,标准差为1。

3)非线性归一化

经常用在数据分化较大的场景,有些数值大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、反正切等。需要根据数据分布的情况,决定非线性函数的曲线。

  • log函数:x = lg(x)/lg(max)

  • 反正切函数:x = atan(x)*2/pi

Python实现

  • 线性归一化

定义数组:x = numpy.array(x)

获取二维数组列方向的最大值:x.max(axis = 0)

获取二维数组列方向的最小值:x.min(axis = 0)

对二维数组进行线性归一化:

def max_min_normalization(data_value, data_col_max_values, data_col_min_values):""" Data normalization using max value and min valueArgs:    data_value: The data to be normalized    data_col_max_values: The maximum value of data's columns    data_col_min_values: The minimum value of data's columns"""data_shape = data_value.shapedata_rows = data_shape[0]data_cols = data_shape[1]for i in xrange(0, data_rows, 1):    for j in xrange(0, data_cols, 1):        data_value[i][j] = \            (data_value[i][j] - data_col_min_values[j]) / \            (data_col_max_values[j] - data_col_min_values[j])
  • 标准差归一化

定义数组:x = numpy.array(x)

获取二维数组列方向的均值:x.mean(axis = 0)

获取二维数组列方向的标准差:x.std(axis = 0)

对二维数组进行标准差归一化:

def standard_deviation_normalization(data_value, data_col_means,                                 data_col_standard_deviation):""" Data normalization using standard deviationArgs:    data_value: The data to be normalized    data_col_means: The means of data's columns    data_col_standard_deviation: The variance of data's columns"""data_shape = data_value.shapedata_rows = data_shape[0]data_cols = data_shape[1]for i in xrange(0, data_rows, 1):    for j in xrange(0, data_cols, 1):        data_value[i][j] = \            (data_value[i][j] - data_col_means[j]) / \            data_col_standard_deviation[j]
  • 非线性归一化(以lg为例)

定义数组:x = numpy.array(x)

获取二维数组列方向的最大值:x.max(axis=0)

获取二维数组每个元素的lg值:numpy.log10(x)

获取二维数组列方向的最大值的lg值:numpy.log10(x.max(axis=0))

对二维数组使用lg进行非线性归一化:

def nonlinearity_normalization_lg(data_value_after_lg,                              data_col_max_values_after_lg):""" Data normalization using lgArgs:    data_value_after_lg: The data to be normalized    data_col_max_values_after_lg: The maximum value of data's columns"""data_shape = data_value_after_lg.shapedata_rows = data_shape[0]data_cols = data_shape[1]for i in xrange(0, data_rows, 1):    for j in xrange(0, data_cols, 1):        data_value_after_lg[i][j] = \            data_value_after_lg[i][j] / data_col_max_values_after_lg[j]
0 0
原创粉丝点击