How do I get the 'spectralcluster' function to work with out of memory data?

조회 수: 5 (최근 30일)
Guy Nir
Guy Nir 2023년 3월 23일
댓글: Guy Nir 2023년 3월 24일
I have a large dataset of observations which I would like to cluster using the function spectralcluster. However, when I do so, I get an out of memory error -
[~,V_temp,D_temp] = spectralcluster(ChosenPatch{2,1}.data,5);
Error using <=
Requested 128424x128424 (138.2GB) array exceeds maximum array size preference (94.6GB). This might cause MATLAB to become unresponsive.
Error in internal.stats.spectraleigs>setSubnormalNumsToZero (line 196)
isTooSmall = abs(L) <= N*eps(max(L,[],'all')) & (abs(L)>0);
Error in internal.stats.spectraleigs>shimalik (line 141)
L = setSubnormalNumsToZero(L);
Error in internal.stats.spectraleigs (line 82)
[V,D,L] = shimalik(S,k,sv);
Error in spectralcluster (line 176)
[Vnonan,D] = internal.stats.spectraleigs(X,k,lapNorm);
Related documentation
I then tried using the distributed function but got another error -
dt=distributed(ChosenPatch{2,1}.data);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 12).
spmd
[~,V_temp,D_temp] = spectralcluster(dt,5);
end
Worker 1:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 2:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 3:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 4:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 5:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 6:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 7:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 8:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 9:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 10:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 11:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Worker 12:
Warning: Converting input data to double.
> In pdist2 (line 253)
In ExhaustiveSearcher/knnsearch (line 235)
In knnsearch (line 154)
In internal.stats.similarity (line 211)
In spectralcluster (line 167)
In spmdlang.remoteBlockExecutionPlain (line 49)
In spmdlang.remoteBlockExecution (line 15)
Error detected on workers 1 2 3 4 5 6 7 8 9 10 11 12.
Caused by:
Error using pdist2 (line 376)
X and Y inputs to PDIST2MEX must both be double, or both be single.
Finally, I tried a tall array, but that failed as well -
tt=tall(ChosenPatch{2,1}.data);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 12).
>> [~,V_temp,D_temp] = spectralcluster(tt,5);
Error using tall/validateattributes
validateattributes does not support tall arrays.
Error in spectralcluster (line 126)
validateattributes(X,{'single','double'},{'2d','real','nonempty'},'','X');
Is there any other solution I could try?
Thank you,
Guy
  댓글 수: 7
Walter Roberson
Walter Roberson 2023년 3월 24일
kdtree is the general name for such structures, and it is implemented by knnsearch from the Statistics Toolbox. But possibly you will need to use different options for your spectral cluster call.
Guy Nir
Guy Nir 2023년 3월 24일
I see. I just misunderstood you earler. You mean to use knnsearch instead of the spectral clustering. Knnseearch use the 'kdtree' method only for four distance metcs, including 'eucleadian'. However, at least for the spectral clustering I've noticed that 'spearman' or 'seucledian' works better for my data. Unfortunately, that will require the 'exhaustive' approach. But, I could still try.
Is there a way that you think spectral clustering could work?
Thank you,
Guy

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Discriminant Analysis에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by