【调参18】如何对数据进行标准化(standardization)和归一化(normalization)_数据集标准化-程序员宅基地

技术标签: 机器学习  normalization  深度学习  标准化  归一化  深度学习(Deep Learning)  



深度学习神经网络学习如何将训练数据集中的样本从输入映射到输出。其模型的权重被初始化为较小的随机值,并根据训练数据集上的误差估计值通过优化算法进行更新。

考虑到在模型中使用小的权重以及在预测值和期望值之间使用误差,用于训练模型的输入和输出是一个重要因素。未缩放的输入变量可能导致学习过程缓慢或不稳定,回归问题上未缩放的变量可能导致梯度爆炸,从而导致学习过程失败。

数据准备涉及在训练神经网络模型之前,使用标准化(standardization)和归一化(normalization)来重新缩放输入和输出变量。


1. 基本知识

1.1 标准化(Standardization)和归一化(Normalization)

  • 标准化(Standardization)是指对具有高斯分布的变量进行缩放,以使其均值为零,标准差为1
  • 归一化(Normalization)是指缩放具有任何分布的变量,以使所有值都在零和一之间

在标准化变量后可以进行归一化。


1.2 原始输入数据的问题

深度学习神经网络模型学习从输入变量到输出变量的映射。对于每个变量,从输入空间中提取的数据的规模和分布可能会有所不同。输入变量可能具有不同的单位(例如,英尺,公里和小时),这意味着变量具有不同的比例。

输入变量之间的比例差异可能会增加建模问题的难度。较大的输入值可以导致学习较大权重值的模型。具有较大权重值的模型通常是不稳定的,这意味着它可能会在学习过程中表现不佳,并且对输入值的敏感性会导致较高的泛化误差

具有较大值分布的目标变量可能会导致较大的误差梯度值,从而导致权重值急剧变化,从而使学习过程不稳定。缩放输入和输出变量是使用神经网络模型的关键步骤。


1.3 输入变量的缩放方法

输入变量是网络在输入或可见层上进行预测的变量。一个好的经验法则是,输入变量应该是较小的值,可能在0-1的范围内,或者以均值为0、标准差为1进行标准化。输入变量是否需要缩放取决于问题和每个变量的具体情况。

如果数量分布是正态的(高斯分布),则应将其标准化,否则应将数据归一化。如果数量值的范围较大(10s,100s等)或较小(0.01、0.0001),则适用。如果数量值很小(接近0-1)并且分布有限(例如,标准偏差接近1),则可能无需进行数据缩放。

如果输入变量是线性组合的(例如在MLP中),那么至少从理论上讲,几乎没有必要对输入进行标准化。[…]但是,出于各种实际原因,标准化输入可以使训练更快并减少陷入局部最优的可能


1.4 输出变量是否应该缩放

输出变量是网络预测的变量。如果输出激活函数的范围为[0,1],那么显然必须确保目标值在该范围内。但是,通常最好选择适合目标分布的输出激活函数,而不是强制数据遵循输出激活函数。

如果是回归问题,那么输出将是实际值,最好用线性激活函数进行建模。如果值的分布是正态的,则可以标准化输出变量。否则,可以将输出变量归一化。


2. 数据缩放方法

2.1 数据归一化(Normalization)

数据归一化是对原始范围内的数据进行重新缩放,以使所有值都在0到1的范围内。标准化要求能够准确估计观察值的最小值和最大值。归一化公式如下:

y = (x - min) / (max - min)

比如最大观察值和最小观察值分别为30和-10的数据集,可以将任何值归一化,对于数据18.8,经过归一化后变为0.72。

y = (x - min) / (max - min)
y = (18.8 - (-10)) / (30 - (-10))
y = 28.8 / 40
y = 0.72

可以使用scikit-learn的 MinMaxScaler 标准化数据集。【API

MinMaxScaler和其它类似方法的用法和优势主要有以下三点:

  • 通过训练数据来学习缩放规则:对于归一化来说,这意味着训练数据将被用来估计观察值的最大值和最小值,在该API中,通过 fit() 方法实现。
  • 将缩放规则应用于训练数据:在该API中,使用transform()方法实现将缩放规则应用于训练数据,从而使用缩放后的数据训练模型。
  • 将缩放规则应用于预测数据:可以将模型预测输出通过反变换,变为未经缩放之前所对应的数据。

该API基本用法如下:

from sklearn.preprocessing import MinMaxScaler
# load data
data = ...
# create scaler
scaler = MinMaxScaler()

# fit scaler on data
scaler.fit(data)
# apply transform
normalized = scaler.transform(data)

#--------------------------------------
# fit and transform in one step
normalized = scaler.fit_transform(data)
#--------------------------------------

# inverse transform
inverse = scaler.inverse_transform(normalized)

2.2 数据标准化(Standardization)

标准化数据集涉及重新缩放值的分布,以使观测值的平均值为0,标准偏差为1。有时将其称为白化(whitening)。

与归一化类似,当数据具有不同比例的输入值时,标准化可能会有用,甚至在某些机器学习算法中也是必需的。标准化假设观测值符合高斯分布,且均值和标准差表现良好。如果不满足此期望,仍然可以标准化数据,但可能无法获得可靠的结果。标准化要求能够准确估计可观察值的平均值和标准差,可以从训练数据中估计这些值。

标准化公式如下:

mean = sum(x) / count(x)
standard_deviation = sqrt( sum( (x - mean)^2 ) / count(x))
y = (x - mean) / standard_deviation

例如平均值为10、标准差为5的数据集,对于数据20.7,归一化后的值为2.14。

y = (x - mean) / standard_deviation
y = (20.7 - 10) / 5
y = (10.7) / 5
y = 2.14

数据集的均值和标准差估计值对新数据的可靠性可能比最小和最大值更高。

可以使用scikit-learn的 StandardScaler 来标准化数据集。【API

该API基本用法如下:

from sklearn.preprocessing import StandardScaler
# load data
data = ...

# create scaler
scaler = StandardScaler()

# fit scaler on data
scaler.fit(data)
# apply transform
standardized = scaler.transform(data)

# ---------------------------------------
# fit and transform in one step
standardized = scaler.fit_transform(data)
# ---------------------------------------

# inverse transform
inverse = scaler.inverse_transform(standardized)

参考:
https://machinelearningmastery.com/how-to-improve-neural-network-stability-and-modeling-performance-with-data-scaling/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39653948/article/details/105962271

智能推荐

hdu1213-程序员宅基地

文章浏览阅读53次。hdu1213 #include <stdio.h>#include <string.h>#define MAXN 1100int parent[MAXN];int n,m;void UFset(){ for(int i=1;i<=n;++i) parent[i...

【转】牛仔文化与历史背景_西部牛仔是什么时代-程序员宅基地

文章浏览阅读3k次。  时装潮流这个不停流转的大车轮里,牛仔服饰一如其他服装,同样经历过高低起伏的时候。  早在五十年代,牛仔裤可说是美国人生活的一部分。有报章曾报导,大约百分之九十的美国青年除了睡觉和到教堂外,无论到哪里去,总少不了一条牛仔裤,牛仔裤成为普及文化。七十年代,摇滚乐的流行造就了牛仔裤的热潮。  1990至96年间,时装设计师称此段期间为牛仔服的黑暗时期,只有喜欢北欧soft rock、爱烫上大鬈发的乐迷、或是流连廉价商铺的消费者,才会热衷於那些高腰的石磨蓝萝卜型牛仔裤。稍後风_西部牛仔是什么时代

程序员最实用快捷键及CSDN换行_写完一行代码换行快捷键-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏11次。Ubuntuctrl + alt + t 调出新窗口terminalctrl + shift + t 新打开一个tab的terminalalt + 数字键 切换terminal的tabctrl + alt + d 打开桌面system + l 锁屏ctrl +alt + ↑↓←→ 切换虚拟桌面ctrl + 1 文件夹文件列表显示ctrl + 2 文件夹文件图片显示ctrl + ..._写完一行代码换行快捷键

Matlab括号使用详解_matlab纵轴的括号竖起来-程序员宅基地

文章浏览阅读3.4w次,点赞16次,收藏81次。Matlab中用括号去引用某Array或者是cell的内容,三者的区别:大括号 用于单元阵列的赋值 中括号 用于形成一个向量或矩阵小括号 通常用于一般的算术表达式,指示优先运算,还用于表示函数变量、向量下标和矩阵下标等到[ ] 中括号用来构建向量(Vectors)或者是矩阵(Matrices)。如[6.9 9.64 sqrt(-1)] 就是一个有三个元素的_matlab纵轴的括号竖起来

docker 启动nexus 出现的问题_unable to update instance pid: unable to create di-程序员宅基地

文章浏览阅读1.5w次。问题1:启动nexus时,没有权限操作宿主机文件夹docker run -d -p 8082:8082 -v /home/nexus-data/:/nexus-data/ --name nexus1 sonatype/nexus3Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.logWarning: F..._unable to update instance pid: unable to create directory /nexus-data/instan

java大数总结_java 大数总结-程序员宅基地

文章浏览阅读447次。java大数总结【定义】java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作。因为这两种类的使用方法是一样的,所以下面我们一BigInteger为例进行讲解【基本用法】基本用法1、新建一个值为123的大整数对象BigInteger a=ne..._java 大数总结

随便推点

计算机组成原理袁春风百度云,计算机组成原理[袁春风]chap32.pdf-程序员宅基地

文章浏览阅读735次。3.3 定点加 减运算计算机内的加减运算一般用补码实现1. 补码定点加减法规则假设A B是带符号的n位二进制定点整数 其补码形式为[A] =a a …… a [B] =b b …… b补 n-1 n-2 0 ..._计算机组成原理袁春风第二版pdf

电脑开机出现press f11 to start recovery system问题分析与解决_press f1 to enter recovery-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏7次。电脑开机可能出现下图情况这种情况通常是安装了一键还原精灵这样玩的还原工具,从而导致每次开机都会出现是否进入一键还原模式提示,一般情况下等待几秒就可以进入到开机界面了。出现的情况有以下两种:第一种:启动盘无效,有可能是你有软驱,并装进去了软盘;或者你的启动顺序是先软盘或者光驱,光驱里有光盘,分别退出软、光盘就可以正常启动。如果设了软驱或光驱优先启动,驱动器内有非启动盘就会这样的,弹出软盘或光盘就行了。最好直接设成硬盘优先启动。第二种:或者你磁盘分区不正确,以前设置过一键还原,但愿来的备份盘或文件以经_press f1 to enter recovery

阿里十年架构师,教你深度分析ConcurrentHashMap原理分析_concurrenthashmap底层原理-程序员宅基地

文章浏览阅读787次。ConcurrentHashMap的初步使用及场景CHM的使用ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高,那么这一节课我们就从ConcurrentHashMap的使用上以及源码层面来分析ConcurrentHashMap到底是如何实现安全性的ap..._concurrenthashmap底层原理

topic model(LDA 主题模型)-程序员宅基地

文章浏览阅读1.8k次。LDA简介在老师讲主题模型的时候看到这个LDA,刹时觉得很熟悉,在机器学习中,其实有两个LDA,一个是平时接触比较多的Linear Discriminant Analysis即线性判别分析,另一个便是这篇文章的主角Latent Dirichlet Allocation即隐含狄利克雷分布。提出目的用于推测文档(document)的主题分布,以及主题(topic)的词(word)分布;换个角度来说其实这个模型解决了文档和词汇的软聚类,即文档的主题分布概率可以当作文档聚类的指标,而词汇则归属于其隶属的主题而_topic model

golang sdk后端怎么用_Python比Golang慢多少?实际上两者差异并不大-程序员宅基地

文章浏览阅读95次。Python一直被诟病并发很弱,确实,因为GIL的关系,Python在单进程运行的情况下,无法利用多核CPU,所以就被其他能在单进程的情况下利用多核CPU的语言“吊打”性能了。但在使用了多进程后,结果仍然如此吗?为此,我特意做了一组实验。我用VirtualBox新建了一台ubuntu虚拟机,配置为10G内存,4核CPU使用apache2的ab进行测试,并发数为1000,请求10万次。Python程..._python接入go的sdk

2k屏幕开多少缩放_酷比魔方Expand X便携显示器评测:13英寸+2K分辨率+反向充电...-程序员宅基地

文章浏览阅读987次。随着我们手上的数码科技产品越来越多,移动办公、娱乐也逐渐成为不少朋友的日常,与之配套的便携显示器也逐渐由鸡肋变成了实用型产品。众所周知现在旗舰手机的性能越来越强大,在移动办公的时候已经可以替代笔记本电脑了,但手机的屏幕太小看着费力,这时候搭配便携显示器,不仅可以提升办公效率,也方便用户携带,可以说是继笔记本电脑之后的办公娱乐神器。早期的便携显示器,做的比较笨重,功能也比较单一。而现在的便..._2k笔记本缩放多少合适

推荐文章

热门文章

相关标签