在决策树中权衡样本

Posted

技术标签:

【中文标题】在决策树中权衡样本【英文标题】:Weighing Samples in a Decision Tree 【发布时间】:2016-08-10 14:16:25 【问题描述】:

我构建了一个决策树,它对每个样本进行同等加权。现在构建一个决策树,为不同的样本赋予不同的权重。我需要做的唯一改变是在计算信息增益之前找到预期熵。我有点困惑如何进行,请解释....

例如:考虑一个包含p个正节点和n个负节点的节点。所以节点熵将为-p/(p+n)log(p/(p+n)) -n/(p+n)log(n/(p+n))。现在,如果发现分裂以某种方式将父节点分成两个子节点。假设孩子 1 包含 p' 正数和 n' 负数(所以孩子 2 包含 pp' 和 n-n')。现在对于孩子 1,我们将计算熵为父母计算并采取到达它的概率,即(p'+n')/(p+n)。现在预期的熵减少将是entropy(parent)-(prob of reaching child1*entropy(child1)+prob of reaching child2*entropy(child2))。并且将选择具有最大信息增益的拆分。

现在,当我们有每个样本的权重可用时,执行相同的程序。需要进行哪些更改?需要专门针对 adaboost 进行哪些更改(仅使用树桩)?

【问题讨论】:

这很简单。您唯一需要计算熵的是预期 p_i - 叶中的事件部分。使用权重计算它们:p_1 = 1 类事件的权重总和/所有事件的权重总和(注意,当所有权重相等时,它们与简单的预期概率一致)。 @Alleo 这是否意味着权重有点像样本发生的概率。因此,如果我们最初有 m 个示例,每个示例的权重为 1/m,因此节点熵将为 (p/m)log(p/m)+((mp)/m)log((mp)/m),其中p 是节点中正样本的数量。能否请您详细解释一下完整的方法。 @Alleo 因此,在计算当前节点熵或仅计算预期熵时,权重也是如此...... 权重包含在两者中。表达是正确的。权重与样本发生的概率成正比。检查您是否正确完成所有事情的最简单方法是将所有权重乘以任何正数并检查所选阈值是否没有变化。 请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。 【参考方案1】:

(我想这与某些 cmets 中的想法相同,例如@Alleo)

假设您有p 正例和n 负例。让我们将示例的权重表示为:

a1, a2, ..., ap  ----------  weights of the p positive examples
b1, b2, ..., bn  ----------  weights of the n negative examples

假设

a1 + a2 + ... + ap = A 
b1 + b2 + ... + bn = B

正如您所指出的,如果示例具有单位权重,则熵将为:

    p          p          n         n
- _____ log (____ )  - ______log(______ )
  p + n      p + n      p + n     p + n

现在只需将p替换为A,将n替换为B,即可获得新的实例加权熵。

    A          A          B         B
- _____ log (_____)  - ______log(______ )
  A + B      A + B      A + B     A + B

注意:这里没什么特别的。我们所做的只是找出这组正例和负例的加权重要性。当例子的权重相等时,正例的重要性与正数与所有例子的数量之比成正比。当示例的权重不相等时,我们只需执行加权平均即可获得正例的重要性。

然后您按照相同的逻辑通过比较拆分之前和拆分后的熵来选择具有最大信息增益的属性。

【讨论】:

我在哪里可以获得有关它的文献。

以上是关于在决策树中权衡样本的主要内容,如果未能解决你的问题,请参考以下文章

机器学习-决策树和随机森林

如何找到决策树中每个叶子或节点的索引?

ID3决策树

机器学习系列-决策树

scikit-learn 决策树节点深度

为啥我们不能在决策树中随机启动根节点?