决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
一、决策树构建过程
1 构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
2 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。
3 如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。
4 每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。
二、每次划分时的属性选择
如何切分特征(选择节点)问题:
根节点的选择该用哪个特征呢?接下来呢?如何切分呢?
想象一下:我们的目标应该是根节点就像一个老大似的能更好的切分数据(分类的效果更好),根节点下面的节点自然就是二当家了。
目标:通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,以此类推
熵:
熵是表示随机变量不确定性的度量(解释:说白了就是物体内部的混乱程度,比如杂货市场里面什么都有那肯定混乱呀,专卖店里面只卖一个牌子的那就稳定多啦)
公式: H(X)=-Σpi * logpi, i=1,2, .., n0
一个栗子:
A集合[1,1,1,1,1,1,1,1,2,2]
B集合[1,2,3,4,5,6,7,8,9,1]
显然A集合的熵值要低,因为A里面只有两种类别,相对稳定一些,而B中类别太多了,熵值就会大很多。(在分类任务中我们希望通过节点分支后数据类别的滴值大还是小呢?)
信息增益:
表示特征X使得类Y的不确定性减少的程度(分类后的专一性,希望分类后的结果是同类在一起)
如何决策一个节点的选择呢?
下面介绍一个决策树的构造方法,下面的图来自这个视频4-决策树构造实例_哔哩哔哩_bilibili
首先找到划分根节点的属性,分别计算4个属性的信息增益
先算出关于天气这个属性,各个值的熵
然后再算出关于天气的信息增益
同理计算其他三个特征的信息增益,选择信息增益最大的特征划分根节点,,,,然后一次划分每个子树,直至不能划分(即每个叶子节点的熵为0,或者到达了预设条件)
三、ID3算法、C4.5算法、CART算法
- ID3算法(信息增益准则):根据信息增益最大来选取最优划分特征。
ID3往往选择分类水平多的特征作为划分特征;不能处理连续变量,需要对连续变量进行离散化;对缺失值敏感;没有剪枝设置,容易过拟合。
- C4.5算法(信息增益率准则):先从候选划分特征中找出信息增益高于平均水平的特征,再从中选择信息增益率最高的作为最优划分特征。
C4.5算法中,增益率准则可分类水平少的特征有所偏好,校正了ID3算法中的不足。增加了连续变量处理手段,将连续变量处理为N-1个二分方案,找到增益率最大的切分点。
- CART算法(Sklearn使用该算法)
分类树:Gini准则
回归树:对到达叶节点的样本使用平均值作出预测,用最小平方误差来选择最优切分点和最优划分变量
四、决策树剪枝
- 预剪枝:决策树生成中,每个节点划分前进行估计,如果不能带来决策树预测泛化能力的提升,则停止划分并将当前节点标记为叶节点。训练开销和测试开销小,但是可能带来欠拟合。
- 后剪枝:先训练完一棵完整的树,自底向上对非叶节点进行考虑,如果该非叶节点替换为叶节点后带来决策树预测泛化能力的提升,则将子树替换为叶节点。训练开销大,欠拟合风险小,泛化能力强。