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
这是一个列表(或者您不会寻找它的min
和max
)但您正在尝试对其进行算术 - 不好。我会推荐:
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中的最小-最大归一化的主要内容,如果未能解决你的问题,请参考以下文章