我正在读这本书(NLTK),这很令人困惑。 defined as:



如何在文本挖掘方面应用熵和最大熵?有人可以给我一个简单的例子(视觉)吗?

最佳答案

我假设在构建decision trees的上下文中提到了熵。

为了说明这一点,想象一下learningclassify姓氏分为男性/女性组的任务。给出了一个名称列表,每个名称都标有mf,我们想学习一个适合数据的model,并且可以用来预测一个新的看不见的名字的性别。

name       gender
-----------------        Now we want to predict
Ashley        f              the gender of "Amro" (my name)
Brian         m
Caroline      f
David         m

第一步是deciding哪些数据的features与我们要预测的目标类相关。一些示例功能包括:首字母/后一个字母,长度,元音数,以元音结尾等。因此,在提取特征后,我们的数据如下所示:
# name    ends-vowel  num-vowels   length   gender
# ------------------------------------------------
Ashley        1         3           6        f
Brian         0         2           5        m
Caroline      1         4           8        f
David         0         2           5        m

目标是构建decision treetree的示例为:
length<7
|   num-vowels<3: male
|   num-vowels>=3
|   |   ends-vowel=1: female
|   |   ends-vowel=0: male
length>=7
|   length=5: male

基本上,每个节点代表对单个属性执行的测试,而我们根据测试结果向左或向右移动。我们不断遍历树,直到到达包含类预测(mf)的叶节点

因此,如果我们沿这棵树运行名称Amro,我们首先测试“长度是否小于7?”。答案是肯定的,所以我们去了那个分支。在分支之后,下一个测试“元音的数量是否m的叶节点,因此预测是男性的(我碰巧是,所以树预测了结果correctly)。

决策树是built in a top-down fashion,但问题是如何选择在每个节点上拆分哪个属性?答案是找到一种功能,该功能可以将目标类最好地拆分为可能的最纯子节点(即,不包含男性和女性混合的节点,而只有一个类的纯节点)。

这种纯度的度量称为information。在到达该节点的示例的情况下,它表示指定新实例(名字)是男性还是女性时需要的expectedinformation数量。我们计算
基于节点上男性和女性类别的数量。

另一方面,Entropy是杂质的量度(相反)。它是为binary class定义的,其值a/b为:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))

下图描述了此binary entropy function(随机变量可以采用两个值之一)。当概率为p=1/2时,它达到最大值,这意味着p(X=a)=0.5或类似的p(X=b)=0.5有50%/50%的机会成为ab(不确定性最大)。当概率是完全确定的p=1p=0(分别为p(X=a)=1p(X=a)=0,后者暗示p(X=b)=1)时,熵函数的最小值为零。

当然,熵的定义可以推广到具有N个结果(不只是两个)的离散随机变量X:

(公式中的log通常被视为logarithm to the base 2)

回到我们的名称分类任务,让我们看一个例子。想象一下在构建树的过程中的某个时候,我们正在考虑以下拆分:
     ends-vowel
      [9m,5f]          <--- the [..,..] notation represents the class
    /          \            distribution of instances that reached a node
   =1          =0
 -------     -------
 [3m,4f]     [6m,1f]

如您所见,在拆分之前,我们有9位男性和5位女性,即P(m)=9/14P(f)=5/14。根据熵的定义:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403

接下来,我们将其与考虑两个子分支的拆分后计算出的熵进行比较。在ends-vowel=1的左分支中,我们有:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852

ends-vowel=0的右分支,我们有:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917

我们使用每个分支下的实例数作为weight factor组合左/右熵(左7个实例,右7个实例),并在拆分后获得最终熵:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885

现在,通过比较拆分前后的熵,我们获得了information gain的度量,即使用该特定功能进行拆分所获得的信息量:
Information_Gain = Entropy_before - Entropy_after = 0.1518

您可以按以下方式解释上述计算:通过使用end-vowels功能进行拆分,我们能够将子树预测结果的不确定性减少0.1518的少量量(在bits中以units of information度量)。

在树的每个节点上,对每个特征都执行此计算,并以greedy的方式为拆分选择具有最大信息增益的特征(因此倾向于生成具有低不确定性/熵的纯拆分的特征)。此过程从根节点开始递归应用,并在叶节点包含所有具有相同类的实例时停止(无需进一步拆分)。

请注意,我跳过了一些不在本文范围内的details,包括如何处理numeric featuresmissing valuesoverfittingpruning树等。

关于math - 什么是 “entropy and information gain”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1859554/

10-09 07:53