Purpose of FluidBufNNDSVD?

Hello all,

in what cases would a decomposition with FluidBufNNDSVD before BufNMF prove to be an advantageous over just using the latter? Is it to estimate the number of components on a given buffer?


Hi @jan,

Good question! We definitely need to find a way of making this clearer. It’s not only for estimating the number of components, but also for providing some better-than-random initial values for the bases and activations buffers using a less expensive process. By default NMF will use random matrices as its initial conditions. But, because the possible solutions aren’t unique, random initialisation can mean that it doesn’t always converge to a ‘good’ solution.

Using NNDSVD allows one to use a reasonably criterion (how much of the variance of the source to preserve) to come up with a number of components and some starting values that would help NMF converge more quickly to a useful decomposition.

Better documentation is still in progress, but the sklearn NMF page has some explanation of what the tradeoffs for each mode are.

1 Like

Hi @weefuzzy,
thanks for the explanation, i’ll look into the page you’ve linked!
Would that also mean for example that using NNDSVD on buffer A, providing bases & activations for NMF on audio buffer B that would results in a sort of “cross synthesis” in which the convergence moves from A to B?

I fear it wouldn’t work reliably

  • because NMF will converge to the nearest decent looking ‘solution’, there’s no guarantee it would be one that made much sense for ‘B’ from a starting point of ‘A’
  • the rate of converge isn’t very uniform: it tends to get much of the adjustment done in the first few iterations, so even if you go a single iteration at a time, there may well not be a satisfying sense of translation from one to the other

I see, thank you @weefuzzy !