【发布时间】:2018-04-05 13:03:52
【问题描述】:
我应该规范化一个数组。我已经阅读了规范化并遇到了一个公式:
我为它写了以下函数:
def normalize_list(list):
max_value = max(list)
min_value = min(list)
for i in range(0, len(list)):
list[i] = (list[i] - min_value) / (max_value - min_value)
这应该是对元素数组进行规范化。
然后我遇到了这个:https://stackoverflow.com/a/21031303/6209399 这表示您可以通过简单地执行以下操作来规范化数组:
def normalize_list_numpy(list):
normalized_list = list / np.linalg.norm(list)
return normalized_list
如果我用我自己的函数和 numpy 方法规范化这个测试数组test_array = [1, 2, 3, 4, 5, 6, 7, 8, 9],我会得到这些答案:
My own function: [0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]
The numpy way: [0.059234887775909233, 0.11846977555181847, 0.17770466332772769, 0.23693955110363693, 0.29617443887954614, 0.35540932665545538, 0.41464421443136462, 0.47387910220727386, 0.5331139899831830
为什么函数给出不同的答案?还有其他方法来规范化数据数组吗? numpy.linalg.norm(list) 是做什么的?我怎么了?
【问题讨论】:
-
请注意,这不是传统的标准化公式,通常表示为 (x - x_mean) / stdev(x),它将 x 标准化为正态分布。 (stdev 是标准差。)
-
同意布拉德。您的公式将值缩放到区间 [0, 1],而“归一化”通常意味着转换为具有均值 0 和方差 1(在统计中),或者缩放向量以具有相对于某个范数的单位长度(通常是 L2 )。
-
那不是叫“标准化”吗? @phg
-
@OuuGiii 不,没有官方引用可以引用我会说“标准化”和“标准化”都是指减去平均值并除以标准差以使数据具有N~(0,1) 分布。也许规范化可以采用您在线性代数上下文中提到的含义,但我会说 phg 是主要用法。
-
@OuuGiii 是的,至少根据this answer,normalization 指的是 [0,1] 范围,standardization 指的是均值 0 方差 1。
标签: python numpy normalization