是否可以从数据中学习二元决策图 (BDD)(如机器学习方式)?如果是这样,怎么做?
背景:我在 Python 中看到了一些工具来完成这项任务,例如,带有scikit-learn 的决策树 (DTs) ,但我还没有看到任何用于 BDD 的工具。
例如,我想做的是以下内容:
前三列对应“输入”数据集(xi),标签为(y)。N 对应于计数,例如,您可以使用后者来计算准确性。请注意,这不是割集矩阵。在中间,您会看到一个对应的 BDD(这是我想要获得的图表),右侧是一个对应的 DT。
是否可以从数据中学习二元决策图 (BDD)(如机器学习方式)?如果是这样,怎么做?
背景:我在 Python 中看到了一些工具来完成这项任务,例如,带有scikit-learn 的决策树 (DTs) ,但我还没有看到任何用于 BDD 的工具。
例如,我想做的是以下内容:
前三列对应“输入”数据集(xi),标签为(y)。N 对应于计数,例如,您可以使用后者来计算准确性。请注意,这不是割集矩阵。在中间,您会看到一个对应的 BDD(这是我想要获得的图表),右侧是一个对应的 DT。
如果目标是将输入输出估值表转换为代表由这些估值定义的布尔函数的 BDD,那么是的,这是可能的(这不是任何形式的学习)。例如,使用 Python 包dd
:
from dd import autoref
bdd = autoref.BDD()
bdd.declare('x1', 'x2', 'x3')
# These are the assignments to the input variables
# where the Boolean function is TRUE (the y).
# The assignments where the Boolean function is FALSE
# are not used in the disjunction below.
data = [
dict(x1=True, x2=False, x3=True),
dict(x1=True, x2=True, x3=False),
dict(x1=True, x2=True, x3=True)]
u = bdd.false
for d in data:
u |= bdd.cube(d) # disjunction so far
bdd.dump('example.png', roots=[u])
我们得到下图,其中包括补边:
该软件包dd
可以从PyPI安装:
pip install dd