程序员开发实例大全宝库

网站首页 > 编程文章 正文

神经网络中数据的标准化(神经网络回归的时候要标准化吗)

zazugpt 2024-09-04 00:21:31 编程文章 26 ℃ 0 评论

本篇文字介绍Encog机器学习框架中数据标准化。神经网络可以处理数据,但是,你不能直接将任意类型的数据直接交给神经网络去处理,这样神经网络也会懵逼的,必须将这种原始的数据转换为神经网络能够处理的形式,这种称为数据的规范化,也叫做标准化。

神经网络一般接受一个数值类型作为它的输入,通常为了能达到最大的效率,而将这些数值控制在-1到+1或者0到+1之间,至于选择哪个范围通常是由选择的激活函数决定的,比如某些激活函数有正负两个范围例如双曲正切激活函数,那我们就选择将数据标准化为-1到+1之间,如果仅仅有正的范围例如sigmoid激活函数,那可以选择将数据标准化为0到+1之间。

比如对于iris数据集,这个数据集是一个分类的问题,然而,这些原始的数据对于神经网络来说并没有神马用。一下是这个数据集的部分截图,如果想要该数据集的可以私信小编。

所以对于这样一个数据集,要想神经网络能够使用,我们必须将其标准化(规范化/归一化)。可以将其映射到-1到+1之间。

数值类型的标准化

数字值的标准化其实就是将一个数字值映射到一个范围比如-1到1。首先,要标准化当前属性的数值,那当前的属性的数值范围必须是已知的,比如对于iris数据集中的属性范围如下:

那对于petal length的范围是1.0到6.9,然后这里我们要将其映射为-1到+1的长度,那么我们可以一个公式来完成: f(x)=(x-dL)(nH-nL) / (dH-dL) + nL, 该公式中变量d指定了该数据值的最大值和最小值,变量n指定了我们确定的标准化范围比如-1到1,例如,对于规范化一个petal length值为3,到范围-1到+1,那根据以上的公式代入数据就变成为:f(3)=(3-1)(1-(-1)) / (6.9 - 1.0) + (-1) ≈ -0.32203, 这个值将传递给神经网络进行处理。

同样的,我们输入到神经网络的值时经过标准化处理后的值,那神经网络输出后的结果也是标准化值,这时候我们可以通过如下公式将其还原为我们需要的值: f(x) =((dL - dH)x - dL * nH + dH * nL) / (nL-nH), 比如我们上面的f(-0.32203)=((1.0 - 6.9) * (-0.32203) - 1.0 * 1 + 6.9 * (-1)) / (-1 - (1)) ≈ 3 。

在Encog中已经为我们提供了NormalizedField类可以实现以上功能。

输出结果如下:

非数值类型的标准化

除了数值类型的数据之外还有很多的非数值类型的数据比如:性别,颜色,物种等等。神经网络最擅长处理的事固定不变的非数值类型的值,但是前提是得将其标准化,然后在输入到神经网络。对于IRIS数据集,有三种不同的物种需要识别,这个值是不能改变的。如果对神经网络进行三种训练,那神经网络就不可能识别出五种类别。

Encog中支持两种不同的非数值类型的标准化方式,最简单的方式被称为“1-n”编码,1-n编码往往很难训练,特别是如果有更多的类别需要标准化的时候神经网络在训练时误差就会很大。第二种为等边编码,等边编码通常比1-n编码为更好的选择。

非数值型的标准化之1-n编码

1-n编码是一个非常简单的标准化形式,例如,还是对于Iris数据集,输入我们已经处理了,现在来考虑输出,神经网络需要输出是属于哪个类别的Iris, 对于该数据集总共有setosa,versicolor,virginica这三种类别。

如果使用1-n编码来标准化,那可以设计神经网络有三个输出的神经元,这三个神经元中的每一个都代表一种Iris的种类。生成1-n训练数据是比较容易的,只需给对应于所选iris的神经元分配一个+1, 然后给剩余的神经元分配一个-1,就可以了。比如:输出为1, -1, -1的时候为setosa, 输出位-1, 1, -1的时候就为versicolor, 输出为-1, -1, 1的时候为virginical。

等边编码

输出神经元根据训练集中提供的理想输出值不断地进行检查,实际输出和理想输出之间的误差用百分比表示,这样1-n编码就会有问题,如果神经网络预测的是versicolor iris,这时候应该输出-1, 1, -1。但是实际上有可能会输出-1, -1, 1。

每个分类的等边值与神经网络的实际输出之间的最短距离,为此,我们必须确定每个类别的输出是唯一的,每一组输出值应该与其他输出值等距离。这时候就得用到等边编码了。

每个集合在距离上相等的意思是什么?这意味着他们的欧氏距离相等,可以用下面的方程计算:

在上述方程中,变量q表示理想的输出值,变量P表示实际输出值,有N个理想和实际的集合。

Encog中使用Equilateral类来处理等边编码。Equilateral的使用方法如下:

在上面的代码中,有三个类被标准化到范围-1到1,产生以下输出:

这三个类中的每一个都有两个输出,与1-n编码相比,这样减少了所需的神经元数量,等边编码所需的神经元数量总是比1-n编码少些,用等边编码时不会少于三个类。正如之前的问题,如果神经网络预测versicolor iris, 在这种情况下,只有两个神经元,因为与等边编码一致,如果出错,那所有的神经元都将产生错误值,也就不会出现1-n那种情况了,此外,只有两个输出神经元进行处理,略微降低了神经网络的复杂度。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表