weixin_53121328 2021-06-06 09:31 采纳率: 50%
浏览 504
已采纳

values must be of shape of (2,1). Got shape(1,2)

软件3.9在做贝叶斯网络values=[[0.6,0.4]]

from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination

# 通过边来定义贝叶斯模型
model = BayesianModel([('D', 'G'), ('I', 'G'), ('G', 'L'), ('I', 'S')])

# 定义条件概率分布
cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.6, 0.4]])
cpd_i = TabularCPD(variable='I', variable_card=2, values=[[0.7, 0.3]])

# variable:变量
# variable_card:基数
# values:变量值
# evidence:
cpd_g = TabularCPD(variable='G', variable_card=3,
                   values=[[0.3, 0.05, 0.9,  0.5],
                           [0.4, 0.25, 0.08, 0.3],
                           [0.3, 0.7,  0.02, 0.2]],
                  evidence=['I', 'D'],
                  evidence_card=[2, 2])

cpd_l = TabularCPD(variable='L', variable_card=2,
                   values=[[0.1, 0.4, 0.99],
                           [0.9, 0.6, 0.01]],
                   evidence=['G'],
                   evidence_card=[3])

cpd_s = TabularCPD(variable='S', variable_card=2,
                   values=[[0.95, 0.2],
                           [0.05, 0.8]],
                   evidence=['I'],
                   evidence_card=[2])

# 将有向无环图与条件概率分布表关联
model.add_cpds(cpd_d, cpd_i, cpd_g, cpd_l, cpd_s)

# 验证模型:检查网络结构和CPD,并验证CPD是否正确定义和总和为1
model.check_model()
# 获得G点的概率表
print(model.get_cpds('G'))
# 获得G点的基数
print(model.get_cardinality('G'))
# 获取贝叶斯网络的局部依赖关系
print(model.local_independencies(['D','I','S','G','L']))
# 贝叶斯推理:变量消除
infer = VariableElimination(model)
print(infer.query(['G']), ['G'])
print(infer.query(['G'], evidence={'D':0, 'I':1})['G'])
print(infer.map_query('G'))
  • 写回答

3条回答 默认 最新

  • CSDN专家-Time 2021-06-06 11:40
    关注
    from pgmpy.models import BayesianModel
    from pgmpy.factors.discrete import TabularCPD
    from pgmpy.inference import VariableElimination
     
    # 通过边来定义贝叶斯模型
    model = BayesianModel([('D', 'G'), ('I', 'G'), ('G', 'L'), ('I', 'S')])
     
    # 定义条件概率分布
    cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.6], [0.4]])
    cpd_i = TabularCPD(variable='I', variable_card=2, values=[[0.7], [0.3]])
     
    # variable:变量
    # variable_card:基数
    # values:变量值
    # evidence:
    cpd_g = TabularCPD(variable='G', variable_card=3,
                       values=[[0.3, 0.05, 0.9,  0.5],
                               [0.4, 0.25, 0.08, 0.3],
                               [0.3, 0.7,  0.02, 0.2]],
                      evidence=['I', 'D'],
                      evidence_card=[2, 2])
     
    cpd_l = TabularCPD(variable='L', variable_card=2,
                       values=[[0.1, 0.4, 0.99],
                               [0.9, 0.6, 0.01]],
                       evidence=['G'],
                       evidence_card=[3])
     
    cpd_s = TabularCPD(variable='S', variable_card=2,
                       values=[[0.95, 0.2],
                               [0.05, 0.8]],
                       evidence=['I'],
                       evidence_card=[2])
     
    # 将有向无环图与条件概率分布表关联
    model.add_cpds(cpd_d, cpd_i, cpd_g, cpd_l, cpd_s)
     
    # 验证模型:检查网络结构和CPD,并验证CPD是否正确定义和总和为1
    model.check_model()
    # 获得G点的概率表
    print(model.get_cpds('G'))
    # 获得G点的基数
    print(model.get_cardinality('G'))
    # 获取贝叶斯网络的局部依赖关系
    print(model.local_independencies(['D','I','S','G','L']))
    # 贝叶斯推理:变量消除
    infer = VariableElimination(model)
    print(infer.query(['G']), ['G'])
    print(infer.query(['G'], evidence={'D':0, 'I':1})['G'])
    print(infer.map_query('G'))

    cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.6], [0.4]])

    cpd_i = TabularCPD(variable='I', variable_card=2, values=[[0.7], [0.3]])

     他要一维数组,你给了二维数组。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面