Batch Norm常用方法

本文介绍了机器学习中特征缩放的重要性及方法,包括归一化、平均值规范化、标准化和缩放到单位长度等,并探讨了不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在运用一些机器学习算法的时候不可避免地要对数据进行特征缩放(feature scaling),比如:在随机梯度下降(stochastic gradient descent)算法中,特征缩放有时能提高算法的收敛速度。

特征缩放的目标就是数据规范化,使得特征的范围具有可比性。它是数据处理的预处理,对后面的使用数据具有关键作用。

机器算法为什么要特征缩放?

  • 特征缩放还可以使机器学习算法工作的更好。比如在K近邻算法中,分类器主要是计算两点之间的欧几里得距离,如果一个特征比其它的特征有更大的范围值,那么距离将会被这个特征值所主导。因此每个特征应该被归一化,比如将取值范围处理为0到1之间。
  • 第二个原因则是,特征缩放也可以加快梯度收敛的速度。

"标准化"和"归一化"这两个中文词要指代四种Feature scaling(特征缩放)方法。

数据的归一化和缩放非常重要,会影响到特征选择和对真实业务问题的判定。

特征缩放的方法

调节比例(Rescaling)(不免疫outlier)

这种方法是将数据的特征缩放到[0,1]或[-1,1]之间,使得完整向量具有长度1。缩放到什么范围取决于数据的性质。对于这种方法的公式如下:
x′=x−min(x)max(x)−min(x) x^\prime = \frac{x-min(x)}{max(x)-min(x)} x=max(x)min(x)xmin(x)
xxx是最初的特征值,x′x^\primex是缩放后的值。

适用场景:

  • 如果对输出结果范围有要求,用归一化
  • 如果数据较为稳定,不存在极端的最大最小值,用归一化

缺点:这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

from sklearn.preprocessing import MinMaxScaler
 
#初始化一个scaler对象
scaler = MinMaxScaler()
 
#调用scaler的fit_transform方法,把我们要处理的列作为参数传进去
data['标准化后的A列数据'] = scaler.fit_transform(data['A列数据'])

平均值规范化(Mean normalization)(不免疫outlier)

x′=x−mean(x)max(x)−min(x) x^\prime = \frac{x-mean(x)}{max(x)-min(x)} x=max(x)min(x)xmean(x)

适用场景:矩阵分解

标准化(Standardization)(不免疫outlier)

特征标准化使每个特征的值有零均值(zero-mean)和单位方差(unit-variance)。这个方法在机器学习地算法中被广泛地使用。例如:SVM,逻辑回归和神经网络。这个方法的公式如下:
x′=x−mean(x)std(x) x^\prime=\frac{x-mean(x)}{std(x)} x=std(x)xmean(x)
标准差的定义为:
std(x)=∑(x−mean(x))2n std(x)=\sqrt{\frac{\sum(x-mean(x))^2}{n}} std(x)=n(xmean(x))2

适用场景

  • SVM、LR、神经网络
  • 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
# 方法1
from sklearn.proprocessing import scale
df_train['feature'] = scale(df_train['feature'])
 
# 方法2
# 一般会把train和test集放在一起做标准化,或者在train集上做标准化后,用同样的标准化器去标准化test集,此时可以用scaler
from sklearn.proprocessing import StandardScaler
scaler = StandardScaler().fit(df_train)
scaler.transform(df_train)
scaler.transform(df_test)

缩放到单位长度(Scaling to unit length)(不免疫outlier)

x′=x∥x∥ x^\prime = \frac{x}{\left \| x \right \|} x=xx
就是除以向量的欧拉长度( the Euclidean length of the vector),二维范数。相当于每个组件除以向量的欧几里德(也就是欧拉)长度。
这种方式在TansE中比较常见。

绝对值标准化(不免疫outlier)

专为稀疏数据而生。将每个要素缩放到[-1,1]范围,它不会移动/居中数据,因此不会破坏任何稀疏性。该估计器单独地缩放每个特征,使得训练集中的每个特征的最大绝对值将是1.0。该缩放器也可以应用于稀疏CSR或CSC矩阵

鲁棒性标准化(免疫outlier)

专为异常值而生。标准差标准化(第一种,最常用的那种)对数据中出现的异常值处理能力不佳,因此诞生了robust_scale,这种不怕异常值扰动的数据缩放法。此Scaler根据分位数范围(默认为IQR:Interquartile Range)删除中位数并缩放数据。 IQR是第1四分位数(第25个分位数)和第3个四分位数(第75个分位数)之间的范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值