首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》3.6.1 最大化信息增益获知尽可能准确的结果

关灯直达底部

为了在可获得最大信息增益的特征处进行节点划分,需要定义一个可通过树学习算法进行优化的目标函数。在此,目标函数能够在每次划分时实现对信息增益的最大化,其定义如下:

其中,f为将要进行划分的特征,Dp与Dj分别为父节点和第j个子节点,I为不纯度衡量标准,Np为父节点中样本的数量,Nj为第j个子节点中样本的数量。可见,信息增益只不过是父节点的不纯度与所有子节点不纯度总和之差——子节点的不纯度越低,信息增益越大。然而,出于简化和缩小组合搜索空间的考虑,大多数(包括scikit-learn)库中实现的都是二叉决策树。这意味着每个父节点被划分为两个子节点:Dleft和Dright。

就目前来说,二叉决策树中常用的三个不纯度衡量标准或划分标准分别是:基尼系数(Gini index,IG)、熵(entropy,IH),以及误分类率(classification error,IE)。我们从非空类别(p(i|t)≠0)熵的定义开始讲解:

其中,p(i|t)为特定节点t中,属于类别c的样本占特定节点t中样本总数的比例。如果某一节点中所有的样本都属于同一类别,则其熵为0,当样本以相同的比例分属于不同的类时,熵的值最大。例如,对二类别分类来说,当p(i=1|t)=1或p(i=0|t)=0时,熵为0,如果类别均匀分布,即p(i=1|t)=0.5且p(i=1|t)=0.5时,熵为1。因此,我们可以说在决策树中熵的准则就是使得互信息最大化。

直观地说,基尼系数可以理解为降低误分类可能性的标准:

与熵类似,当所有类别是等比例分布时,基尼系数的值最大,例如在二类别分类中(c=2):

然而,在实践中,基尼系数与熵通常会生成非常类似的结果,并不值得花费大量时间使用不纯度标准评估树的好坏,而通常尝试使用不同的剪枝算法。

另一种不纯度衡量标准是误分类率:

这是一个对于剪枝方法很有用的准则,但是不建议用于决策树的构建过程,因为它对节点中各类别样本数量的变动不敏感。我们通过下图中两种可能的划分情况对此进行解释:

以数据集Dp为例(在父节点Dp),它包含属于类别1的40个样本和属于类别2的40个样本,我们将它们分别划分到Dleft和Dright。在A和B两种划分情况下,使用误分类率得到的信息增益都是相同的(IGE=0.25):

然而,在使用基尼系数时,与划分A(IGG=0.125)相比,更倾向于使用B(IGG=0.16)的划分,因为这样子节点处的类别纯度相对更高:

同样,以熵为评估标准时,也是B(IGG=0.31)的信息增益大于A(IGG=0.19):

为了更直观地比较前面提到的三种不同的不纯度衡量标准,我们绘制样本属于类别1、概率介于[0,1]情况下不纯度的图像。注意,我们在图像中对熵(entropy/2)做了缩放,以便直接观察熵和误分类率对基尼系数的影响。代码如下:

执行上述代码后可得到如下图像: