1

这非常简单,但我正在学习决策树和 ID3 算法。我找到了一个非常有帮助的网站,我一直在关注有关熵和信息增益的所有内容,直到我开始

页面上的这一点。

我不明白如何计算每个单独属性(晴天、有风、下雨)的熵——特别是如何计算 p-sub-i。它似乎与计算熵(S)的方式不同。谁能解释这个计算背后的过程?

4

2 回答 2

3

计算sunny在集合S上表示的比例,即|sunnyInstances| / |S| = 3/10 = 0.3。

应用熵公式仅考虑阳光熵。有 3 个 Sunny 实例分为 2 个类别,其中 2 个与网球有关,1 个与电影有关。所以晴天的熵公式是这样的:-2/3 log2(2/3) - 1/3 log2(1/3) = 0.918

等等。

于 2018-08-17T18:06:48.840 回答
1

要将节点拆分为两个不同的子节点,一种方法是根据可以最大化信息增益的变量拆分节点。当你到达一个纯叶节点时,信息增益等于0(因为你不能通过分裂一个只包含一个变量的节点来获得任何信息 - logic)。

在您的示例Entropy(S) = 1.571中是您当前的熵 - 您在分裂之前拥有的熵。让我们称之为HBase。然后根据几个可拆分参数计算熵。要获得信息增益,请将子节点的熵减去HBase->gain = Hbase - child1NumRows/numOfRows*entropyChild1 - child2NumRows/numOfRows*entropyChild2

def GetEntropy(dataSet):
    results = ResultsCounts(dataSet)
    h = 0.0   #h => entropy

    for i in results.keys():
        p = float(results[i]) / NbRows(dataSet)
        h = h - p * math.log2(p)
    return h

def GetInformationGain(dataSet, currentH, child1, child2):
    p = float(NbRows(child1))/NbRows(dataSet)
    gain = currentH - p*GetEntropy(child1) - (1 - p)*GetEntropy(child2)
    return gain

目标是充分利用所有信息增益!

希望这可以帮助!:)

于 2016-06-23T14:07:25.050 回答