决策树模型分析
原创
©著作权归作者所有:来自51CTO博客作者六mo神剑的原创作品,请联系作者获取转载授权,否则将追究法律责任
决策树模型_性能分析
决策树模型分析
# 1. 构造决策树
# 我们在图 2-23 所示的二维分类数据集上构造决策树。这个数据集由 2 个半月形组成,每个
# 类别都包含 50 个数据点。我们将这个数据集称为 two_moons
# 为了构造决策树,算法搜遍所有可能的测试,找出对目标变量来说信息量最大的那一个。
# 图 2-24 展示了选出的第一个测试。将数据集在 x[1]=0.0596 处垂直划分可以得到最多信
# 息,它在最大程度上将类别 0 中的点与类别 1 中的点进行区分。顶结点(也叫根结点)表
# 示整个数据集,包含属于类别 0 的 50 个点和属于类别 1 的 50 个点。通过测试 x[1] <=
# 0.0596 的真假来对数据集进行划分,在图中表示为一条黑线。
# 如果测试结果为真,那么将
# 这个点分配给左结点,左结点里包含属于类别 0 的 2 个点和属于类别 1 的 32 个点。否则
# 将这个点分配给右结点,右结点里包含属于类别 0 的 48 个点和属于类别 1 的 18 个点。这
# 两个结点对应于图 2-24 中的顶部区域和底部区域。尽管第一次划分已经对两个类别做了很
# 好的区分,但底部区域仍包含属于类别 0 的点,顶部区域也仍包含属于类别 1 的点。我们
# 可以在两个区域中重复寻找最佳测试的过程,从而构建出更准确的模型。图 2-25 展示了信
# 息量最大的下一次划分,这次划分是基于 x[0] 做出的,分为左右两个区域。
# 这一递归过程生成一棵二元决策树,其中每个结点都包含一个测试。或者你可以将每个测
# 试看成沿着一条轴对当前数据进行划分。这是一种将算法看作分层划分的观点。由于每个
# 测试仅关注一个特征,所以划分后的区域边界始终与坐标轴平行。
# 对数据反复进行递归划分,直到划分后的每个区域(决策树的每个叶结点)只包含单一目
# 标值(单一类别或单一回归值)。如果树中某个叶结点所包含数据点的目标值都相同,那
# 么这个叶结点就是纯的(pure)。这个数据集的最终划分结果见图 2-26。
mglearn.plots.plot_tree_progressive()