6

マトリックス(サイズ:20057x2)をクラスター化しようとしています。:

T = clusterdata(X,cutoff);

しかし、私はこのエラーを受け取ります:

??? ==>pdistmexの使用中にエラーが発生しました
メモリ不足。オプションとして「HELPMEMORY」と入力します。

211での==>pdistのエラー
    Y = pdistmex(X'、dist、additionalArg);

139での==>リンケージのエラー
       Z =linkagemex(Y、method、pdistArg);

==>クラスターデータの88でのエラー
Z =linkage(X、linkageargs {1}、pdistargs);

==> kmeansTestat2のエラー
T = clusterdata(X、1);

誰かが私を助けることができますか。私は4GBのRAMを持っていますが、問題はどこか別のものだと思います。

4

3 に答える 3

13

他の人が述べたように、階層的クラスタリングは、あなたの場合、メモリに収まるには大きすぎるペアワイズ距離行列を計算する必要があります。

代わりにK-Meansアルゴリズムを使用してみてください。

numClusters = 4;
T = kmeans(X, numClusters);

または、データのランダムなサブセットを選択して、クラスタリングアルゴリズムへの入力として使用することもできます。次に、クラスターの中心を各クラスターグループの平均/中央値として計算します。最後に、サブセットで選択されなかったインスタンスごとに、各重心までの距離を計算し、最も近い重心に割り当てるだけです。

上記のアイデアを説明するためのサンプルコードを次に示します。

%# random data
X = rand(25000, 2);

%# pick a subset
SUBSET_SIZE = 1000;            %# subset size
ind = randperm(size(X,1));
data = X(ind(1:SUBSET_SIZE), :);

%# cluster the subset data
D = pdist(data, 'euclid');
T = linkage(D, 'ward');
CUTOFF = 0.6*max(T(:,3));      %# CUTOFF = 5;
C = cluster(T, 'criterion','distance', 'cutoff',CUTOFF);
K = length( unique(C) );       %# number of clusters found

%# visualize the hierarchy of clusters
figure(1)
h = dendrogram(T, 0, 'colorthreshold',CUTOFF);
set(h, 'LineWidth',2)
set(gca, 'XTickLabel',[], 'XTick',[])

%# plot the subset data colored by clusters
figure(2)
subplot(121), gscatter(data(:,1), data(:,2), C), axis tight

%# compute cluster centers
centers = zeros(K, size(data,2));
for i=1:size(data,2)
    centers(:,i) = accumarray(C, data(:,i), [], @mean);
end

%# calculate distance of each instance to all cluster centers
D = zeros(size(X,1), K);
for k=1:K
    D(:,k) = sum( bsxfun(@minus, X, centers(k,:)).^2, 2);
end
%# assign each instance to the closest cluster
[~,clustIDX] = min(D, [], 2);

%#clustIDX( ind(1:SUBSET_SIZE) ) = C;

%# plot the entire data colored by clusters
subplot(122), gscatter(X(:,1), X(:,2), clustIDX), axis tight

樹状図 クラスター

于 2010-05-31T22:40:26.620 に答える
2

X32ビットマシンでは大きすぎます。 は、doubleの201,131,596行ベクトル(使用)pdistを作成しようとしています。これは、約1609MB(8バイト)を使用します... / 3GBスイッチを備えたウィンドウで実行すると、最大マトリックスサイズは1536MBに制限されます。 (ここを参照)。clusterdatapdistdouble

すべてのデータを一度に直接クラスタリングするのではなく、何らかの方法でデータを分割する必要があります。

于 2010-05-31T21:56:41.467 に答える
1

PDISTは、可能なすべての行のペア間の距離を計算します。データにN=20057行が含まれている場合、ペアの数はN *(N-1)/ 2になります。これは、あなたの場合は201131596です。あなたのマシンには多すぎるかもしれません。

于 2010-05-31T22:04:42.273 に答える