根据西瓜书《决策树》章节和李沐 b 站相关视频整理。
# 决策树
# 西瓜书
# 基本流程
什么情况下不需要继续往下分了?三种停止递归条件如下:
- 已全为同一种类别 -> 叶节点
- 已没有更多的属性往下分(西瓜色泽、敲声、根蒂,无其他属性)-> 谁多当做谁
- 遇到了未出现的属性值 -> 父节点谁多当做谁
最重要的是找到最优的划分属性
名词解释
先验分布:基于过去研究、专家经验等
后验分布:先验分布 + 观测数据
# 划分选择
分散的类别越多、概率越小,信息熵越大
信息增益越大,意味着使用属性 a 来进行划分所获得的纯度提升越大。每一次选取能够获得最大信息增益的属性进行划分,直到不能划分为止。
# 增益率
C4.5 决策树算法
增益越大越好,属性可选择值(分支数量)越小越好。
规范化:把不可直接比较的东西,变得可以比较。
归一化:规范化到 0-1 之间。
# 基尼指数
CART 决策树学习算法
# 剪枝处理
剪枝是决策树对付 “过拟合” 的主要手段!
过拟合:学习了数据集中不该学习的特性,学多了;不是一般规律,而是少量样本有的特性
# 预剪枝
提前终止某些分支的生长。
在生成树的时候就进行评估。如果划分后,精度增加,就划分;若精度无提升,就剪枝。
但在有些情况下,后续划分可能带来性能显著提高,基于 “贪心” 的预剪枝可能会造成欠拟合。
# 后剪枝
生成一颗完全树,再 “回头 “剪枝
后剪枝可以减少欠拟合的风险,但是训练开销较大。
# 连续与缺失值
# 连续值处理
最简单的处理策略是二分法。
候选点集是连续属性之间的中位点,挑选增益率最高的二分点。
# 缺失值处理
仅使用无缺失的样例,是对数据的极大浪费。
那么如何使用缺失值?基本思路:样本赋权、权重划分
- 如何划分属性选择?
- 给定划分属性,若样本在该属性上的值确实,如何进行划分?
解决方案、思路:
回答问题一:如何划分属性选择?
信息熵的计算增加权重,通过属性权重(非缺失样本概率)与子集的增益率,权衡选择。
回答问题二:给定划分属性,若样本在该属性上的值确实,如何进行划分?
将已知的后验概率作为未知的先验概率进行处理,缺失值样本将同时进入三个分支,但在进入分支时,以权重为概率进行划分。
# 多变量决策树
每个节点的决策不再依赖于单一属性,而是找到合适的线性分类器。
# 李沐
两个例子:
- 怎么用决策树来做分类:拿一个数据,看一下这个数据在节点上是应该往哪个方向走,一直往下走,走到叶子节点,就会得到数据所对应的标号
- 用决策树做回归:与上面那个例子不同的是,叶节点不是一个具体的类而是一个实数值
# 决策树的好与坏
好处:
- 可以解释(可以让人看到对数据处理的过程)【常用于银行业保险业】;
- 可以处理数值类和类别类的特征;
坏处:
- 不稳定(数据产生一定的噪音之后,整棵树构建出的样子可能会不一样)【使用集成学习 (ensemble learning) 可以解决】
- 数据过于复杂会生成过于复杂的树,会导致过拟合【把决策树的枝剪掉一些(在训练时觉得太复杂了就停下来,或在训练之后把特往下的节点给剪掉)】
- 大量的判断语句(太顺序化),不太好并行【在性能上会吃亏】
# 让决策树稳定的方法
# 随机森林
- 训练多个决策树来提升稳定性:
- 每棵树会独立的进行训练,训练之后这些树一起作用得出结果;
- 分类的话,可以用投票(少数服从多数);
- 回归的话,实数值可以时每棵树的结果求平均;
- 随机来自以下两种情况:
- Bagging:在训练集中随机采样一些样本出来(放回,可重复);
- 在 bagging 出来的数字中,再随机采样一些特征出来,不用整个特征;
# Boosting
- 顺序完成多个树的训练(之前是独立的完成)
- 例子说的是,利用训练好的树与真实值做残差来训练新的树,训练好了之后再与之前的树相加
- 残差 等价于 取了一个平均均方误差(预测值与真实值的)再求梯度乘上个负号
# 总结:
树模型在工业界用的比较多【简单,训练算法简单,没有太多的超参数,结果还不错】(不用调参结果还不错)
树模型能够用的时候,通常是第一选择。