Python数据预处理--数据归一化

背景:现实的数据采集中,由于对不同的特征值采用不同的单位,会导致不同特征值的取值范围会有很多的差距。比如房价以“元”为单位,取值范围可能是1万到10万之间;食物支出占比的取值范围可能是0到1之间。这一问题会严重影响许多模型的创建,针对此我们一般会采用“归一化”对不均衡的数据进行预处理。

 

归一化的意义

  • 使数据类型一致且均匀
  • 提高模型精度
  • 加快梯度下降求最优解的速度
  • 概率模型可以不做归一化如决策树

算法思路

  • 数据归一化:所有特征值介于0-1之间
  • 数学原理: newValue = (newValue-min) / (max -min)
  • max: 当前特征的最大特征值
  • min:  当前特征的最小特征值

代码实现

from numpy import *
'''数值归一化:特征值转化为0-1之间:newValue = (oldValue-min)/(max-min)'''
def norm_dataset(dataset):
    minVals = dataset.min(0)  # 参数0是取得列表中的最小值,而不是行中最小值
    maxVals = dataset.max(0)
    ranges = maxVals - minVals

    normdataset = zeros(shape(dataset)) # 生成原矩阵一样大小的0矩阵
    m = dataset.shape[0]

    # tile:复制同样大小的矩阵
    molecular = dataset - tile(minVals,(m,1))  # 分子: (oldValue-min)
    Denominator = tile(ranges,(m,1))           # 分母:(max-min)
    normdataset = molecular / Denominator     # 归一化结果。

    print('归一化的数据结果:\n'+str(normdataset))
    return normdataset,ranges,minVals

 

Guess you like

Origin blog.csdn.net/chenxy02/article/details/105093402