Expand source code
from typing import Callable, Generator, Text, Tuple
from ..model import Model
from ..samplers.leafnode import LeafNodeSampler
from ..samplers.sigma import SigmaSampler
from ..samplers.treemutation import TreeMutationSampler
class SampleSchedule:
"""
The SampleSchedule class is responsible for handling the ordering of sampling within a Gibbs step
It is useful to encapsulate this logic if we wish to expand the model
Parameters
----------
tree_sampler: TreeMutationSampler
How to sample tree mutation space
leaf_sampler: LeafNodeSampler
How to sample leaf node predictions
sigma_sampler: SigmaSampler
How to sample sigma values
"""
def __init__(self,
tree_sampler: TreeMutationSampler,
leaf_sampler: LeafNodeSampler,
sigma_sampler: SigmaSampler):
self.leaf_sampler = leaf_sampler
self.sigma_sampler = sigma_sampler
self.tree_sampler = tree_sampler
def steps(self, model: Model) -> Generator[Tuple[Text, Callable[[], float]], None, None]:
"""
Create a generator of the steps that need to be called to complete a full Gibbs sample
Parameters
----------
model: Model
The model being sampled
Returns
-------
Generator[Callable[[Model], Sampler], None, None]
A generator a function to be called
"""
for tree in model.refreshed_trees():
yield "Tree", lambda: self.tree_sampler.step(model, tree)
for leaf_node in tree.leaf_nodes:
yield "Node", lambda: self.leaf_sampler.step(model, leaf_node)
yield "Node", lambda: self.sigma_sampler.step(model, model.sigma)
Classes
class SampleSchedule (tree_sampler: TreeMutationSampler, leaf_sampler: LeafNodeSampler, sigma_sampler: SigmaSampler)-
The SampleSchedule class is responsible for handling the ordering of sampling within a Gibbs step It is useful to encapsulate this logic if we wish to expand the model
Parameters
tree_sampler:TreeMutationSampler- How to sample tree mutation space
leaf_sampler:LeafNodeSampler- How to sample leaf node predictions
sigma_sampler:SigmaSampler- How to sample sigma values
Expand source code
class SampleSchedule: """ The SampleSchedule class is responsible for handling the ordering of sampling within a Gibbs step It is useful to encapsulate this logic if we wish to expand the model Parameters ---------- tree_sampler: TreeMutationSampler How to sample tree mutation space leaf_sampler: LeafNodeSampler How to sample leaf node predictions sigma_sampler: SigmaSampler How to sample sigma values """ def __init__(self, tree_sampler: TreeMutationSampler, leaf_sampler: LeafNodeSampler, sigma_sampler: SigmaSampler): self.leaf_sampler = leaf_sampler self.sigma_sampler = sigma_sampler self.tree_sampler = tree_sampler def steps(self, model: Model) -> Generator[Tuple[Text, Callable[[], float]], None, None]: """ Create a generator of the steps that need to be called to complete a full Gibbs sample Parameters ---------- model: Model The model being sampled Returns ------- Generator[Callable[[Model], Sampler], None, None] A generator a function to be called """ for tree in model.refreshed_trees(): yield "Tree", lambda: self.tree_sampler.step(model, tree) for leaf_node in tree.leaf_nodes: yield "Node", lambda: self.leaf_sampler.step(model, leaf_node) yield "Node", lambda: self.sigma_sampler.step(model, model.sigma)Methods
def steps(self, model: Model) ‑> Generator[Tuple[str, Callable[[], float]], None, None]-
Create a generator of the steps that need to be called to complete a full Gibbs sample
Parameters
model:Model- The model being sampled
Returns
Generator[Callable[[Model], Sampler], None, None]- A generator a function to be called
Expand source code
def steps(self, model: Model) -> Generator[Tuple[Text, Callable[[], float]], None, None]: """ Create a generator of the steps that need to be called to complete a full Gibbs sample Parameters ---------- model: Model The model being sampled Returns ------- Generator[Callable[[Model], Sampler], None, None] A generator a function to be called """ for tree in model.refreshed_trees(): yield "Tree", lambda: self.tree_sampler.step(model, tree) for leaf_node in tree.leaf_nodes: yield "Node", lambda: self.leaf_sampler.step(model, leaf_node) yield "Node", lambda: self.sigma_sampler.step(model, model.sigma)