我有维度为8000x100的数据。我需要将这8000个项目聚集在一起。我对这些商品的订购更感兴趣。对于较小的数据,我可以从上面的代码中获得所需的结果,但是对于更高的维度,我一直收到运行时错误"RuntimeError:在获取对象的字符串时超出了最大递归深度“。是否有其他方法可以从"Z“中获得重新排序的列。
from hcluster import pdist, linkage, dendrogram
import numpy
from numpy.random import rand
x = rand(8,100) # rand(8000,100) gives runtime error
Y = pdist(x)
Z = linkage(Y)
reorderedCol = dendrogram(Z)['ivl']
Traceback:
>>> from hcluster import pdist, linkage, dendrogram
>>> import numpy
>>> from numpy.random import rand
>>>
>>> x = rand(8000,100)
>>> Y = pdist(x)
>>> Z = linkage(Y)
>>> reorderedCol = dendrogram(Z)['ivl']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2062, in dendrogram
link_color_func=link_color_func)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2342, in _dendrogram_calculate_info
link_color_func=link_color_func)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2342, in _dendrogram_calculate_info
link_color_func=link_color_func)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2342, in _dendrogram_calculate_info
...
...
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2311, in _dendrogram_calculate_info
link_color_func=link_color_func)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2209, in _dendrogram_calculate_info
_append_singleton_leaf_node(Z, p, n, level, lvs, ivl, leaf_label_func, i, labels)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/hcluster/hierarchy.py", line 2091, in _append_singleton_leaf_node
ivl.append(str(int(i)))
RuntimeError: maximum recursion depth exceeded while getting the str of an object
>>> 发布于 2012-09-25 14:50:03
问题是树状图是一种可视化技术。在8000个对象中,它已经变得几乎不可读了。这就是为什么它可能没有针对这一点进行优化。
对于更大的数据集,我建议远离任何类型的层次集群(当使用矩阵操作实现O(n^3)运行时,在某些情况下,你可以在O(n^2)中实现),而使用例如OPTICS (Wikipedia) (不是使用Weka中的光学组件,或者是四处浮动的python版本-它们都是不完整的!)。
我甚至不能运行dendrogram,我得到了错误matplotlib not available. Plot request denied。因此,它可能真的试图可视化树状图!如果它在优化可视化方面投入了大量的精力,那么它很可能会耗尽内存。通过像我在另一个问题Calculate ordering of dendrogram leaves 中向您展示的那样,您应该能够避免这种额外的成本。
您使用hcluster而不是scipy.cluster.hierarchy有什么原因吗
发布于 2017-06-13 15:15:57
但是对于更高的维度,我一直收到运行时错误"RuntimeError:获取对象的字符串时超出最大递归深度“。
内存问题可以通过使用某种形式的降维技术(如PCA或tSNE )来解决
从100维减少到20维左右
运行tSNE需要时间,因此您可以使用PCA (更快)从100暗度减少到50暗度(比方说),然后使用tSNE将暗度减少到10左右。
注意:这些会导致数据丢失,但可能只会完成工作。
https://stackoverflow.com/questions/12567813
复制相似问题