在 Scipy 错误中为大型数据集绘制树状图

Posted

技术标签:

【中文标题】在 Scipy 错误中为大型数据集绘制树状图【英文标题】:Plotting dendrogram in Scipy error for large dataset 【发布时间】:2012-04-29 13:21:30 【问题描述】:

我正在使用 Scipy 进行层次聚类。我确实设法使用 fcluster 在阈值上获得平坦的集群。但我需要可视化形成的树状图。当我使用 dendrogram 方法时,它适用于 5-6k 用户向量。但我的数据分析器包含 16k 个用户向量。当我为 16k 用户运行它时,树形图函数会引发以下错误:

File "/home/enthought/lib/python2.7/site-packages/scipy/cluster/hierarchy.py", line 2333, in _dendrogram_calculate_info
leaf_label_func, i, labels)
File "/home/enthought/lib/python2.7/site-packages/scipy/cluster/hierarchy.py", line 2205, in _append_singleton_leaf_node
ivl.append(str(int(i)))
RuntimeError: maximum recursion depth exceeded while getting the str of an object

关于为更大的数据服务器可视化树状图有什么想法吗?

【问题讨论】:

一个简单的想法是扩展您的内存,否则您可能需要深入研究实现细节以使例程内存友好。 @Maxwell,如果您发现投票率最高的答案有帮助,请继续将其标记为正确! :) 我也遇到过同样的事情,但只有在使用某些方法(单一、平均、完整)而不是病房完成聚类时。我想知道是什么触发了这种情况 - 相同大小的链接矩阵的哪些属性使递归如此深入? 【参考方案1】:

使用 sys.setrecursionlimit(1000000) 我能够处理大型矩阵并成功返回 seaborn.clustermap 调用。我想这个错误也可以通过升级 scipy 或提供额外的参数并使用 scipy 更周到地构建集群图来解决。

【讨论】:

【参考方案2】:

这可能有点晚了,但如果您对增加递归限制以颠覆递归深度限制感到满意,您可以这样做。不推荐,也绝对不是“pythonic”,但它可能会得到你想要的结果。

import sys
sys.setrecursionlimit(10000)

【讨论】:

以上是关于在 Scipy 错误中为大型数据集绘制树状图的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中为大型数据集创建邻接矩阵

VBO 不会绘制,大型数据集

用更少的时间在 R 中绘制大型数据集

Python+matplotlib+scipy站点数据绘制气象分布图

Javascript / D3.js - 绘制大型数据集 - 提高 d3.js 绘制的 svg 图表中的缩放和平移速度

来自预制链接矩阵的树状图