CART与决策树中的超参数
我们之前学习的决策树通常还有一个名字,叫做 CART(Classification And Regression Tree)。这样的决策树如名称所说的,既可以解决分类问题,也可以解决回归问题。也是根据某一个维度
d
d
d 和某一个阈值
v
v
v 进行二分,那么这样得到的决策树一定是一颗二叉树。sklearn 中实现的决策树都是 CART。
当我们建立好一颗决策树,平均而言,它做预测的时间复杂度为
O
(
l
o
g
m
)
O(logm)
O(logm),
m
m
m 为样本个数。可以想象成平均来看,每一次在一个节点上划分都是对当前的数据集进行对半划分,所以最终这棵树的高度就是
l
o
g
m
logm
logm。但是训练过程的时间复杂度是非常高的,达到了
O
(
n
∗
m
∗
l
o
g
m
)
O(n*m*logm)
O(n∗m∗logm),因为有
l
o
g
m
logm
logm 层,在每一层大概要做
n
∗
m
n*m
n∗m 次尝试。在之前模拟决策树节点划分的时候,要对每一个维度
n
n
n 之后要对每一个样本
m
m
m 进行遍历,最终找到最佳的划分点。这个复杂度是比较高的。
但是,决策树还有一个更大的问题,就是非常容易产生过拟合,其实这一点是和 kNN 算法是一样的。事实上所有的非参数学习算法都非常容易产生过拟合。那么基于这些原因,我们实际在创建决策树的时候,必须对决策树进行剪枝,就是为了降低复杂度,防止过拟合。那么我们怎么进行剪枝呢?
其实在之前的例子中,我们一直在对决策树进行剪枝,当我们创建决策树对象时,我们一直传入了一个参数 max_depth = 2,我们限制了决策树的高度最多是 2,这实际上就是一个剪枝手段。换句话说,我们在使用 sklearn 来创建决策树的时候,所谓的剪枝就是我们需要对一些参数进行平衡。
下面我们通过具体编程观察还有什么参数可以用于剪枝。
对于一棵决策树来说,除了举例的参数,还有其它参数。
我们现在一直使用决策树来解决分类问题,下一篇博客具体介绍怎么使用决策树实现回归问题。
具体代码见 84 CART与决策树中的超参数.ipynb