Python中的最小-最大归一化

Posted

技术标签:

【中文标题】Python中的最小-最大归一化【英文标题】:Min-Max Normalization in Python 【发布时间】:2015-02-28 06:42:58 【问题描述】:

我一直在使用自组织地图 (SOM) 处理真实世界的数据集(.csv 文件)。我正在尝试基于 Min-Max 归一化对数据进行归一化以提高有效性。

但我遇到了一个错误。错误类似于:"unsupported operand type(s) for list and float"

我找不到更好的解决方案,对此我完全迷失了。

for i in range(num):
   trr=eval(str(arr[i]))[0:-31]
print trr
for i in range(num):

   normalized = (trr-min(trr))/(max(trr)-min(trr))
print normalized

并在开头声明trr为:

trr = [[0 for x in range(num)] for x in range(num)]

【问题讨论】:

嗯,错误本身意味着您正在尝试使用列表和浮点数进行数学运算,而不是 2 个浮点数。 谢谢。由于语句中出现错误---> normalized = (trr-min(trr))/(max(trr)-min(trr))。我刚刚打印了 min(trr) 和 max(trr) 的类型并将两者的类型都设为“列表”。但发生的情况是,这次我收到错误“列表和列表不支持的操作数类型”,即使两者都是“列表”类型.. 【参考方案1】:

压痕似乎坏了,我不知道如何修复它,但无论如何,关键是:

normalized = (trr-min(trr))/(max(trr)-min(trr))

很明显,trr 这是一个列表(或者您不会寻找它的minmax)但您正在尝试对其进行算术 - 不好。我会推荐:

base = min(trr)
range = max(trr) - base
normalized = [(x-base)/range for x in trr]

因为最有可能实现我猜你的想法。

【讨论】:

谢谢。。我试过了,但问题仍然存在。这次的错误就像--->"unsupported operand type(s) for list and list" ----> range = max(trr) - base. 当你print 时,trr 的值是多少呢?还有print type(base), base 在计算之后告诉我们。我想(猜想,因为你没有告诉我们:-) trr 是一个数字列表,但也许它是一个列表列表或更可怕的东西 -- show 我们知道类型和值,而不是强迫我们猜测!

以上是关于Python中的最小-最大归一化的主要内容,如果未能解决你的问题,请参考以下文章

4-16 归一化,抽象类,接口类,多态

通过简单案例-深入理解深度学习中两种常用的归一化方法

「深度学习一遍过」必修12:激活函数池化归一化泛化正则化

Python 数据归一化/标准化

Python数据标准化归一化

matlab 怎样进行数据归一化