样本特征由于来源以及度量单位不同,它们的尺度(Scale),或者说是取值范围有可能差异很大。如果一个机器学习算法在缩放全部或者部分特征后不影响它的学习和预测,我们就称该算法具有尺度不变性(Scale Invariance)。神经网络从理论上应该具有尺度不变性,可以通过参数的调整来适应不同特征的尺度。但是尺度不同的输入特征会增加训练的难度。1

1/ 最小最大值归一化

归一化(Normalization)方法泛指把数据特征转换为相同尺度的方法。最小最大值归一化(Min-Max Normalization)是最为简单的归一化方法,通过简单的缩放将每一个特征的取值范围归一到 [0,1][0,1][0,1] 或 [−1,1][-1, 1][−1,1]. 假如样本数据 {x(n)}n=1N\{\boldsymbol{x}^{(n)}\}^N_{n=1}{x(n)}n=1N​,最小最大归一化到 [0,1][0,1][0,1] 的公式为:
x^(n)=x(n)−min⁡(x(n))max⁡n(x(n))−min⁡n(x(n)),\hat{x}^{(n)}=\frac{x^{(n)}-\min{(x^{(n)})}}{\max_n(x^{(n)})-\min_n(x^{(n)})}, x^(n)=maxn​(x(n))−minn​(x(n))x(n)−min(x(n))​,
最小最大归一化到 [−1,1][-1,1][−1,1] ,可以先将数据归一化到 [0,1][0, 1][0,1] 之间,然后再进行平移缩放:
x^(n)=2maxn(x(n))−minn(x(n))(x(n)−minn(x(n)))−1,\hat{x}^{(n)}=\frac{2}{\text{max}_n(x^{(n)})-\text{min}_n(x^{(n)})}\left(x^{(n)}-\text{min}_n(x^{(n)})\right)-1, x^(n)=maxn​(x(n))−minn​(x(n))2​(x(n)−minn​(x(n)))−1,

所以将数据利用最小最大归一化到某个范围 [r1,r2][r_1, r_2][r1​,r2​] 的代码为:

import torch
import numpy as np
from sklearn import preprocessing
np.random.seed(9) # 设置随机种子为 9def min_max_norm(X, feature_range=(0, 1)):r1, r2 = feature_range  # 将数据归一化到 [r1, r2] 之间xmin, xmax = X.min(axis=0), X.max(axis=0) # 得到数据的最大最小值X_std = (X - xmin) / (xmax - xmin)     # 标准化到 [0, 1]X_scaled = X_std * (r2 - r1) + r1      # 数据平移缩放到 [r1, r2]return X_scaled

sklearn.preprocessing 中的 MinMaxScaler() 进行对比:

sample_size = 5
X = np.random.randn(sample_size) * 255
X = X.reshape(-1, 1)
min_max_norm(X, feature_range=(0, 1))    # 数据归一化到 [0, 1] 之间
preprocessing.MinMaxScaler(feature_range=(0, 1)).fit_transform(X.reshape(-1, 1))
# array([1.        , 0.73983247, 0.        , 0.98747617, 0.66033068])min_max_norm(X, feature_range=(-1, 1))   # 数据归一化到 [-1, 1] 之间
preprocessing.MinMaxScaler(feature_range=(-1, 1)).fit_transform(X.reshape(-1, 1))
# array([ 1.        ,  0.47966494, -1.        ,  0.97495233,  0.32066137])# 两种方法得到的结果是一样的

2/ 标准化

标准化(Standardization)也叫 Z 值归一化(Z-Score Normalization),它的作用是将每一维特征都调整为均值为 0,方差为 1. 首先计算均值与方差:
μ=1N∑n=1Nx(n)σ2=1N∑n=1N(x(n)−μ)2\begin{aligned} \mu &=\frac{1}{N} \sum_{n=1}^{N} x^{(n)} \\ \sigma^{2} &=\frac{1}{N} \sum_{n=1}^{N}\left(x^{(n)}-\mu\right)^{2} \end{aligned} μσ2​=N1​n=1∑N​x(n)=N1​n=1∑N​(x(n)−μ)2​
然后将特征 x(n)x^{(n)}x(n) 减去均值,并除以标准差,得到新的特征值 x^(n)\hat{x}^{(n)}x^(n):
x^(n)=x(n)−μσ\hat{x}^{(n)}=\frac{x^{(n)}-\mu}{\sigma} x^(n)=σx(n)−μ​
标准差 σ\sigmaσ 不能为零,否则说明这一维的特征没有任何区分性,可以直接删掉。

标准化的代码:

def z_score_norm(X):mu = X.mean()   # 计算数据的均值sigma = X.std() # 计算数据的标准差(方差的平方根)return (X - mu) / sigmaz_score_norm(X)
preprocessing.StandardScaler().fit_transform(X)
# array([ 0.88537948,  0.17106352, -1.86022047,  0.85099404, -0.04721657])

3/ 归一化与标准化的作用2

归一化与标准化的本质其实是一种线性变换,即可以看成是对数据进行比例为 α\alphaα 的压缩,然后再平移 β\betaβ 个单位。线性变化具有的良好性质是,线性变化不改变原始数据的数值排序。

而归一化是将数据直接缩放到一个区间内,相对来说比较「硬」,它仅仅只跟数据的最大最小值有关。标准化更加「软」,它的缩放跟每一个点都有关,通过方差(Variance)体现。

从公式上看,当数据较为集中,α\alphaα 更小,数据在标准化后更为分散,原始数据分布广,那么 α\alphaα 比较大,那么标准化后数据就会被集中到更为小的范围。

那么什么时候使用归一化,什么时候使用标准化?

  • 如果对输出结果范围有要求,用归一化;
  • 数据较为稳定,不存在极端的最大最小值,用归一化;
  • 数据存在异常值或者较多噪音,用标准化;

当然使用归一化与标准化并没有一个明确的指标,可以两个方法都试一下,选择表现比较好的。


  1. 邱锡鹏:《神经网络与深度学习》; ↩︎

  2. 知乎回答:特征工程中的「归一化」有什么作用?— 微调; ↩︎

特征工程:归一化与标准化相关推荐

  1. 特征工程特征预处理归一化与标准化、鸢尾花种类预测代码实现

    一.特征预处理 特征工程目的:把数据转换成机器更容易识别的数据 scikit-learn:提供几个常见的实用程序函数和转换器类,以将原始特征向量更改为更适合下游估计器的表示形式.即通过一些转换函数将特 ...

  2. 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)

    数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...

  3. 归一化处理公式_特征工程连续特征的常见处理方式(含实例)

    点击标题下「小小挖掘机」可快速关注 连续特征离散化可以使模型更加稳健,比如当我们预测用户是否点击某个商品时,一个点击该商品所属类别下次数为100次和一个点击次数为105次的用户可能具有相似的点击行为, ...

  4. 机器学习__特征工程

    数据的提取 数据集的网站 常用数据集的结构组成 特征工程的描述 字典特征数据抽取 文本的特征抽取 TF-IDF(重要性的特征处理) 归一化(MinMaxScaler 标准化(standarScaler ...

  5. 特征工程——特征衍生

    难点 技术复杂.资料混乱.没有现成第三方库 特征衍生方法 单变量特征衍生--一个变量放进去衍生多个特征 双变量特征衍生--二组合生多 关键特征衍生--文本/时序 多变量特征衍生--三个及以上特征进行组 ...

  6. ML之FE:数据处理—特征工程之特征三化(标准化【四大数据类型(数值型/类别型/字符串型/时间型)】、归一化、向量化)简介、代码实现、案例应用之详细攻略

    ML之FE:数据处理-特征工程之特征三化(标准化[四大数据类型(数值型/类别型/字符串型/时间型)].归一化.向量化)简介.代码实现.案例应用之详细攻略 目录 真正意义的标准化与归一化 1.标准化/Z ...

  7. EOF-DataScience:数据预处理/特征工程之线性变换—四种特征缩放Scaling算法简介、标准化standardization、归一化Normalization的概述与区别

    DataScience:数据预处理/特征工程之线性变换-四种特征缩放Scaling算法简介.标准化standardization.归一化Normalization的概述与区别 目录 数据处理中常见的四 ...

  8. 特征工程之归一化及标准化

    特征的预处理:对数据进行处理 特征处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据 归一化: 多个特征同等重要的时候需要进行归一化处理 目的:使得某一个特征对最终结果不会造成更大影响 归 ...

  9. 机器学习特征工程--标准化和归一化

    关于归一化和标准化 1.标准化使用条件 (1)不需要对特征进行归一化:基于树模型的方法 举例:  随机森林/bagging/boosting/xgboost 需要标准化的(基于距离的模型):回归分析( ...

最新文章

  1. 【2】Vue项目引用Element UI(饿了么框架)菜单导航条初期配置
  2. C++通过HTTP请求Get或Post方式请求Json数据(转)
  3. 文本过滤--awk 3
  4. 远程桌面中Tab键不能补全的解决办法
  5. php数据库图片读取不出来,图片显示不出来,但是数据库里有显示
  6. 数据结构 旅游规划(Dijkstra+Dfs)
  7. Python实现人脸识别 + 手机推送功能,老板来了你就会收到短信提示
  8. 12 个实用的前端开发技巧总结
  9. Java常见面试题:对象的访问定位的两种方式
  10. memcache学习之c客户端
  11. 5个相见恨晚的Linux命令
  12. 猜数字游戏(Java源代码)
  13. 中间件的大舞台:高考网上阅卷系统揭秘
  14. 三菱FX系列PLC以太网连接组态王软件
  15. cannot retry due to redirection, in streaming mode
  16. 求最小公倍数的三种方法
  17. win10休眠_最牛的win10优化设置方法大全
  18. 东北大学《传输原理》随堂练习
  19. 重拾Java基础知识:枚举
  20. Java实现图片格式转换(通过ImageIO)

热门文章

  1. 万花筒写轮眼画法_万花筒写轮眼怎么画?
  2. google全屏快捷方式 关键字 kiosk
  3. Linux 之管道通信
  4. 使用Python横向合并excel文件
  5. 小程序商城制作一个需要多少钱
  6. 发布APP到腾讯应用宝
  7. python中[-1]、[:-1]、[::-1]、[-1:-7:-1]的使用方法
  8. word只能以安全模式打开
  9. 义隆循环左移c语言,义隆单片机EM78PXXX的乘除的运算法
  10. 小白一键重装linux系统重装,小白一键重装系统官网