数据的feature scaling

本文详细解释了特征缩放(Feature Scaling)的概念及其在基于梯度下降模型中的作用,包括min-max标准化、log函数转换、atan函数转换及z-score标准化等多种方法。

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

刚开始还研究啥是归一化、啥是标准化,网上说啥的都有。当看到feature scaling这个概念之后,才算是把这个问题搞清楚。

目前的理解:对数据进行feature scaling的目的(在基于梯度下降的模型),让梯度更均匀,避免梯度小的方向更新缓慢,梯度大的方向不容易收敛。防止最终解被数值大的特征所主导。

 

转载:

准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

  其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上,常见的数据归一化的方法有:

min-max标准化(Min-max normalization)

  也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

  其中max为样本数据的最大值,min为样本数据的最小值。这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

log函数转换

  通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

  看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

atan函数转换

  用反正切函数也可以实现数据的归一化:

  使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上。

  而并非所有数据标准化的结果都映射到[0,1]区间上,其中最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法:

z-score 标准化(zero-mean normalization)

  也叫标准差标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

  其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

中心化

        均值搞成0,x'=x-μ

还有白化和PCA等。。。

 

实际操作

PCA和白化只是为了介绍的完整性,实际上再卷积神经网络中并不会采用这些变换.然而对数据进行零中心化操作还是非常重要的,对每个像素进行归一化也很常见.

常见错误

进行预处理很重要的一点是,任何预处理策略(比如数据均值)都只能在训练集数据上进行计算,算法训练完毕后再应用到验证集或者测试集上.

  • 例如,如果计算整个数据集图像的平均值,然后每张图片都减去平均值,最后才将整个数据集划分成训练/验证/测试集,这个做法是错误的.
  •  正确做法是,应该先分成训练/验证/测试集,只是从训练集中秋图片平均值,然后各个集(训练/验证/测试集)中的图像再减去这个平均值
Scikit-learn库提供了几种常见的特征缩放方法,用于调整数据集中的数值特征,以便于模型训练。这些方法包括: 1. **MinMax Scaling**[^2]: ```python from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) X_scaled = scaler.fit_transform(X) ``` 这种方法将每个特征缩放到0到1的范围内,通过计算每个特征的最小值(min)和最大值(max),转换公式为 `X_scaled = (X - min) / (max - min)`。 2. **Standardization**: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` 标准化方法通常用于正态分布假设的数据,它将数据转换为均值为0,标准差为1的标准正态分布。 3. **Robust Scaling**: ```python from sklearn.preprocessing import RobustScaler scaler = RobustScaler() X_scaled = scaler.fit_transform(X) ``` RobustScaler更注重异常值,使用四分位范围(Q1-Q3)来缩放数据。 4. **Normalizer**: ```python from sklearn.preprocessing import Normalizer normalizer = Normalizer(norm='l2') X_normalized = normalizer.transform(X) ``` 对于单位向量长度的归一化,如L2范数。 5. **Quantile Transformer**[^1]: ```python from sklearn.preprocessing import QuantileTransformer transformer = QuantileTransformer(output_distribution='uniform') X_transformed = transformer.fit_transform(X) ``` 这个类允许对数据进行非线性变换,保持数据的分布特性。 使用时,先选择合适的scaler,然后调用`fit_transform()`方法对数据进行预处理。这样可以确保不同特征具有相似的重要性,并帮助某些算法更好地工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值