在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树往往会过拟合,这就是说,它会在训练集上表现很好,在测试集上却表现糟糕。我们收集的样本数据不可能和整体的状况完全一致,因此当一棵决策树对训练数据有了了过于优秀的解释性,它找出的规则必然包含了训练样本中的噪声,并使它对未知数据的拟合程度不足。
为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。sklearn为我们提供了不同的剪枝策略:
max_depth
限制树的最大深度,超过设定深度的树枝全部剪掉。
这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。决策树多生长⼀一层,对样本量量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。在集成算法中也非常实用。实际⽤用时,建议从=3开始尝试,看看拟合的效果再 决定是否增加设定深度。
min_samples_leaf & min_samples_split
min_samples_leaf
限定一个结点在分支后的每个子结点都必须包含至少min_samples_leaf个训练样本,否则分支就不会发生,或者,分支会朝着满足每个子结点都包含min_samples_leaf个样本的方向去
发生。
一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据⼀一般来说,建议从=5开始使用。如果叶结点中含有的样本量变化很 大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子结点出现。对于类别不多的分类问题,=1通常就是最佳选择。
min_samples_split
限定一个结点必须要包含至少min_samples_split个训练样本,这个结点才允许被分支,否则分支就不会发生。
clf = tree.DecisionTreeClassifier(criterion="entropy",
random_state=30,splitter=