pgmpy icon indicating copy to clipboard operation
pgmpy copied to clipboard

results of Using gibss sampling method to approximately infer in bayesian network seems wrong

Open zqxyus opened this issue 1 year ago • 1 comments

Subject of the issue

Describe your issue here. I want to use alarm example to approximately infer in bayesian network. Burglary, JohnCall,Marycall,Earthquake, Alarm which are denoted by B,J,M,E,A. My goal is to infer P(B=True | M =True,J=True)

I tried three methods, that is, variable eliminate, approximate inference with bayesian network, approximate inference with gibbs sampling. The problem is the results of variable eliminate and approximate inference with bayesian network are similar,

but the results of gibbs sampling and variable eliminate are too far apart

Your environment

  • pgmpy 0.1.24
  • Python 3.11
  • win 11

Steps to reproduce

Tell us how to reproduce this issue. Please provide a minimal reproducible code of the issue you are facing if possible.

from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
if __name__=="__main__":
  model=BayesianNetwork([['B','A'],['E','A'],['A','J'],['A','M']])
  B_cpd = TabularCPD('B', 2, [[0.001],[0.999]],
                          state_names={'B': ['T', 'F']})
  E_cpd = TabularCPD('E', 2, [[0.002],[0.998]],
                          state_names={'E': ['T', 'F']})
  A_cpd = TabularCPD('A', 2, [[0.95, 0.94,0.29,0.001], [0.05,0.06,0.71,0.999]],
                     evidence=['B',"E"],
                     evidence_card=[2,2],
                     state_names={'A': ['T', 'F'],
                                  'B': ['T', 'F'],
                                  'E': ['T', 'F']}
                     )
  model.add_cpds(E_cpd)
  model.add_cpds(B_cpd)
  model.add_cpds(A_cpd)
  J_cpd = TabularCPD('J', 2, [[0.9, 0.05], [0.1,0.95]],
                     evidence=['A'],
                     evidence_card=[2],
                     state_names={'A': ['T', 'F'],
                                  'J': ['T', 'F']}
                     )
  M_cpd = TabularCPD('M', 2, [[0.7, 0.01], [0.3,0.99]],
                     evidence=['A'],
                     evidence_card=[2],
                     state_names={'A': ['T', 'F'],
                                  'M': ['T', 'F']}
                     )
  model.add_cpds(J_cpd)
  model.add_cpds(M_cpd)
  inference = VariableElimination(model)
  ev_query = inference.query(variables=["B"],evidence={"M":"T","J":"T"})
  print(ev_query)

  from pgmpy.inference import ApproxInference

  infer = ApproxInference(model)
  approx_query1 = infer.query(variables=["B"],evidence={"M":"T","J":"T"})
  print(approx_query1)
  from pgmpy.sampling import GibbsSampling
  gibbs = GibbsSampling(model)
  sampledata=gibbs.sample(size=int(1e4))
  approx_query2 = infer.query(variables=["B"],evidence={"M":"T","J":"T"},samples=sampledata)
  print(approx_query2)

Expected behaviour

Tell us what should happen

The results of three methods should be similar, but the value of gibbs sampling method is to far from values of the methods of variable eliminate and approximate inference in bayesian network

Actual behaviour

Tell us what happens instead +------+----------+ | B | phi(B) | +======+==========+ | B(T) | 0.2842 | +------+----------+ | B(F) | 0.7158 | +------+----------+

0%| | 0/10000 [00:00<?, ?it/s] 32%|███▏ | 3160/10000 [00:03<00:07, 908.78it/s] 52%|█████▏ | 5225/10000 [00:05<00:05, 897.69it/s] 68%|██████▊ | 6798/10000 [00:07<00:03, 926.25it/s] 77%|███████▋ | 7740/10000 [00:08<00:02, 925.41it/s] 85%|████████▍ | 8488/10000 [00:09<00:01, 934.74it/s] 89%|████████▉ | 8948/10000 [00:09<00:01, 933.59it/s] 93%|█████████▎| 9293/10000 [00:10<00:00, 940.95it/s] 95%|█████████▌| 9531/10000 [00:10<00:00, 917.98it/s] 97%|█████████▋| 9663/10000 [00:10<00:00, 882.24it/s] 98%|█████████▊| 9770/10000 [00:10<00:00, 888.52it/s] 99%|█████████▉| 9901/10000 [00:10<00:00, 874.01it/s] 100%|█████████▉| 9990/10000 [00:10<00:00, 823.80it/s] 100%|██████████| 10000/10000 [00:11<00:00, 899.67it/s] +------+----------+ | B | phi(B) | +======+==========+ | B(F) | 0.7174 | +------+----------+ | B(T) | 0.2826 | +------+----------+ WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers

0%| | 0/9999 [00:00<?, ?it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

3%|▎ | 297/9999 [00:00<00:03, 2750.53it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

6%|▌ | 573/9999 [00:00<00:06, 1500.41it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

8%|▊ | 801/9999 [00:00<00:05, 1671.97it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

11%|█ | 1083/9999 [00:00<00:05, 1633.98it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

13%|█▎ | 1340/9999 [00:00<00:04, 1869.27it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

15%|█▌ | 1546/9999 [00:00<00:05, 1603.54it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

18%|█▊ | 1807/9999 [00:01<00:04, 1844.53it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

20%|██ | 2011/9999 [00:01<00:04, 1729.60it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

22%|██▏ | 2197/9999 [00:01<00:06, 1260.39it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

23%|██▎ | 2348/9999 [00:01<00:05, 1279.79it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

25%|██▍ | 2494/9999 [00:01<00:06, 1179.53it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

26%|██▌ | 2624/9999 [00:01<00:06, 1122.62it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

27%|██▋ | 2746/9999 [00:01<00:06, 1098.25it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

29%|██▊ | 2861/9999 [00:02<00:06, 1066.99it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

30%|██▉ | 2971/9999 [00:02<00:06, 1034.36it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

31%|███ | 3077/9999 [00:02<00:06, 1003.18it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

32%|███▏ | 3203/9999 [00:02<00:06, 992.43it/s] WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

34%|███▍ | 3448/9999 [00:02<00:04, 1341.73it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

36%|███▌ | 3607/9999 [00:02<00:05, 1253.55it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

37%|███▋ | 3737/9999 [00:02<00:05, 1051.09it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

40%|███▉ | 3964/9999 [00:02<00:04, 1329.32it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

41%|████ | 4112/9999 [00:03<00:04, 1267.16it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

42%|████▏ | 4249/9999 [00:03<00:05, 1076.02it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

44%|████▎ | 4367/9999 [00:03<00:05, 966.09it/s] WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

46%|████▌ | 4588/9999 [00:03<00:04, 1240.42it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

47%|████▋ | 4728/9999 [00:03<00:04, 1188.22it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

49%|████▊ | 4858/9999 [00:03<00:05, 952.99it/s] WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

50%|████▉ | 4967/9999 [00:03<00:05, 947.66it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

52%|█████▏ | 5219/9999 [00:04<00:03, 1304.49it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

55%|█████▍ | 5487/9999 [00:04<00:02, 1635.94it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

57%|█████▋ | 5671/9999 [00:04<00:02, 1510.84it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

58%|█████▊ | 5838/9999 [00:04<00:03, 1276.73it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

60%|█████▉ | 5982/9999 [00:04<00:03, 1046.70it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

62%|██████▏ | 6234/9999 [00:04<00:02, 1346.20it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

64%|██████▍ | 6394/9999 [00:04<00:02, 1270.93it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

66%|██████▌ | 6574/9999 [00:05<00:02, 1388.02it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

67%|██████▋ | 6729/9999 [00:05<00:02, 1275.30it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

69%|██████▉ | 6885/9999 [00:05<00:02, 1255.64it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

71%|███████ | 7099/9999 [00:05<00:02, 1325.70it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

72%|███████▏ | 7238/9999 [00:05<00:02, 1135.72it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

74%|███████▍ | 7390/9999 [00:05<00:02, 1142.69it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

75%|███████▌ | 7510/9999 [00:05<00:02, 1079.68it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

77%|███████▋ | 7724/9999 [00:06<00:01, 1197.79it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

79%|███████▊ | 7871/9999 [00:06<00:01, 1179.47it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

80%|████████ | 8042/9999 [00:06<00:01, 1206.46it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

82%|████████▏ | 8217/9999 [00:06<00:01, 1233.98it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

84%|████████▍ | 8416/9999 [00:06<00:01, 1291.81it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

86%|████████▌ | 8596/9999 [00:06<00:01, 1289.70it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

87%|████████▋ | 8739/9999 [00:06<00:01, 1232.01it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

89%|████████▊ | 8863/9999 [00:07<00:00, 1138.66it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

90%|█████████ | 9016/9999 [00:07<00:00, 1147.33it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

91%|█████████▏| 9131/9999 [00:07<00:01, 834.77it/s] WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

93%|█████████▎| 9310/9999 [00:07<00:00, 951.12it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

94%|█████████▍| 9415/9999 [00:07<00:00, 952.06it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

96%|█████████▌| 9609/9999 [00:07<00:00, 1091.38it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

98%|█████████▊| 9776/9999 [00:07<00:00, 1153.32it/s]WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values. WARNING:pgmpy:Probability values don't exactly sum to 1. Differ by: 1.1102230246251565e-16. Adjusting values.

100%|█████████▉| 9973/9999 [00:08<00:00, 1238.18it/s] 100%|██████████| 9999/9999 [00:08<00:00, 1237.33it/s] +------+----------+ | B | phi(B) | +======+==========+ | B(1) | 0.9974 | +------+----------+ | B(0) | 0.0026 | +------+----------+

zqxyus avatar Dec 25 '23 22:12 zqxyus

Another minimal working example:

from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
if __name__=="__main__":
  model=BayesianNetwork([['B','A'],['E','A'],['A','J'],['A','M']])
  B_cpd = TabularCPD('B', 2, [[0.001],[0.999]],
                          state_names={'B': ['T', 'F']})
  E_cpd = TabularCPD('E', 2, [[0.002],[0.998]],
                          state_names={'E': ['T', 'F']})
  A_cpd = TabularCPD('A', 2, [[0.95, 0.94,0.29,0.001], [0.05,0.06,0.71,0.999]],
                     evidence=['B',"E"],
                     evidence_card=[2,2],
                     state_names={'A': ['T', 'F'],
                                  'B': ['T', 'F'],
                                  'E': ['T', 'F']}
                     )
  model.add_cpds(E_cpd)
  model.add_cpds(B_cpd)
  model.add_cpds(A_cpd)
  J_cpd = TabularCPD('J', 2, [[0.9, 0.05], [0.1,0.95]],
                     evidence=['A'],
                     evidence_card=[2],
                     state_names={'A': ['T', 'F'],
                                  'J': ['T', 'F']}
                     )
  M_cpd = TabularCPD('M', 2, [[0.7, 0.01], [0.3,0.99]],
                     evidence=['A'],
                     evidence_card=[2],
                     state_names={'A': ['T', 'F'],
                                  'M': ['T', 'F']}
                     )
  model.add_cpds(J_cpd)
  model.add_cpds(M_cpd)
  inference = VariableElimination(model)
  ev_query = inference.query(variables=["B"],evidence={"M":"T","J":"T"})
  print(ev_query)
  from pgmpy.inference import ApproxInference
  infer = ApproxInference(model)
  from pgmpy.sampling import GibbsSampling
  gibbs = GibbsSampling(model)
  sampledata=gibbs.sample(size=int(7),include_latents=True,seed=123)
  print(sampledata)
  approx_query2 = infer.query(variables=["B"],evidence={"M":"T","J":"T"},samples=sampledata,seed=1123)
  print(approx_query2)
  approx_query2 = infer.query(variables=["B"],samples=sampledata,seed=1123)
  print(approx_query2)
  

+------+----------+ | B | phi(B) | +======+==========+ | B(T) | 0.2842 | +------+----------+ | B(F) | 0.7158 | +------+----------+ WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers WARNING:pgmpy:Found unknown state name. Trying to switch to using all state names as state numbers 100%|██████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 6017.65it/s] The following is a dataframe returned by gibbs sample

B A E J M 0 0 1 0 1 0 1 1 0 0 0 1 2 1 1 1 1 1 3 1 1 1 1 1 4 1 1 1 1 1 5 1 1 1 1 1 6 1 1 1 1 1

The following is the P(B | M=1,J=1) +------+----------+ | B | phi(B) | +======+==========+ | B(0) | 0.1429 | +------+----------+ | B(1) | 0.8571 | +------+----------+

The following is the P(B ) +------+----------+ | B | phi(B) | +======+==========+ | B(0) | 0.1429 | +------+----------+ | B(1) | 0.8571 | +------+----------+ All in all, whether given evidence or not does not affect the value of query P(B)?

zqxyus avatar Dec 26 '23 04:12 zqxyus