一文详解特征缩放、标准化、归一化的定义、区别、特点和作用

摘要:
前言:我正在学习李弘毅的机器学习课程。助手给出的回归操作代码具有标准化的数据操作。我听说过数据标准化、规范化、批处理规范化等,但我并不真正理解它们。我不知道他们是什么,他们有什么不同。百度发现了很多文章,这些文章不是很系统。例如,大多数文章不理解标准化和规范化之间的区别或不同文章的内容矛盾。搜索谷歌后,我发现了许多有价值的文章,然后我写了这篇文章作为记录。相对而言,汉语社区比英语社区更糟糕,部分原因是过度使用名词
前言

我在学李宏毅的机器学习课程,助教给的回归作业代码中有数据标准化的操作。

我听过数据标准化,还有归一化、批量归一化等等,但不是很懂,不知道他们具体是什么、有什么区别。

百度上找了挺多文章,讲得都不是很系统,比如大多文章都没讲懂标准化和归一化的区别或者是不同文章讲的内容矛盾了。

用谷歌一搜,就找到了很多很有价值的相关文章,然后我也写了这篇文章做个记录。

相对来讲,中文社区要比英文社区差些,部分原因是名词滥用或中英翻译问题,比如标准化和归一化、常量指针和指针常量。emmm

概要

本文主要讲解了以下内容

  1. 特征缩放是什么/特征缩放的定义
  2. 归一化是什么/归一化的定义
  3. 标准化是什么/标准化的定义
  4. 归一化和标准化的区别
  5. 为什么要进行特征缩放/特征缩放有什么作用
  6. 有哪些常见的特征缩放方法
  7. 什么时候适合进行特征缩放/特征缩放方法的应用
名词定义

这几个词是有区别的,特别是标准化和归一化,不要滥用(在本文中也请区分这几个词)。

中文英文
特征缩放Feature Scaling
标准化Standardization(Z-Score Normalization)
归一化Normalization

可以认为Feature Scaling包括Standardization和Normalization,其中Standardization可以叫做Z-Score Normalization。

为什么需要进行特征缩放

背景:多指标量纲和数量级不同

使用单一指标对某事物进行评价并不合理,因此需要多指标综合评价方法。多指标综合评价方法,就是把描述某事物不同方面的多个指标综合起来得到一个综合指标,并通过它评价、比较该事物。

由于性质不同,不同评价指标通常具有不同的量纲和数量级。当各指标相差很大时,如果直接使用原始指标值计算综合指标,就会突出数值较大的指标在分析中的作用、削弱数值较小的指标在分析中的作用。

为消除各评价指标间量纲和数量级的差异、保证结果的可靠性,就需要对各指标的原始数据进行特征缩放(也有数据标准化、数据归一化的说法,但这些叫法不准确,所以不推荐)。

由于量纲和数量级不同,所以需要特征缩放。特征缩放可以显著提升部分机器学习算法的性能,但它对部分算法没有帮助。

不进行特征缩放会有什么后果

假如特征(x_1)的数值是100左右,特征(x_2)的数值是1左右,方程为(y=b+w_1x_1+w_2x_2),那(w_1)(y)的影响就更大,对Loss的影响也更大,损失函数关于(w_1)的梯度也更大,而损失函数关于(w_2)的梯度却很小,因此两个特征就不能使用相同的学习率。

不进行特征缩放的话,Error Surface就是一个椭圆,梯度下降时不一定是朝着最优点(圆心),速度就慢。

如果进行了特征缩放,Error Surface会尽可能趋近于圆,因此梯度下降时会一直朝着最优点(圆心),所以速度快。

各类算法是否需要进行特征缩放

基于梯度下降的算法(Gradient Descent Based Algorithms)

在基于梯度下降进行优化的算法中,需要进行特征缩放,比如线性回归、逻辑回归、神经网络等。

因为计算梯度时会使用特征的值,如果各特征的的取值范围差异很大,不同特征对应梯度的值就会差异很大。

为保证平滑走到最优点、按相同速率更新各特征的权重,需要进行特征放缩。

通过特征放缩,可以使数值范围变小,进而加速梯度下降。

基于距离的算法(Distance-Based Algorithms)

在基于距离进行优化的算法中,需要进行特征缩放,比如K近邻、K-Means、SVM、PCA等。

因为这些算法是基于数据点的特征值计算它们的距离,距离越小则两者越相似。

基于树的算法(Tree-Based Algorithms)

基于树的算法(比如决策树)对特征(features)的数值范围并不敏感,不需要进行特征缩放。

决策树仅基于单个feature拆分节点,并不受其它feature的影响。

线性判别分析、朴素贝叶斯等算法

这两个算法处理了特征数量级差异大的问题,因此不需要进行特征缩放。

四种特征缩放的方法

标准化和归一化都可以实现特征缩放,但两者是有区别的。

假设我们有一份数据(x),它有(N)(M)列,即有(N)个对象,每个对象有(M)个特征,(x^i_j)表示对象(i)的特征(j)

  • Standardization(Z-Score Normalization)
  • Mean Normalization
  • Min-Max Normalization
  • Unit Vector Normalization/Scaling to unit length
标准化(Standardization/Z-Score Normalization)
  • 定义

    公式为(hat x[:,j]=frac{x[:,j]-mean(x[:,j])}{std(x[:,j])}),其中(mean)代表平均值,(std)代表标准差,

    (mean(x[:,j])=frac{1}{N}cdotsum_{i=1}^Nx[i,j])

    (std(x[:,j])=sqrt{frac{1}{N-1}cdotsum^N_{i=1}(x[i,j]-mu_j)^2})

  • 特点

    使数据的平均值变为0、标准差变为1,不改变数据的分布类型,数值范围不一定,消除了数据的量纲差异。

  • 假设

    标准化假设数据是正态分布,但这个要求并不十分严格,如果数据是正态分布则该技术会更有效。

  • 何时使用

    当我们使用的算法假设数据是正态分布时,可以使用Standardization,比如线性回归、逻辑回归、线性判别分析。

    因为Standardization使数据平均值为0,也可以在一些假设数据中心为0(zero centric data)的算法中使用,比如主成分分析(PCA)。

归一化(Normalization)
  • 特点

    把数据调整到[0,1],并且消除了数据的量纲差异。

    也可以把数据调到[-1,1],在使用SVM和Adaboost时就需要这样。

  • 何时使用

    当我们不知道数据分布时或者我们知道数据不是正态分布时,这是一个很好的方法。

    换种说法就是,当我们使用的算法没有假设数据的分布类型时,就可以使用Normalization,比如K近邻算法和人工神经网络。

Mean Normalization

  • 定义

    (hat x[:,j]=frac{x[:,j]-mean(x[:,j])}{max(x[:,j])-min(x[:,j])})

    其中(mean)代表平均值,(max)代表最大值,(min)代表最小值。

  • 特点

    把数据调到[-1,1],平均值为0

  • 何时使用

    一些假设数据中心为0(zero centric data)的算法,比如主成分分析(PCA)。

Min-Max Normalization

  • 定义

    (hat x[:,j]=frac{x[:,j]-min(x[:,j])}{max(x[:,j])-min(x[:,j])})

    其中(max)代表最大值,(min)代表最小值。

  • 特点

    把数据调到[0,1]

  • 何时使用

    当处理具有严格数值范围要求的数据(比如图片)时,这非常有用。

Unit Vector Normalization/Scaling to unit length

  • 定义

    (hat x[i,:]=frac{x[i,:]}{||x[i,:]||})

    把每个对象的特征向量变成单位长度。

  • 特点

    把数据调到[0,1]

  • 何时使用

    当处理具有严格数值范围要求的数据(比如图片)时,这非常有用。

参考链接

下面几篇文章确实讲得很清晰、精准,作为机器学习新手的我都能看懂。

这篇文章的内容也都是从下面这些文章里提取总结出来的,所以如果我上面哪里讲得不清楚、不好的话,建议直接查看下面几篇文章或者直接谷歌搜索相关名词。

  1. https://baike.baidu.com/item/数据标准化

  2. https://www.analyticsvidhya.com/blog/2020/04/feature-scaling-machine-learning-normalization-standardization/

    这篇文章讲得很不错,建议参考。

  3. https://medium.com/greyatom/why-how-and-when-to-scale-your-features-4b30ab09db5e

    这篇文章讲得很不错,建议参考。

  4. https://machinelearningmastery.com/normalize-standardize-machine-learning-data-weka/

    这篇文章讲了Weka的使用,但我们并不需要看Weka怎么用,看文章里其它理论部分即可。

  5. https://towardsdatascience.com/understand-data-normalization-in-machine-learning-8ff3062101f0

    这篇文章更偏向于实践一些,也很不错。

  6. https://en.wikipedia.org/wiki/Feature_scaling


作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


免责声明:文章转载自《一文详解特征缩放、标准化、归一化的定义、区别、特点和作用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据可视化之powerBI技巧(二十三)Power BI可视化技巧,使用DAX自定义时间轴HTML中的按钮下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据分页技术(学习笔记)

    最近学习了WebCast中的数据分页技术,现把相关知识点归纳如下,便于以后总结复习: 一、 数据分页概述: 1.通常在Web页面,在显示数据量比较大时,无法在一个页面上显示所有的数据。 2.在某些特定场景下,并不需要返回所有满足条件的数据。 3.从数据的角度看,需要返回指定范围内的数据。 二、分页技术 1.数据层技术: 在数据库查询时,只查询特定页...

【SQL Server学习笔记】通过加密来保护数据库中的数据

在SQL Server 2005引入了内建数据加密,通过系统函数、证书、密钥完成加密。 一、通过函数加密。 二、与通过证书授权实现的数字证书相似,SQL Server证书包括了公钥和私钥这一对密钥,是数据库级的安全对象,他们用来加密和解密数据。 三、SQL Server还拥有创建非对称密钥和对称密钥的能力。非对称密钥与证书相似,公钥用来加密数据库,私钥用来...

SSIS 学习(2):数据流任务(上)【转】

数据流任务是SSIS中的一个核心任务,估计大多数ETL包中,都离不开数据流任务。所以我们也从数据流任务学起。   数据流任务包括三种不同类型的数据流组件:源、转换、目标。其中:   源:它是指一组数据存储体,包括关系数据库的表、视图;文件(平面文件、Excel 文件、Xml 文件等);系统内存中的数据集等。   转换:这是数据流任务的核心组件,如果说数据流...

gin连接mysql数据库

1.下载驱动 go get "github.com/go-sql-driver/mysql" 2.数据库连接(插入和查询) package main import ( "database/sql" "fmt" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" "log"...

C#连接SQLServer数据库

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Data; usingSystem.Data.Sql; usingSystem.Data.SqlClient;...

ArcMap 2 数据矢量化

若有不妥,还请见谅。留下留言,与君共勉。 前言:GIS专业的同学或与GIS接触的专业或其它,应该了解到数据的“矢量化”的不(酸)易(爽)。以目前博主的水平,本文暂时只能提供两种数据“矢量化”的方式。大家有好的方法或以后我接触的更多,会再次更新本博文。该博客的系列文章都会时常更新,离不开大家的建议。 本篇博文请与下一篇博文ArcMap 3 矢量数据下载(下载...