# 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()
>>> 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])
>>> 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])