Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Conditional Independence in Bayesian Networks | Bayesian Networks: Directed Models
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Probabilistic Graphical Models Essentials

bookConditional Independence in Bayesian Networks

Understanding conditional independence is key to interpreting and working with Bayesian networks. In these directed graphical models, the structure of the graph itself encodes assumptions about which variables are independent of each other, either unconditionally or when conditioned on other variables. This is formalized through the concept of d-separation. D-separation provides a graphical criterion for determining whether a set of variables is independent of another set, given some observed variables. If two nodes in the graph are d-separated by a set of variables, they are conditionally independent given that set.

To make this concrete, consider the classic Rain-Sprinkler-WetGrass network. In this network, the variables are:

  • Rain: whether it is raining;
  • Sprinkler: whether the sprinkler is on;
  • WetGrass: whether the grass is wet.

The directed edges are: RainSprinkler, RainWetGrass, and SprinklerWetGrass. This structure encodes certain conditional independence relationships. Let's see how you can analyze these relationships using the graph structure in Python.

123456789101112131415161718192021222324252627282930313233343536373839404142
import networkx as nx # Create the Rain-Sprinkler-WetGrass Bayesian network G = nx.DiGraph() G.add_edges_from([ ("Rain", "Sprinkler"), ("Rain", "WetGrass"), ("Sprinkler", "WetGrass") ]) def is_d_separated(G, X, Y, Z): """ Naive check for d-separation between X and Y given Z in a simple Bayesian network. For full d-separation, use proper algorithms; here, demonstrate basic path blocking. """ # For this simple network, manually check the main relationships if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("WetGrass",)): # Conditioning on WetGrass opens the path Rain -> WetGrass <- Sprinkler (collider) return False if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("",)): # Without conditioning, Rain and Sprinkler are dependent via Rain -> Sprinkler return False if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("Rain",)): # Conditioning on Rain blocks Rain -> Sprinkler return True if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "Rain", ("WetGrass",)): return False if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "Rain", ("Sprinkler",)): return True if (X, Y, tuple(sorted(Z))) == ("Rain", "WetGrass", ("Sprinkler",)): # Conditioning on Sprinkler does not block Rain -> WetGrass return False if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "WetGrass", ("Rain",)): # Conditioning on Rain does not block Sprinkler -> WetGrass return False # Default: assume not d-separated return False # Example checks print("Are Rain and Sprinkler independent given Rain?", is_d_separated(G, "Rain", "Sprinkler", ["Rain"])) print("Are Rain and Sprinkler independent given WetGrass?", is_d_separated(G, "Rain", "Sprinkler", ["WetGrass"])) print("Are Rain and WetGrass independent given Sprinkler?", is_d_separated(G, "Rain", "WetGrass", ["Sprinkler"]))
copy

The code above models the Rain-Sprinkler-WetGrass Bayesian network using a directed graph. The is_d_separated function provides a basic, illustrative way to check for d-separation (and thus conditional independence) between pairs of variables, given a conditioning set. For example, conditioning on Rain d-separates Rain and Sprinkler, making them independent. However, conditioning on WetGrass does not d-separate Rain and Sprinkler due to the collider structure at WetGrass. This demonstrates how the graphical structure directly informs you about which conditional independence properties hold, without needing to refer to the underlying joint probability distributions.

question mark

Which of the following pairs of variables are conditionally independent given the third, according to the Rain-Sprinkler-WetGrass network structure?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

bookConditional Independence in Bayesian Networks

Stryg for at vise menuen

Understanding conditional independence is key to interpreting and working with Bayesian networks. In these directed graphical models, the structure of the graph itself encodes assumptions about which variables are independent of each other, either unconditionally or when conditioned on other variables. This is formalized through the concept of d-separation. D-separation provides a graphical criterion for determining whether a set of variables is independent of another set, given some observed variables. If two nodes in the graph are d-separated by a set of variables, they are conditionally independent given that set.

To make this concrete, consider the classic Rain-Sprinkler-WetGrass network. In this network, the variables are:

  • Rain: whether it is raining;
  • Sprinkler: whether the sprinkler is on;
  • WetGrass: whether the grass is wet.

The directed edges are: RainSprinkler, RainWetGrass, and SprinklerWetGrass. This structure encodes certain conditional independence relationships. Let's see how you can analyze these relationships using the graph structure in Python.

123456789101112131415161718192021222324252627282930313233343536373839404142
import networkx as nx # Create the Rain-Sprinkler-WetGrass Bayesian network G = nx.DiGraph() G.add_edges_from([ ("Rain", "Sprinkler"), ("Rain", "WetGrass"), ("Sprinkler", "WetGrass") ]) def is_d_separated(G, X, Y, Z): """ Naive check for d-separation between X and Y given Z in a simple Bayesian network. For full d-separation, use proper algorithms; here, demonstrate basic path blocking. """ # For this simple network, manually check the main relationships if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("WetGrass",)): # Conditioning on WetGrass opens the path Rain -> WetGrass <- Sprinkler (collider) return False if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("",)): # Without conditioning, Rain and Sprinkler are dependent via Rain -> Sprinkler return False if (X, Y, tuple(sorted(Z))) == ("Rain", "Sprinkler", ("Rain",)): # Conditioning on Rain blocks Rain -> Sprinkler return True if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "Rain", ("WetGrass",)): return False if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "Rain", ("Sprinkler",)): return True if (X, Y, tuple(sorted(Z))) == ("Rain", "WetGrass", ("Sprinkler",)): # Conditioning on Sprinkler does not block Rain -> WetGrass return False if (X, Y, tuple(sorted(Z))) == ("Sprinkler", "WetGrass", ("Rain",)): # Conditioning on Rain does not block Sprinkler -> WetGrass return False # Default: assume not d-separated return False # Example checks print("Are Rain and Sprinkler independent given Rain?", is_d_separated(G, "Rain", "Sprinkler", ["Rain"])) print("Are Rain and Sprinkler independent given WetGrass?", is_d_separated(G, "Rain", "Sprinkler", ["WetGrass"])) print("Are Rain and WetGrass independent given Sprinkler?", is_d_separated(G, "Rain", "WetGrass", ["Sprinkler"]))
copy

The code above models the Rain-Sprinkler-WetGrass Bayesian network using a directed graph. The is_d_separated function provides a basic, illustrative way to check for d-separation (and thus conditional independence) between pairs of variables, given a conditioning set. For example, conditioning on Rain d-separates Rain and Sprinkler, making them independent. However, conditioning on WetGrass does not d-separate Rain and Sprinkler due to the collider structure at WetGrass. This demonstrates how the graphical structure directly informs you about which conditional independence properties hold, without needing to refer to the underlying joint probability distributions.

question mark

Which of the following pairs of variables are conditionally independent given the third, according to the Rain-Sprinkler-WetGrass network structure?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2
some-alt