特征处理-标准化

概述

标准化,Standardization,有时也将 标准化 称为 归一化

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

Z-score标准化(0均值归一化)

是最常见的标准化,又称:标准差标准化

结果:数据 均值为0、标准差为1 ,符合正态分布,公式如下:

解释:
  • x是原始数据
  • u是原始数据的 平均值
  • σ原始数据的 标准差

原理

表示 原始值 与 均值 之间差多少个标准差,是一个相对值,所以也有 去除量纲 的功效。

  1. x-μ,计算结果的 平均值变为0
  2. (x-μ)/σ 除以标准差,计算结果的标准差为1

均值为0,标准差为1 好处

可以使数据以0为中心左右分布,而数据以0为中心左右分布会带来很多便利。

比如:机器学习中很多函数如Sigmoid、Tanh、Softmax等都以0为中心左右分布(不一定对称)

应用场景

  1. 神经网络需要标准化处理,一般变量的取值在-1到1之间,这样做是为了弱化某些变量的值较大而对模型产生影响。

  2. 在K近邻算法中,如果不对解释变量进行标准化,那么具有小数量级的解释变量的影响就会微乎其微。

实现

numpy实现标准化

import numpy as np

l=[
    [7,180,300000,70],
    [3,172,200000,110],
    [5,168,250000,190],
    [8,185,60000,0],
    [4,178,36000,80],
    [6,175,48000,120]
]

arr=np.array(l)

def z_score(x):
    mn=np.mean(x,axis=0)
    std=np.std(x,axis=0)
    return (x-mn)/std


ret=z_score(arr)
print("标准化:\n",ret)

sklearn实现标准化

import numpy as np

l=[
    [7,180,300000,70],
    [3,172,200000,110],
    [5,168,250000,190],
    [8,185,60000,0],
    [4,178,36000,80],
    [6,175,48000,120]
]

arr=np.array(l)

from sklearn import preprocessing 
ret = preprocessing.scale(arr)

print("标准化:\n",ret)

感谢:
https://blog.csdn.net/zenghaitao0128/article/details/78361038


原文出处:/show_1EF4YYUNDlOv.html