# Inference

The basic concept of variable elimination is same as doing marginalization over Joint Distribution.
But variable elimination avoids computing the Joint Distribution by doing marginalization over much smaller factors.
So basically if we want to eliminate **X** from our distribution, then we compute
the product of all the factors involving **X** and marginalize over them,
thus allowing us to work on much smaller factors.

# Inference Algorithms

- The main categories for inference algorithms:
Exact Inference: These algorithms find the exact probability values for our queries.

Approximate Inference: These algorithms try to find approximate values by saving on computation.

**Two common Inference algorithms with variable Elimination**Clique Tree Belief Propagation

Variable Elimination

# Examples Inference

## Example (1)

Lets load the Sprinkler data set and make some inferences.

What is the probability of *wet grass* given that it *Rains*, and the *sprinkler* is off and its *cloudy*: P(wet grass | rain=1, sprinkler=0, cloudy=1)?

```
import bnlearn
model = bnlearn.import_DAG('sprinkler')
q1 = bnlearn.inference.fit(model, variables=['Wet_Grass'], evidence={'Rain':1, 'Sprinkler':0, 'Cloudy':1})
```

The probability having wet grass is 0.9 and not-wet-gras is 0.1.

Wet_Grass

phi(Wet_Grass)

Wet_Grass(0)

0.1000

Wet_Grass(1)

0.9000

## Example (2)

What is the probability of wet grass given and Rain given that the *Sprinkler* is on?

```
q2 = bnlearn.inference.fit(model, variables=['Wet_Grass','Rain'], evidence={'Sprinkler':1})
```

The highest probability is that in these condition, there is wet grass and no rain (P=0.63)

Wet_Grass

Rain

phi(Wet_Grass,Rain)

Wet_Grass(0)

Rain(0)

0.0700

Wet_Grass(0)

Rain(1)

0.0030

Wet_Grass(1)

Rain(0)

0.6300

Wet_Grass(1)

Rain(1)

0.2970

## Example (3)

Given our model, what is the probability on lung cancer given that the person is a smoker and xray is negative? P(lung | smoker=1, xray=0)

```
# Lets create the dataset
model = bnlearn.import_DAG('asia')
```

Lets make the inference:

```
q1 = bnlearn.inference.fit(model, variables=['lung'], evidence={'xray':0, 'smoke':1})
+---------+-------------+
| lung | phi(lung) |
+=========+=============+
| lung(0) | 0.1423 |
+---------+-------------+
| lung(1) | 0.8577 |
+---------+-------------+
```