Python 生成非二进制贝叶斯网络时出错

Python 生成非二进制贝叶斯网络时出错,python,bayesian,naivebayes,bayesian-networks,Python,Bayesian,Naivebayes,Bayesian Networks,我有两个类来生成贝叶斯网络,BayesNode为网络生成节点,BayesNet在名为probabilityPlus.py的文件中生成网络 类BayesNode: “”“条件概率分布,P(X |双亲)。贝叶斯网的一部分。”“” 定义初始(自我、X、父母、cpt): “”“X是一个变量名,其父变量是一个变量序列 名称或空格分隔的字符串。cpt,条件 概率表采用以下形式之一: *一个数字,无条件概率P(X=true)。你可以 如果没有家长,请使用此表单。 *一个dict{v:p,…},条件概率分布 P

我有两个类来生成贝叶斯网络,
BayesNode
为网络生成节点,
BayesNet
在名为probabilityPlus.py的文件中生成网络

类BayesNode:
“”“条件概率分布,P(X |双亲)。贝叶斯网的一部分。”“”
定义初始(自我、X、父母、cpt):
“”“X是一个变量名,其父变量是一个变量序列
名称或空格分隔的字符串。cpt,条件
概率表采用以下形式之一:
*一个数字,无条件概率P(X=true)。你可以
如果没有家长,请使用此表单。
*一个dict{v:p,…},条件概率分布
P(X=true | parent=v)=P。当只有一个家长时。
*一个dict{(v1,v2,…):p,…},分布p(X=true)|
parent1=v1,parent2=v2,…=p。每个键必须具有相同数量的
价值观,因为有父母。您可以始终使用此表单;
前两个只是方便。
在所有情况下,X为假的概率都是隐式的,
因为它遵循P(X=真)。
"""
如果存在(父项、str):
parents=parents.split()
#我们总是以上述第三种形式存储表格。
如果isinstance(cpt,(float,int)):#无父项,0元组
cpt={():cpt}
elif isinstance(cpt,dict):
#单亲1元组
如果cpt和isinstance(列表(cpt.keys())[0],bool):
cpt={(v,):p代表v,cpt.items()中的p
断言实例(cpt、dict)
对于cpt.items()中的vs,p:
对于错误消息,断言isinstance(vs,tuple)和len(vs)=len(parents)#第163行»
断言全部(vs中v的isinstance(v,bool)
断言0