Sequential Monte Carlo Factorial Models
cuthbert.factorial.smc
Factorial utilities for SMC particle-filter states.
GeneralParticleFilterState = TypeVar('GeneralParticleFilterState', ParticleFilterState, MarginalParticleFilterState)
module-attribute
build_factorializer(get_factorial_indices, resampling_fn)
Build a factorializer for particle-filter states.
In cuthbert.smc, resampling happens before propagation/reweighting.
Factorial join needs unweighted particles, so resampling_fn is required
and applied in join whenever local factor weights are not constant.
It is therefore recommended to set the main SMC filter's resampling_fn to
cuthbertlib.resampling.no_resampling.resampling to avoid redundant resampling.
Any weights passed to marginalize will be duplicated across factors.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
get_factorial_indices
|
GetFactorialIndices
|
Function to extract factorial indices from model inputs. |
required |
resampling_fn
|
Resampling
|
Resampling function used in |
required |
Returns:
| Type | Description |
|---|---|
Factorializer
|
Factorializer for SMC states with extract, join, marginalize, and insert. |
Source code in cuthbert/factorial/smc.py
factorialize_init_state(init_state, model_inputs)
Convert initial SMC state particles from (N, F, ...) to (F, N, ...).
Generic SMC filters sample initial particles with a leading particle axis.
The factorial SMC machinery expects the factor axis to lead instead.
Initial weights and particle filter ancestor indices are broadcast from
(N,) to (F, N), matching the factorial SMC state layout.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
init_state
|
GeneralParticleFilterState
|
Output from particle filter |
required |
model_inputs
|
ArrayTreeLike
|
The model inputs at the first time point - unused. |
required |
Source code in cuthbert/factorial/smc.py
extract(factorial_state, factorial_inds)
Extract selected factors from a factorial particle-filter state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
factorial_state
|
GeneralParticleFilterState
|
Factorial particle-filter state with factorized fields
on leading axis F ( |
required |
factorial_inds
|
ArrayLike
|
Indices of factors to extract. |
required |
Returns:
| Type | Description |
|---|---|
GeneralParticleFilterState
|
Local factorial particle-filter state with selected factors on the |
GeneralParticleFilterState
|
leading axis of factorized fields. |
Source code in cuthbert/factorial/smc.py
join(local_factorial_state, resampling_fn)
Join local factorial state into a single joint local particle-filter state.
Resampling is applied first, independently over factors, when local factor weights are not constant (detected via effective sample size). Then factorized particles are stacked into a local joint particle state. Joined bookkeeping uses always-resampled conventions: zero log weights.
Ancestor indices are valid for the resampling but ignored for the join i.e. retain the factorial axis (F, n_particles) and assumed not used in the particle filter.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
local_factorial_state
|
GeneralParticleFilterState
|
Local factorial particle-filter state. |
required |
resampling_fn
|
Resampling
|
Resampling function for factor-wise pre-join resampling. |
required |
Returns:
| Type | Description |
|---|---|
GeneralParticleFilterState
|
Joint local particle-filter state with no factorial axis on particle values. |
Source code in cuthbert/factorial/smc.py
marginalize(local_state, num_factors)
Marginalize a joint local particle state back to factorial form.
Weights are duplicated across factors. Ancestor indices are ignored for marginalization.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
local_state
|
GeneralParticleFilterState
|
Joint local particle-filter state with particle leaves
shaped |
required |
num_factors
|
int
|
Number of local factors in the factorial representation. |
required |
Returns:
| Type | Description |
|---|---|
GeneralParticleFilterState
|
Local factorial particle-filter state where particle leaves are shaped |
GeneralParticleFilterState
|
|
GeneralParticleFilterState
|
with missing ancestor indices ( |
Source code in cuthbert/factorial/smc.py
insert(local_factorial_state, factorial_state, factorial_inds)
Insert local factorial update into the global factorial state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
local_factorial_state
|
GeneralParticleFilterState
|
Updated local factorial particle-filter state. |
required |
factorial_state
|
GeneralParticleFilterState
|
Previous global factorial particle-filter state. |
required |
factorial_inds
|
ArrayLike
|
Factor indices where local updates are inserted. |
required |
Returns:
| Type | Description |
|---|---|
GeneralParticleFilterState
|
Updated global factorial particle-filter state. |