【发布时间】:2012-04-26 06:28:17
【问题描述】:
这里是麻木的新手。我正在尝试对神经网络的输入进行归一化(又名特征缩放、标准化)。我只是做线性缩放,我使用的公式是:
I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)
其中 I 是缩放的输入值,Imin 和 Imax 是缩放值的所需最小值和最大值范围,D 是原始数据值,Dmin 和 Dmax 是原始数据值的最小值和最大值范围。我想要一个 python 方法,它接受一个 numpy 数组并返回一个所有值都标准化的数组。这是我目前的想法。
def get_normalized_values(array):
"""I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)"""
imin = -1
imax = 1
dmin = array.amin()
dmax = array.amax()
normalized = imin + (imax - imin)*(array - dmin)/(dmax - dmin)
return normalized
我的问题是这行得通吗?还是我必须遍历数组中的每个元素并执行数学运算?你能用数组和标量做这样的数学吗?也就是说,array - dmin 会创建一个新的临时数组,其中每个值都减去了 dmin 吗?不确定这是否是正确的术语,但我认为这是一种“矢量化”方法?
更新
有没有办法让这个修改数组到位?那是不是返回数组的副本,而是让函数获取数组并修改原始数组?
【问题讨论】:
-
这样的事情通常可以正常工作,请尝试一下。一件事是 amin 和 amax 应该只是 min 和 max。或 argmin/argmax。
标签: python numpy neural-network normalization