代码参考:https://lingmoumou.github.io/p/2020/01/15/5f13e255/#more
1.决策树解释
决策树是什么东西?就是我们平常所说的if-then条件,我们把它组合成树的结构. 决策树中有两种结点,叶子结点和非叶子结点. 其中非叶节点代表的条件,叶子结点表示的实例所属的类别.
我们如何生成这个决策树呢,最主要的一点就是选择那个特征作为当前树的分割结点,这就叫做特征选择,有了特征选择就有了决策树的生成,最后我们还有进行决策树剪枝(后面会提到为什么剪枝).
看个统计学习方法上的例子:
现在我们有下面一张表的数据,想生成一个决策树模型,预测某个人是否符合贷款条件.
现在假如我们通过"某种方法"构造了一颗下面的决策树. 从下图可以看到特征对应的是非叶子结点,如果这个被分到这个叶节点,就预测为这个叶节点的类别. 从图中我们可以知道以下两点:
1.每一个叶子节点都对应一条从根节点到叶节点的规则,这表示决策树是if-then规则的集合
2.如果一个实例到达了某个叶节点,一定表示它满足了从根节点到该叶子节点的所有条件,而后才得到类别,这不就是先满足条件再得到概率嘛,我们一般叫做条件概率分布
2.ID3&C4.5
常见的决策树模型有以下三种
- ID3: 使用信息增益准则选择特征, 相当于用极大似然法进行概率模型选择.
- C4.5: 和ID3算法相似, 只是用信息增益比选择特征.
- CART: 递归构建二叉决策树, 回归树:使用平方误差; 分类树:使用基尼指数.
3.过拟合和剪枝
决策树建立的过程中,只考虑经验损失最小化,没有考虑结构损失. 因此可能在训练集上表现良好,但是会出现过拟合问题.(我们构造决策树的时候,是完全的在训练数据上得到最优的模型. 这就是过拟合问题,训练误差很小,但是验证集上就不怎么好用.) 为了解决过拟合,我们从模型损失进行考虑:
模型损失=经验风险最小化+正则项=结构风险最小化模型损失=经验风险最小化+正则项=结构风险最小化
思路很简单,给损失函数加上正则项再进行优化. 正则项表示树节点的个数,因此有如下公式:
Cα(T)=C(T)+α|T|
4.代码实现
cart树的分类和回归两个接口,接口参考sklearn