- 决策树学习是数据挖掘中常用的一种监督学习方法,一颗决策树包含根结点,内部结点和叶结点。其根结点为算法开始阶段,包含所有样本,内部结点代表测试阶段,对应按照某个特征进行的划分结果,叶子结点对应最终决策结果(分类结果或回归结果)
- 几种决策树对比,主要差别就是分裂依据
信息熵: E n t ( D ) = − ∑ k = 1 ∣ y ∣ P k L o g 2 P k Ent(D)=-\sum_{k=1}^{\left|y\right|}P_kLog_2P_k Ent(D)=−k=1∑∣y∣PkLog2Pk
求集合样本数: N u m ( x ) Num(x) Num(x)
IV: I V ( a ) = − ∑ v = 1 V N u m ( D v ) N u m ( D ) l o g 2 N u m ( D v ) N u m ( D IV(a)=-\sum_{v=1}^{V}\frac{Num(D^v)}{Num(D)}log_2\frac{Num(D^v)}{Num(D} IV(a)=−v=1∑VNum(D)Num(Dv)log2Num(DNum(Dv)
基尼值: G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ p k ( 1 − p k ) Gini(D)=\sum_{k=1}^{|y|}\sum_{k'}p_k(1-p_k) Gini(D)=k=1∑∣y∣k′∑pk(1−pk)
分裂依据 | 计算公式 | |
---|---|---|
ID3 | 信息增益 | G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V N u m ( D v ) N u m ( D ) E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{Num(D^v)}{Num(D)}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑VNum(D)Num(Dv)Ent(Dv) |
C4.5 | 信息增益率 | G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gainratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a) |
CART | 基尼系数 | G i n i i n d e x ( D , a ) = ∑ v = 1 V N u m ( D v ) N u m ( D ) G i n i ( D v ) Giniindex(D,a)=\sum_{v=1}^{V}\frac{Num(D^v)}{Num(D)}Gini(D^v) Giniindex(D,a)=v=1∑VNum(D)Num(Dv)Gini(Dv) |
补充:ID3倾向于取属性可取值数目较多的,这样会弱化泛化能力。C4.5在ID3基础上提出增益率进行改进,是先找出信息增益高于平均水平的,再从中找增益率(属性可取值数目相对少)高的。ID3和C4.5都是多叉树支持分类,CART是二叉树支持分类和回归。
-
决策树的优点:1.易于理解和实现 2.一般不需要预处理数据 3.即可以处理连续值也可以处理离散值 4.不需要先验假设
-
决策树的缺点:1. 决策树算法非常容易过拟合 2.分裂时只考虑一种特征,忽略特征间相关性
-
决策树剪枝:
剪枝 (pruning) 是决策树学习算法对付 “过拟合” 的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因针对训练样本学得 “太好” 了,以至于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险。
决策树剪枝的基本策略有 “预剪枝” (prepruning) 和 “后剪枝” (postpruning)。预剪枝 是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前结点标记为叶结点;后剪枝 则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点的子树替换为叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点 -
GB vs GBDT vs xgboost vs lightGBM
GB:迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,是一个学习残差的过程
GBDT:则特指梯度提升决策树算法,通过决策树来实现GB
xgboost:GB算法的一种高效实现,xgboost 中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)。xgboost在目标函数中显示的加上了正则化项。xgboost 不仅使用到了一阶导数,还使用二阶导数。对每个特征进行分块(block)并排序,使得在寻找最佳分裂点的时候能够并行化计算。出的近似特征划分算法,即approximate split finding algorithm。不同于基本的穷举算法,paper指出两种近似算法:一种是全局算法,即在初始化tree的时候划分好候选节点,并且在树的每一层都使用这些候选节点;另一种是局部算法,即每一次划分的时候都重新计算候选节点。这两者各有利弊,全局算法不需要多次计算候选节点,但需要一次获取较多的候选节点供后续树生长使用,而局部算法一次获取的候选节点较少,可以在分支过程中不断改善,即适用于生长更深的树,两者在effect和accuracy做trade off。
参考:
- 决策树 —— 最符合人类思维的机器学习方法 - 张磊的文章 - 知乎
https://zhuanlan.zhihu.com/p/36542665 - https://blog.csdn.net/qingqing7/article/details/78416708
- https://www.cnblogs.com/wxquare/p/5541414.html
- 机器学习算法中 GBDT 和 XGBOOST 的区别有哪些? - 知乎
https://www.zhihu.com/question/41354392