机器学习-数据预处理

1.均值移除(标准化)
  由于一个样本的不同特征值差异较大,不利于使用现有机器学习算法进行样本处理。均值移除可以让样本矩阵中的每一列的平均值为0,标准差为1。
  确保每一个特征列的数值都在类似的数据范围之间,防止某一个特征列数据天然的数值太大而一家独大影响结果

  使用sklearn
  import numpy as np
  import sklearn.preprocess as sp

  sample = np.array([
      [2, 4, 5, -1],
      [3, 1, 7, -2],
      [6, -3, 2, -1],
  ], dtype="float")

  print(sp.scale(sample))

  #[[-0.98058068  1.16247639  0.16222142  0.70710678]
  #[-0.39223227  0.11624764  1.13554995 -1.41421356]
  #[ 1.37281295 -1.27872403 -1.29777137  0.70710678]]
2.归一化
  归一化就是把所有数据都转化成[0,1]或者[-1,1]之间的数,其目的是为了取消各维数据之间的数量级差别,避免因为输入输出数据数量级差别大而造成网络预测误差过大。
  归一化作用:

    1)为了后面数据处理的方便,归一化可以避免一些不必要的数值问题。

    2)为了程序运行时收敛速度更快

    3)统一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准,这算是应用层面的需求。

    4)避免神经元饱和。就是说当神经元的激活在接近0或者1时,在这些区域,梯度几乎为0,这样在反向传播过程中,局部梯度就会接近于0,这样非常不利于网络的训练。

    5)保证输出数据中数值小的不被吞食。

  import numpy as np

  import sklearn.preprocess as sp

  samples = np.array([[17., 100., 4000],

              [20., 80., 5000],

              [23., 75., 5500]])

  print(sp.normalize(samples, norm='l1')

  #[[0.00412922 0.02428953 0.97158125]
  #[0.00392157 0.01568627 0.98039216]
  #[0.00410861 0.01339764 0.98249375]]

 

 

posted @ 2023-01-05 16:28  小白duzw  阅读(76)  评论(0)    收藏  举报