
决策树
|
167
训练算法比较每个节点上所有样本上的所有特征(如果设置了 max_features,则更
少)。比较每个节点上所有样本的所有特征会导致训练复杂度为
O
(
n
×
m
log
2
(
m
))。对于小
训练集(少于几千个实例),Scikit-Learn 可以通过对数据进行预排序(设置 presort =
True)来加快训练速度,但是这样做会大大降低大训练集的训练速度。
6.6 基尼不纯度或熵
默认使用的是基尼不纯度来进行测量,但是,你可以将超参数 criterion 设置为
"entropy" 来选择熵作为不纯度的测量方式。熵的概念源于热力学,是一种分子混乱
程度的度量:如果分子保持静止和良序,则熵接近于零。后来这个概念推广到各个领域,
其中包括香农的信息理论,它衡量的是一条信息的平均信息内容
注 4
:如果所有的信息都
相同,则熵为零。在机器学习中,它也经常被用作一种不纯度的测量方式:如果数据集
中仅包含一个类别的实例,其熵为零。公式 6-3 显示了第
i
个节点的熵值的计算方式。
例如,图 6-1 中深度 2 左侧节点的熵值等于
−−
54 54 54 54
49 49 5 5
log log 0.445
22
≈
。
1
公式 6-3:熵
H pp
i ik ik
= −
p
ik
∑
k
,
n
=1
≠0
, 2,
log ( )
那么到底应该使用基尼不纯度还是熵呢?其实,大多数情况下,它们并没有什么大的不
同,产生的树都很相似。基尼不纯度的计算速度略微快一些,所以它是个不错的默认选
择。它们的不同在于,基尼不纯度倾向于从树枝中分裂出最常见的类别,而熵则倾向于 ...