0

寸法 8000x100 のデータがあります。これらの 8000 個のアイテムをクラスター化する必要があります。私はこれらのアイテムの注文にもっと興味があります。小さなデータの場合は上記のコードから目的の結果を得ることができましたが、より高い次元の場合、実行時エラー「RuntimeError: オブジェクトの str を取得中に最大再帰深度を超えました」が発生し続けます。「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
>>> 
4

2 に答える 2

2

問題は、樹状図視覚化手法であるということです。8000オブジェクトでは、すでにほとんど読めなくなります。これが、おそらくこれに最適化されていない理由です。

O(n^3)大規模なデータセットの場合は、あらゆる種類の階層的クラスター(行列操作で実装するとランタイムがあり、場合によってはで実行できます)から離れてO(n^2)、代わりにOPTICS(Wikipedia)を使用することをお勧めします(使用しないでください)。 WekaのOPTICS、または浮かんでいるPythonバージョン-どちらも不完全です!)。

実行すらできずdendrogram、エラーが発生しますmatplotlib not available. Plot request denied。したがって、おそらく実際に樹状図を視覚化しようとします!視覚化の最適化に多大な労力を費やすと、メモリが不足する可能性があります。他の質問で示したように自分でそれを行うことにより、樹状図の葉の順序を計算すると、この余分なコストを回避できるはずです。

hcluster代わりに使用している理由はありscipy.cluster.hierarchyますか?

于 2012-09-25T06:50:02.563 に答える
0

しかし、より高い次元では、実行時エラー「RuntimeError: オブジェクトの str を取得中に最大再帰深度を超えました」が発生し続けます

メモリの問題は、 PCAtSNEなどの何らかの形式の次元削減手法を使用することで解決できます

100 次元から 20 程度に削減

tSNE の実行には時間がかかるため、PCA (高速) を使用して 100 ディムから 50 ディム (たとえば) に減らしてから、tSNE を使用して 10 ディム程度にします。

注意:これらはデータの損失につながりますが、仕事を終わらせるだけかもしれません.

于 2017-06-13T07:15:57.153 に答える