14039 個のユーザー ベクトルで構成されるデータセットに階層クラスタリングを適用しようとしています。各ベクトルには 10 個の特徴があり、各特徴は基本的にそのユーザーによってタグ付けされたタグの頻度です。クラスタリングに Scipy API を使用しています。ここで、これら 14039 人のユーザー間のペアごとの距離を計算し、この距離行列をリンケージ関数に渡す必要があります。
import scipy.cluster.hierarchy as sch
Y = sch.distance.pdist( allUserVector,'cosine')
set_printoptions(threshold='nan')
print Y
しかし、私のプログラムは、距離行列自体の計算中に MemoryError を返します
File "/usr/lib/pymodules/python2.7/numpy/core/numeric.py", line 1424, in array_str
return array2string(a, max_line_width, precision, suppress_small, ' ', "", str)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 306, in array2string
separator, prefix)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 210, in _array2string
format_function = FloatFormat(data, precision, suppress_small)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 392, in __init__
self.fillFormat(data)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 399, in fillFormat
non_zero = absolute(data.compress(not_equal(data, 0) & ~special))
MemoryError
これを修正する方法はありますか?データセットが大きすぎますか? しかし、14,000 ユーザーのクラスタリングは、メモリ エラーが発生するほど多すぎてはいけないと思います。i3 および 4 Gb RAM で実行しています。DBScan クラスタリングも適用する必要がありますが、これも入力として距離行列が必要です。
任意の提案をいただければ幸いです。
編集:Yを印刷したときにのみエラーが発生します。理由はありますか?