You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am currently using pyABC to find the parameters in a physical system and I am testing the approach by generating synthetic data from parameters of the model I choose randomly. Inferring the parameters the other way round via ABC-SMC nearly always works well, and performance is good as the number of samples stays constant during all generations of the algorithm. However, for some parameters, there is an exponential scaling in the sample number of each generation, as e.g. in this run from generation ~15-25:
In this example the exponential is 'overcome', however, there are parameters for which the number of samples grows to the degree that the inference is computationally infeasible.
Analysing this issue, it seems like the exponential scaling always occurs when the posterior is multi-modal. The following plots show the posteriors and samples via pyabc.visualization.plot_kde_matrix_highlevel() - the first figure corresponds to generation 22 and thus to exponential sample number scaling, and the second one to generation 31 and thus a constant number of samples per generation:
Note how the first one shows a multi-modal distribution in the delta_onsite_potential-delta_t plot; the second one is a mono-modal - from analysing all the parameter samples with exponential scaling, this seems to be the reason for the issue.
More specifically I am using:
QuantileEpsilon for choosing $\epsilon$ - I have already tried changing the quantile / quantile multiplier to larger values with the hope that if the acceptance threshold is decreased less quickly, the sampling number stays smaller. This did help somewhat, but it did not fix the exponential scaling.
LocalTransition as the KDE - I switched this from the global multivariate KDE, as in the beginning I thought samples in the space 'between' the modes were the reason for the many samples. This also helped, but also did not fix the issue entirely. I also tried modifying LocalTransition to normalise the different parameter axis before computing the nearest neighbours, as the different parameters have different axis scalings, but this did also not fix the problem.
I am aware that growing sample numbers are not a thing that can be avoided in all cases and depend on the optimisation landscape of the model. However, I am wondering if this just a reason of something wrong or missing in how I am using pyABC - is there anything else I could try to fix this issue? Thank you very much for all your help and work on pyABC!
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
I am currently using pyABC to find the parameters in a physical system and I am testing the approach by generating synthetic data from parameters of the model I choose randomly. Inferring the parameters the other way round via ABC-SMC nearly always works well, and performance is good as the number of samples stays constant during all generations of the algorithm. However, for some parameters, there is an exponential scaling in the sample number of each generation, as e.g. in this run from generation ~15-25:
In this example the exponential is 'overcome', however, there are parameters for which the number of samples grows to the degree that the inference is computationally infeasible.
Analysing this issue, it seems like the exponential scaling always occurs when the posterior is multi-modal. The following plots show the posteriors and samples via
pyabc.visualization.plot_kde_matrix_highlevel()
- the first figure corresponds to generation 22 and thus to exponential sample number scaling, and the second one to generation 31 and thus a constant number of samples per generation:Note how the first one shows a multi-modal distribution in the
delta_onsite_potential
-delta_t
plot; the second one is a mono-modal - from analysing all the parameter samples with exponential scaling, this seems to be the reason for the issue.More specifically I am using:
QuantileEpsilon
for choosingLocalTransition
as the KDE - I switched this from the global multivariate KDE, as in the beginning I thought samples in the space 'between' the modes were the reason for the many samples. This also helped, but also did not fix the issue entirely. I also tried modifyingLocalTransition
to normalise the different parameter axis before computing the nearest neighbours, as the different parameters have different axis scalings, but this did also not fix the problem.I am aware that growing sample numbers are not a thing that can be avoided in all cases and depend on the optimisation landscape of the model. However, I am wondering if this just a reason of something wrong or missing in how I am using pyABC - is there anything else I could try to fix this issue? Thank you very much for all your help and work on pyABC!
(I also asked this on Cross Validated StackExchange a bit more generally, however no one answered yet so far)
Beta Was this translation helpful? Give feedback.
All reactions