计算特定属性的熵?

时间:2016-06-15 15:36:04

标签: decision-tree id3 entropy information-gain

这非常简单,但我正在学习决策树和ID3算法。我找到了一个非常有用的网站,我跟踪了关于熵和信息增益的一切,直到我到达

this point on the page.

我不明白如何计算每个属性(晴天,多风,下雨)的熵 - 具体来说,如何计算p-sub-i。它似乎与熵(S)的计算方式不同。谁能解释一下这个计算背后的过程呢?

2 个答案:

答案 0 :(得分: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

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

希望这有帮助! :)

答案 1 :(得分:1)

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

应用仅考虑晴天熵的熵公式。 有3个晴天实例,分为2个类别,其中2个涉及网球,而1个涉及电影。因此,晴天的熵公式如下所示: -2/3 log2(2/3)-1/3 log2(1/3)= 0.918

以此类推。