Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么要做特征归一化/标准化?

为什么要做特征归一化/标准化?

作者头像
李拜六不开鑫
修改于 2020-04-26 07:54:07
修改于 2020-04-26 07:54:07
2.3K0
举报
文章被收录于专栏:本立2道生本立2道生

写在前面


Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术,有时甚至决定了算法能不能work以及work得好不好。谈到feature scaling的必要性,最常用的2个例子可能是:

  • 特征间的单位(尺度)可能不同,比如身高和体重,比如摄氏度和华氏度,比如房屋面积和房间数,一个特征的变化范围可能是[1000, 10000],另一个特征的变化范围可能是[-0.1, 0.2],在进行距离有关的计算时,单位的不同会导致计算结果的不同,尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略,为了消除特征间单位和尺度差异的影响,以对每维特征同等看待,需要对特征进行归一化
  • 原始特征下,因尺度差异,其损失函数的等高线图可能是椭圆形,梯度方向垂直于等高线,下降会走zigzag路线,而不是指向local minimum。通过对特征进行zero-mean and unit-variance变换后,其损失函数的等高线图更接近圆形,梯度下降的方向震荡更小,收敛更快,如下图所示,图片来自Andrew Ng。

对于feature scaling中最常使用的Standardization,似乎“无脑上”就行了,本文想多探究一些为什么,

  • 常用的feature scaling方法都有哪些?
  • 什么情况下该使用什么feature scaling方法?有没有一些指导思想?
  • 所有的机器学习算法都需要feature scaling吗?有没有例外?
  • 损失函数的等高线图都是椭圆或同心圆吗?能用椭圆和圆来简单解释feature scaling的作用吗?
  • 如果损失函数的等高线图很复杂,feature scaling还有其他直观解释吗?

根据查阅到的资料,本文将尝试回答上面的问题。但笔者能力有限,空有困惑,能讲到哪算哪吧(微笑)。

常用feature scaling方法


在问为什么前,先看是什么。

给定数据集,令特征向量为x,维数为D,样本数量R,可构成D×R的矩阵,一列为一个样本,一行为一维特征,如下图所示,图片来自Hung-yi Lee pdf-Gradient Descent:

feature scaling的方法可以分成2类,逐行进行和逐列进行。逐行是对每一维特征操作,逐列是对每个样本操作,上图为逐行操作中特征标准化的示例。

具体地,常用feature scaling方法如下,来自wiki

上述4种feature scaling方式,前3种为逐行操作,最后1种为逐列操作。

容易让人困惑的一点是指代混淆,Standardization指代比较清晰,但是单说Normalization有时会指代min-max normalization,有时会指代Standardization,有时会指代Scaling to unit length

计算方式上对比分析


前3种feature scaling的计算方式为减一个统计量再除以一个统计量,最后1种为除以向量自身的长度

  • 减一个统计量可以看成选哪个值作为原点,是最小值还是均值,并将整个数据集平移到这个新的原点位置。如果特征间偏置不同对后续过程有负面影响,则该操作是有益的,可以看成是某种偏置无关操作;如果原始特征值有特殊意义,比如稀疏性,该操作可能会破坏其稀疏性。
  • 除以一个统计量可以看成在坐标轴方向上对特征进行缩放,用于降低特征尺度的影响,可以看成是某种尺度无关操作。缩放可以使用最大值最小值间的跨度,也可以使用标准差(到中心点的平均距离),前者对outliers敏感,outliers对后者影响与outliers数量和数据集大小有关,outliers越少数据集越大影响越小。
  • 除以长度相当于把长度归一化,把所有样本映射到单位球上,可以看成是某种长度无关操作,比如,词频特征要移除文章长度的影响,图像处理中某些特征要移除光照强度的影响,以及方便计算余弦距离或内积相似度等。

稀疏数据、outliers相关的更多数据预处理内容可以参见scikit learn-5.3. Preprocessing data

从几何上观察上述方法的作用,图片来自CS231n-Neural Networks Part 2: Setting up the Data and the Loss,zero-mean将数据集平移到原点,unit-variance使每维特征上的跨度相当,图中可以明显看出两维特征间存在线性相关性,Standardization操作并没有消除这种相关性。

可通过PCA方法移除线性相关性(decorrelation),即引入旋转,找到新的坐标轴方向,在新坐标轴方向上用“标准差”进行缩放,如下图所示,图中同时描述了unit length的作用——将所有样本映射到单位球上。

当特征维数更多时,对比如下,图片来自youtube,

总的来说,归一化/标准化的目的是为了获得某种“无关性”——偏置无关、尺度无关、长度无关……当归一化/标准化方法背后的物理意义和几何含义与当前问题的需要相契合时,其对解决该问题就有正向作用,反之,就会起反作用。所以,“何时选择何种方法”取决于待解决的问题,即problem-dependent。

feature scaling 需要还是不需要


下图来自data school-Comparing supervised learning algorithms,对比了几个监督学习算法,最右侧两列为是否需要feature scaling。

下面具体分析一下。

什么时候需要feature scaling?

  • 涉及或隐含距离计算的算法,比如K-means、KNN、PCA、SVM等,一般需要feature scaling,因为
    • zero-mean一般可以增加样本间余弦距离或者内积结果的差异,区分力更强,假设数据集集中分布在第一象限遥远的右上角,将其平移到原点处,可以想象样本间余弦距离的差异被放大了。在模版匹配中,zero-mean可以明显提高响应结果的区分度。
    • 就欧式距离而言,增大某个特征的尺度,相当于增加了其在距离计算中的权重,如果有明确的先验知识表明某个特征很重要,那么适当增加其权重可能有正向效果,但如果没有这样的先验,或者目的就是想知道哪些特征更重要,那么就需要先feature scaling,对各维特征等而视之
    • 增大尺度的同时也增大了该特征维度上的方差,PCA算法倾向于关注方差较大的特征所在的坐标轴方向,其他特征可能会被忽视,因此,在PCA前做Standardization效果可能更好,如下图所示,图片来自scikit learn-Importance of Feature Scaling,

多维情况下可以分解成多个上图,每个维度上分别下降,参数W为向量,但学习率只有1个,即所有参数维度共用同一个学习率(暂不考虑为每个维度都分配单独学习率的算法)。收敛意味着在每个参数维度上都取得极小值,每个参数维度上的偏导数都为0,但是每个参数维度上的下降速度是不同的,为了每个维度上都能收敛,学习率应取所有维度在当前位置合适步长中最小的那个。下面讨论feature scaling对gradient descent的作用,

  • zero center与参数初始化相配合,缩短初始参数位置与local minimum间的距离,加快收敛。模型的最终参数是未知的,所以一般随机初始化,比如从0均值的均匀分布或高斯分布中采样得到,对线性模型而言,其分界面初始位置大致在原点附近,bias经常初始化为0,则分界面直接通过原点。同时,为了收敛,学习率不会很大。而每个数据集的特征分布是不一样的,如果其分布集中且距离原点较远,比如位于第一象限遥远的右上角,分界面可能需要花费很多步骤才能“爬到”数据集所在的位置。所以,无论什么数据集,先平移到原点,再配合参数初始化,可以保证分界面一定会穿过数据集。此外,outliers常分布在数据集的外围,与分界面从外部向内挪动相比,从中心区域开始挪动可能受outliers的影响更小。

不同方向上的下降速度变化不同(二阶导不同,曲率不同),恰由输入的协方差矩阵决定,通过scaling可以减小不同方向上的曲率差异。将每个维度上的下降分解来看,给定一个下降步长,如果不够小,有的维度下降的多,有的下降的少,有的还可能在上升,损失函数的整体表现可能是上升也可能是下降,就会不稳定。scaling后不同方向上的曲率相对更接近,更容易选择到合适的学习率,使下降过程相对更稳定。

  • 另有从Hessian矩阵特征值以及condition number角度的理解,详见Lecun paper-Efficient BackProp中的Convergence of Gradient Descent一节,有清晰的数学描述,同时还介绍了白化的作用——解除特征间的线性相关性,使每个维度上的梯度下降可独立看待。
  • 文章开篇的椭圆形和圆形等高线图,仅在采用均方误差的线性模型上适用,其他损失函数或更复杂的模型,如深度神经网络,损失函数的error surface可能很复杂,并不能简单地用椭圆和圆来刻画,所以用它来解释feature scaling对所有损失函数的梯度下降的作用,似乎过于简化,见Hinton vedio-3.2 The error surface for a linear neuron
  • 对于损失函数不是均方误差的情况,只要权重w与输入特征x间是相乘关系,损失函数对w的偏导必然含有因子x,w的梯度下降速度就会受到特征x尺度的影响。理论上为每个参数都设置上自适应的学习率,可以吸收掉x尺度的影响,但在实践中出于计算量的考虑,往往还是所有参数共用一个学习率,此时x尺度不同可能会导致不同方向上的下降速度悬殊较大,学习率不容易选择,下降过程也可能不稳定,通过scaling可对不同方向上的下降速度有所控制,使下降过程相对更稳定。

  • 对于传统的神经网络,对输入做feature scaling也很重要,因为采用sigmoid等有饱和区的激活函数,如果输入分布范围很广,参数初始化时没有适配好,很容易直接陷入饱和区,导致梯度消失,所以,需要对输入做Standardization或映射[0,1]、[-1,1],配合精心设计的参数初始化方法,对值域进行控制。但自从有了Batch Normalization,每次线性变换改变特征分布后,都会重新进行Normalization,似乎可以不太需要对网络的输入进行feature scaling了?但习惯上还是会做feature scaling。

什么时候不需要Feature Scaling?

  • 与距离计算无关的概率模型,不需要feature scaling,比如Naive Bayes;
  • 与距离计算无关的基于树的模型,不需要feature scaling,比如决策树、随机森林等,树中节点的选择只关注当前特征在哪里切分对分类更好,即只在意特征内部的相对大小,而与特征间的相对大小无关。

小结


这篇文章写的十分艰难,一开始以为蛮简单直接,但随着探索的深入,冒出的问号越来越多,打破了很多原来的“理所当然”,所以,在写的过程中不停地做加法,很多地方想解释得尽量直观,又不想照搬太多公式,但自己的理解又不够深刻,导致现在叙述这么冗长,希望以后在写文时能更专注更精炼。

参考


  • wiki-Feature scaling
  • wiki-Backpropagation
  • Hung-yi Lee pdf-Gradient Descent
  • quora-Why does mean normalization help in gradient descent?
  • scikit learn-Importance of Feature Scaling
  • scikit learn-5.3. Preprocessing data
  • scikit learn-Compare the effect of different scalers on data with outliers
  • data school-Comparing supervised learning algorithms
  • Lecun paper-Efficient BackProp
  • Hinton vedio-3.2 The error surface for a linear neuron
  • CS231n-Neural Networks Part 2: Setting up the Data and the Loss
  • ftp-Should I normalize/standardize/rescale the data?
  • medium-Understand Data Normalization in Machine Learning
  • Normalization and Standardization
  • How and why do normalization and feature scaling work?
  • Is it a good practice to always scale/normalize data for machine learning?
  • When conducting multiple regression, when should you center your predictor variables & when should you standardize them?
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么要做特征的归一化/标准化?
来源:深度学习爱好者、极市平台https://blog.csdn.net/blogshinelee/article/details/102875044本文约4300字,建议阅读8分钟本文探索对于feature scaling中最常使用的Standardization。 写在前面 Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术,有时甚至决定了算法能不能work以及work得好不好。谈到feature scaling的必要性,最常用的2个例子可能是: 特
数据派THU
2022/07/19
2610
为什么要做特征的归一化/标准化?
归一化、标准化、正则化公式相关小记「建议收藏」
作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
全栈程序员站长
2022/11/10
2K0
归一化、标准化、正则化公式相关小记「建议收藏」
machine learning 之 多元线性回归
整理自Andrew Ng的machine learning课程 week2. 目录: 多元线性回归 Multivariates linear regression /MLR Gradient descent for MLR Feature Scaling and Mean Normalization Ensure gradient descent work correctly Features and polynomial regression Normal Equation Vectorization 前
Echo_fy
2018/06/20
5210
数据预处理 | 数据标准化及归一化
数据预处理时才发现不清楚是否需要做数据标准化及归一化?也不清楚标准化及归一化标准化及归一化区别在哪?有哪些标准化和归一化的工具和方法?
数据STUDIO
2021/06/24
1.4K0
数据预处理|关于标准化和归一化的一切
数据预处理是最令数据科学家头秃的工作 之前在知乎看过一个问题你为什么离开数据科学行业?一位知友est答曰:数据清洗10小时,拟合2分钟,如此重复996。 这条回答下面的评论更是精彩,居然真的会眼瞎。
统计学家
2019/07/22
1.9K0
数据预处理|关于标准化和归一化的一切
机器学习笔记之数据缩放 标准化和归一化
使用单一指标对某事物进行评价并不合理,因此需要多指标综合评价方法。多指标综合评价方法,就是把描述某事物不同方面的多个指标综合起来得到一个综合指标,并通过它评价、比较该事物。由于性质不同,不同评价指标通常具有不同的量纲和数量级。当各指标相差很大时,如果直接使用原始指标值计算综合指标,就会突出数值较大的指标在分析中的作用、削弱数值较小的指标在分析中的作用。为消除各评价指标间量纲和数量级的差异、保证结果的可靠性,就需要对各指标的原始数据进行特征缩放。
Jetpropelledsnake21
2021/03/03
2.5K0
如果你还不清楚特征缩放&特征编码的作用,不妨看看这篇文章
如果你你正在学习机器学习,那么特征工程必不可少,特征缩放和特征编码刚是其中的一项,如果你之前不了解,那么希望这边文章能对你有所启发。关于特征缩放和特征编码,前者主要是归一化和正则化,用于消除量纲关系的影响,后者包括了序号编码、独热编码等,主要是处理类别型、文本型以及连续型特征。
abs_zero
2019/05/05
2.1K0
如果你还不清楚特征缩放&特征编码的作用,不妨看看这篇文章
机器学习归一化特征编码
因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1——10,第二个特征的取值范围为1——10000。在梯度下降算法中,代价函数为最小平方误差函数,所以在使用梯度下降算法的时候,算法会明显的偏向于第二个特征,因为它的取值范围更大。在比如,k近邻算法,它使用的是欧式距离,也会导致其偏向于第二个特征。对于决策树和随机森林以及XGboost算法而言,特征缩放对于它们没有什么影响。
@小森
2024/06/15
1260
机器学习归一化特征编码
工业数据分析之数据归一化 | 冰水数据智能专题 | 2nd
归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。
用户7623498
2020/08/04
7400
工业数据分析之数据归一化 | 冰水数据智能专题 | 2nd
python归一化函数_机器学习-归一化方法
引入归一化,是由于在不同评价指标(特征指标)中,其量纲或是量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,可能导致某些指标被忽视,影响到数据分析的结果。
全栈程序员站长
2022/11/10
1.5K0
python归一化函数_机器学习-归一化方法
数据归一化和两种常用的归一化方法
数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。以下是两种常用的归一化方法:
全栈程序员站长
2022/09/10
2.8K0
数据归一化和两种常用的归一化方法
Machine Learning笔记——单变量线性回归
在机器学习中,样本一般分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中,训练集用于建立模型。
阳光罗诺
2018/11/27
5910
Machine Learning笔记——单变量线性回归
【腾讯云|云原生】自定制轻量化表单Docker快速部署
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/09/30
2420
数据处理中的标准化、归一化,究竟是什么?
今天说一个比较重要的内容,无论是在算法建模还是在数据分析都比较常见:数据归一化和标准化。
小一不二三
2021/02/18
6.3K0
数据处理中的标准化、归一化,究竟是什么?
机器学习中为什么需要对数据进行归一化?
如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;
用户5745385
2019/07/04
11.5K0
机器学习中为什么需要对数据进行归一化?
Spark ML 正则化 标准化 归一化 ---- 基本概念简介
正则化是为了防止过拟合, 正则化也可以叫做或者译成“规则项”,规则化就是说给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀。
流川疯
2021/12/06
5620
Spark ML 正则化 标准化 归一化 ---- 基本概念简介
第五章 多变量线性回归
n :特征量的数目 x^(i) :第 i 个训练样本的输入特性值 x^(i)_j :第 i 个训练样本中第 j 个特征量的值
tomas家的小拨浪鼓
2019/03/08
8950
第五章 多变量线性回归
标准化层(BN,LN,IN,GN)介绍及代码实现
在神经网络搭建时,通常在卷积或者RNN后都会添加一层标准化层以及激活层。今天介绍下常用标准化层--batchNorm,LayerNorm,InstanceNorm,GroupNorm的实现原理和代码。
languageX
2021/03/13
12.1K0
可视化损失函数空间三维图
一般情况下我们都是使用折线图绘制和监控我们的损失函数, y 轴是损失函数的值,x 轴是训练的轮次。这种情况下我们只有损失函数空间的一维视图,并且只能看到小范围的参数梯度。
deephub
2021/10/09
7440
可视化损失函数空间三维图
独家 | 数据转换:标准化vs 归一化(附代码&链接)
本文将解释数据转换中常见的特征缩放方法:“标准化”和“归一化”的不同之处,并举例说明何时使用,以及如何使用它们。
数据派THU
2020/05/26
1.3K0
推荐阅读
相关推荐
为什么要做特征的归一化/标准化?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档