Gibbs Sampling¶
- class pgmpy.sampling.Sampling.GibbsSampling(model=None)[source]¶
Class for performing Gibbs sampling.
- Parameters:
model (BayesianNetwork or MarkovNetwork) – Model from which variables are inherited and transition probabilities computed.
Examples
Initialization from a BayesianNetwork object:
>>> from pgmpy.factors.discrete import TabularCPD >>> from pgmpy.models import BayesianNetwork >>> intel_cpd = TabularCPD('intel', 2, [[0.7], [0.3]]) >>> sat_cpd = TabularCPD('sat', 2, [[0.95, 0.2], [0.05, 0.8]], evidence=['intel'], evidence_card=[2]) >>> student = BayesianNetwork() >>> student.add_nodes_from(['intel', 'sat']) >>> student.add_edge('intel', 'sat') >>> student.add_cpds(intel_cpd, sat_cpd) >>> from pgmpy.sampling import GibbsSampling >>> gibbs_chain = GibbsSampling(student) >>> gibbs_chain.sample(size=3) intel sat 0 0 0 1 0 0 2 1 1
- generate_sample(start_state=None, size=1, include_latents=False, seed=None)[source]¶
Generator version of self.sample
- Return type:
List of State namedtuples, representing the assignment to all variables of the model.
Examples
>>> from pgmpy.factors.discrete import DiscreteFactor >>> from pgmpy.sampling import GibbsSampling >>> from pgmpy.models import MarkovNetwork >>> model = MarkovNetwork([('A', 'B'), ('C', 'B')]) >>> factor_ab = DiscreteFactor(['A', 'B'], [2, 2], [1, 2, 3, 4]) >>> factor_cb = DiscreteFactor(['C', 'B'], [2, 2], [5, 6, 7, 8]) >>> model.add_factors(factor_ab, factor_cb) >>> gibbs = GibbsSampling(model) >>> gen = gibbs.generate_sample(size=2) >>> [sample for sample in gen] [[State(var='C', state=1), State(var='B', state=1), State(var='A', state=0)], [State(var='C', state=0), State(var='B', state=1), State(var='A', state=1)]]
- sample(start_state=None, size=1, seed=None, include_latents=False)[source]¶
Sample from the Markov Chain.
- Parameters:
start_state (dict or array-like iterable) – Representing the starting states of the variables. If None is passed, a random start_state is chosen.
size (int) – Number of samples to be generated.
seed (int (default: None)) – If a value is provided, sets the seed for numpy.random.
include_latents (boolean) – Whether to include the latent variable values in the generated samples.
- Returns:
sampled – The generated samples
- Return type:
pandas.DataFrame
Examples
>>> from pgmpy.factors.discrete import DiscreteFactor >>> from pgmpy.sampling import GibbsSampling >>> from pgmpy.models import MarkovNetwork >>> model = MarkovNetwork([('A', 'B'), ('C', 'B')]) >>> factor_ab = DiscreteFactor(['A', 'B'], [2, 2], [1, 2, 3, 4]) >>> factor_cb = DiscreteFactor(['C', 'B'], [2, 2], [5, 6, 7, 8]) >>> model.add_factors(factor_ab, factor_cb) >>> gibbs = GibbsSampling(model) >>> gibbs.sample(size=4, return_tupe='dataframe') A B C 0 0 1 1 1 1 0 0 2 1 1 0 3 1 1 1