在机器学习中,会有许多数据需要处理,其中一个就是归一化处理。它对于奇异数据的处理的作用和我们为什么要用归一化在下面这一篇文章。
https://blog.csdn.net/zenghaitao0128/article/details/78361038
训练神经网络,其中一个加速训练的方法就是归一化输入。
假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:
1、零均值 均值用μ表示。它是一个向量,x等于每个训练数据x减去μ,意思是移动训练集,直到它完成零均值化。
,
这就是第一个图变为第二个图的过程。
2、归一化方差
注意特征x2比特征x1的方差要大得多。在这里我们是要给赋值。
,
是一个向量,它的每一个特征都有一个方差。我们再把所有数据除以
。则从第二个到第三个图所示。
在这里,除以方差我不是很理解,自己写了几个数除了一下,发现就是离均值近的会变远,离得远的会变近。也就可以把狭长的数据域变得圆润一点了。
我们不希望训练集和测试集的归一化有所不同,则我们要保证训练集和测试集合的μ和是一样的,而不是分别进行估值。
实际上如果假设特征范围x1在0-1之间,x2的范围在-1到1之间,x3范围在1-2之间,它们是相似范围,所以会表现得很好。
当它们在非常不同的取值范围内,如其中一个从1到1000,另一个从0到1,这对优化算法非常不利。但是仅将它们设置为均化零值,假设方差为1,就像上一张幻灯片里设定的那样,确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。
所以如果输入特征处于不同范围内,可能有些特征值从0到1,有些从1到1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,所以通常可以做归一化处理,虽然不确定它能否提高训练或算法速度。