特征工程:归一化与标准化

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

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

1/ 最小最大值归一化

归一化(Normalization)方法泛指把数据特征转换为相同尺度的方法。最小最大值归一化(Min-Max Normalization)是最为简单的归一化方法,通过简单的缩放将每一个特征的取值范围归一到 $[0,1]$ 或 $[-1, 1]$. 假如样本数据 $\{\boldsymbol{x}^{(n)}\}^N_{n=1}$,最小最大归一化到 $[0,1]$ 的公式为:

$$ \hat{x}^{(n)}=\frac{x^{(n)}-\min{(x^{(n)})}}{\max_n(x^{(n)})-\min_n(x^{(n)})}, $$

最小最大归一化到 $[-1,1]$ ,可以先将数据归一化到 $[0, 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, $$

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

import torch
import numpy as np
from sklearn import preprocessing
np.random.seed(9) # 设置随机种子为 9

def 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. 首先计算均值与方差:

$$ \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} $$

然后将特征 $x^{(n)}$ 减去均值,并除以标准差,得到新的特征值 $\hat{x}^{(n)}$:

$$ \hat{x}^{(n)}=\frac{x^{(n)}-\mu}{\sigma} $$

标准差 $\sigma$ 不能为零,否则说明这一维的特征没有任何区分性,可以直接删掉。

标准化的代码:

def z_score_norm(X):
    mu = X.mean()   # 计算数据的均值
    sigma = X.std() # 计算数据的标准差(方差的平方根)
    return (X - mu) / sigma

z_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$ 比较大,那么标准化后数据就会被集中到更为小的范围。

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

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

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

目录
相关文章
|
Java Maven
IDEA项目编译时报:Warning:java: 源值1.5已过时
Idea中maven项目jdk编译version总是跳到1.5版本解决方案-Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
1675 2
IDEA项目编译时报:Warning:java: 源值1.5已过时
|
数据采集 机器学习/深度学习 资源调度
归一化和标准化
归一化和标准化
|
移动开发 安全 JavaScript
uniapp跨域解决
uniapp跨域解决
|
安全 网络协议 搜索推荐
远控安全金标准,ToDesk、向日葵、网易UU安全功能盘点,是否能攻破防线
本文对ToDesk、向日葵和网易UU三款主流远程控制软件进行了安全性评测。远程控制技术虽带来便利,但也存在安全隐患。文章从设备授权管理、远程连接与数据传输、隐私安全机制及主动防诈保护四个方面展开分析。ToDesk在二次验证、金融窗口保护等方面表现突出;向日葵基础安全功能完善但缺乏创新;网易UU侧重基础功能,安全机制尚待完善。最终通过星级表对比,ToDesk综合表现最佳,向日葵次之,网易UU适合低风险场景。未来远控软件需向体系化、智能化方向发展以应对不断演变的威胁。
|
网络协议 Java 关系型数据库
一篇文章彻底理解数据库的各种 JDBC 超时参数 2
一篇文章彻底理解数据库的各种 JDBC 超时参数
|
监控 程序员 芯片
STM32 你不知道的看门狗细节
你知道什么是看门狗吗?看门狗,实际上可以说就是一个简单的定时器功能,而这个定时器有一个输出端,可以输出复位信号。
1670 88
STM32 你不知道的看门狗细节
|
机器学习/深度学习 数据采集 算法
【大语言模型】-最新研究进展-2024-10-11
【大语言模型】-最新研究进展-2024-10-11,最新的5篇论文速读。
|
人工智能 JSON 自然语言处理
大语言模型做数据助手,浙大Data-Copilot高效调用、处理、可视化数据
大语言模型做数据助手,浙大Data-Copilot高效调用、处理、可视化数据
1296 1
|
XML JSON API
常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存。可对图片进行缩放等操作。      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Goog
8149 0