编程集体智能一书中关于决策树的问题

数据挖掘 Python 决策树
2022-03-10 08:54:57

我目前正在学习“编程集体智能”一书的第 7 章(“使用决策树建模”)。

我发现函数mdclassify()p.157 的输出令人困惑。该函数处理丢失的数据。提供的解释是:

在基本决策树中,所有事物的隐含权重为 1,这意味着观察完全取决于项目适合某个类别的概率。如果您要跟踪多个分支,则可以为每个分支赋予一个权重,该权重等于该侧所有其他行的分数。

据我了解,然后在分支之间拆分一个实例。

因此,我根本不明白我们如何获得:

{'None': 0.125, 'Premium': 2.25, 'Basic': 0.125}

as0.125+0.125+2.25总和不等于 1,甚至不等于整数。新的观察是如何分裂的?

代码在这里:

https://github.com/arthur-e/Programming-Collective-Intelligence/blob/master/chapter7/treepredict.py

使用原始数据集,我获得了此处显示的树:

截屏

谁能准确解释一下这些数字的确切含义以及它们是如何获得的?

PS:本书的第一个例子是错误的,正如他们的勘误页所描述的那样,但仅仅解释第二个例子(上面提到的)会很好。

1个回答

有四个特点:

  • 推荐人,
  • 地点,
  • 常问问题,
  • 页。

FAQ在您的情况下,您正在尝试对pages未知的实例进行分类:mdclassify(['google','France',None,None], tree)

由于第一个已知属性是google,因此在您的决策树中,您只对来自google右侧节点的边感兴趣。

有五个实例:三个标记Premium、一个标记Basic和一个标记None

带有标签Basic属性None拆分的实例。FAQ有两个,所以两个的重量都是0.5

现在,我们拆分pages属性。pages值大于 20的实例有 3个,pages值不大于 20 的实例有 2 个。

诀窍是:我们已经知道其中两个的权重是从每个更改10.5每个的。所以,现在我们每个加权了三个实例1,每个加权了 2 个实例0.5所以总价值是4

现在,我们可以计算pages属性的权重:

  • pages_larger_than_20 = 3/4
  • pages_not_larger_than_20 = 1/4 # 1 是:0.5 + 0.5

所有重量均已确定。现在我们可以将权重乘以实例的“频率”(记住 forBasicNone“频率” now 0.5):

  • Premium: 3 * 3/4 = 2.25# 因为有三个Premium实例,每个实例都有权重0.75
  • Basic: 0.5 * 1/4 = 0.125# 因为Basic是现在0.5,而分裂 pages_not_larger_than_201/4
  • None: 0.5 * 1/4 = 0.125# 类似地

这至少是数字的来源。我和你一样怀疑这个指标的最大值,以及它是否应该总和为 1,但是现在你知道这些数字来自哪里,你可以考虑如何标准化它们。