开始预测

现在让我们来看看在图 6-1 中的树是如何进行预测的。假设你找到了一朵鸢尾花并且想对它进行分类,你从根节点开始(深度为 0,顶部):该节点询问花朵的花瓣长度是否小于 2.45 厘米。如果是,您将向下移动到根的左侧子节点(深度为 1,左侧)。 在这种情况下,它是一片叶子节点(即它没有任何子节点),所以它不会问任何问题:你可以方便地查看该节点的预测类别,决策树预测你的花是 Iris-Setosa(class = setosa)。

现在假设你找到了另一朵花,但这次的花瓣长度是大于 2.45 厘米的。你必须向下移动到根的右侧子节点(深度为 1,右侧),而这个节点不是叶节点,所以它会问另一个问题:花瓣宽度是否小于 1.75 厘米? 如果是,那么你的花很可能是一个 Iris-Versicolor(深度为 2,左)。 如果不是,那很可能一个 Iris-Virginica(深度为 2,右),真的是太简单了,对吧!

决策树的众多特性之一就是, 它不需要太多的数据预处理, 尤其是不需要进行特征的缩放或者归一化。

节点的samples属性统计出它应用于多少个训练样本实例。

例如,我们有一百个训练实例是花瓣长度大于 2.45 里面的(深度为 1, 右侧),在这 100 个样例中又有 54 个花瓣宽度小于 1.75cm(深度为 2,左侧)。

节点的value属性告诉你这个节点对于每一个类别的样例有多少个。

例如:右下角的节点中包含 0 个 Iris-Setosa,1 个 Iris-Versicolor 和 45 个 Iris-Virginica。

最后,节点的Gini属性用于测量它的纯度:如果一个节点包含的所有训练样例全都是同一类别的,我们就说这个节点是纯的(Gini=0)。

例如,深度为 1 的左侧节点只包含 Iris-Setosa 训练实例,它就是一个纯节点,Gini 指数为 0。

公式 6-1 显示了训练算法如何计算第i个节点的 gini 分数 G_i。例如, 深度为 2 的左侧节点基尼指数为:1-(0/54)^2-(49/54)^2-(5/54)^2=0.68。另外一个纯度指数也将在后文很快提到。

Equation 6-1. Gini impurity\\ G_i = 1 - \sum _{k=1}^{n}P_{i, k}^2

  • p_{i,k} 是第i个节点中训练实例为的k类实例的比例

Scikit-Learn 用的是 CART 算法, CART 算法仅产生二叉树:每一个非叶节点总是只有两个子节点(只有是或否两个结果)。然而,像 ID3 这样的算法可以产生超过两个子节点的决策树模型。

图 6-2 显示了决策树的决策边界。粗的垂直线代表根节点(深度为 0)的决定边界:花瓣长度为 2.45 厘米。由于左侧区域是纯的(只有 Iris-Setosa),所以不能再进一步分裂。然而,右边的区域是不纯的,所以深度为 1 的右边节点在花瓣宽度为 1.75 厘米处分裂(用虚线表示)。又由于max_depth设置为 2,决策树在那里停了下来。但是,如果将max_depth设置为 3,两个深度为 2 的节点,每个都将会添加另一个决策边界(用虚线表示)。

1528084209205

模型小知识:白盒与黑盒

正如我们看到的一样,决策树非常直观,他们的决定很容易被解释。这种模型通常被称为白盒模型。相反,随机森林或神经网络通常被认为是黑盒模型。他们能做出很好的预测,并且您可以轻松检查它们做出这些预测过程中计算的执行过程。然而,人们通常很难用简单的术语来解释为什么模型会做出这样的预测。例如,如果一个神经网络说一个特定的人出现在图片上,我们很难知道究竟是什么导致了这一个预测的出现:

模型是否认出了那个人的眼睛? 她的嘴? 她的鼻子?她的鞋?或者是否坐在沙发上? 相反,决策树提供良好的、简单的分类规则,甚至可以根据需要手动操作(例如鸢尾花分类)。