这段代码是什么意思:from pgmpy.factors.discrete import TabularCPD
from pgmpy.models import BayesianNetwork
from pgmpy.inference import VariableElimination
import numpy as np
import pandas as pd
from pgmpy.models import BayesianModel
from pgmpy.estimators import MaximumLikelihoodEstimator, BayesianEstimator
forest_fires_model = BayesianNetwork([('PV', 'CF'), ('TS', 'CF'), ('TS', 'LT'), ('CF', 'FF'), ('LT', 'FF')])
Park_visitors_cpd = TabularCPD(
variable='PV', # node name
variable_card=2, # number of value of nodes
values=[[0.97],
[0.03]]
)
Thunderstorms_cpd = TabularCPD(
variable='TS',
variable_card=2,
values=[[0.1],
[0.9]]
)
Camp_fires_cpd = TabularCPD(
variable='CF',
variable_card=2,
values=[[0.23, 0, 0.8, 0.02],
[0.77, 1.00, 0.2, 0.98]],
evidence=['PV', 'TS'],
evidence_card=[2, 2]
)
Lightning_cpd = TabularCPD(
variable='LT',
variable_card=2,
values=[[0.43, 0.02],
[0.57, 0.98]],
evidence=['TS'],
evidence_card=[2]
)
Forest_fire_cpd = TabularCPD(
variable='FF',
variable_card=2,
values=[[0.24, 0.13, 0.07, 0.06],
[0.76, 0.87, 0.93, 0.94]],
evidence=['CF','LT'],
evidence_card=[2, 2]
)
forest_fires_model.add_cpds(
Park_visitors_cpd,
Thunderstorms_cpd,
Camp_fires_cpd,
Lightning_cpd,
Forest_fire_cpd
)
forest_fires_model.get_cpds()
forest_fires_model.get_independencies()
print(forest_fires_model.check_model())
forest_fires_infer = VariableElimination(forest_fires_model)
prob_FF = forest_fires_infer.query(
variables=['FF'],
evidence={'PV': 1})
print(prob_FF)
prob_PV = forest_fires_infer.query(
variables=['PV'],
evidence={'FF': 1,'TS': 0})
print(prob_PV)
a = [20,100,1000,10000]
for i in a:
try:
print("samples number is: ", i)
# get data
raw_data = np.random.randint(low=0, high=2, size=(i, 5))
data = pd.DataFrame(raw_data, columns=['PV', 'TS', 'CF', 'LT', 'FF'])
data.head()
# build model
model = BayesianNetwork([('PV', 'CF'), ('TS', 'CF'), ('TS', 'LT'), ('CF', 'FF'), ('LT', 'FF')])
# train based on MaximumLikelihood
model.fit(data, estimator=BayesianEstimator)
for cpd in model.get_cpds():
# print probability
print("CPD of {variable}:".format(variable=cpd.variable))
print(cpd)
except Exception as e:
print(e)