Expand source code
from typing import Callable, Generator, Text, Tuple
import numpy as np
import pandas as pd
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)