决策树学习的关键是:如何确定最优划分属性。
我们希望,决策树划分过程中,分支结点所包含的样本尽可能同属一类。即结点的纯度越来越高。分支结点的纯度越高,则熵越小。
对于信息增益,定义为:分支前的熵-分支后的熵。分支后纯度越高,熵越小,减数越小,则差值越大。即信息增益越大,表明分支越好。
对于信息增益率,除以该属性取值的分布熵。也是越大越好。
信息增益,对可取值数目较多的属性有所偏好,取值越多,越趋近于一个结点一个样本,这样熵很小,增益值很大。
为了平衡,除以属性的“固有值”即分布熵。属性可能取值越多,通常该值越大。起到矫正作用。
信息增益率,对可取值较少的属性有所偏好。取值越少,固有值越小,则分母越小,信息增益率越大。
C4.5启发式选择算法:先从候选划分属性中找到信息增益高于平均水平的(小的不包避免除以小分母翻把;大坏的包),再从其中选择信息增益率最大的(抑制里面大坏的)。
基尼值:
直观上,可反映从数据集D中随机抽取两个样本,其类别标记不一致的概率。那基尼值越小,则D的纯度越高。
趋势情况,和熵的类似。直接用基尼系数选,则要选最小的。
决策树学习算法对付过拟合:剪枝。
剪枝的基本策略:
问:如何判断决策树的泛化性能?
答:使用验证集,计算前后的精确度比较。
预剪枝的优缺点:
后剪枝的优缺点,与上相反。优点是不会欠拟合,泛化性能往往优于预剪枝;缺点是时间开销较大。
此处剪枝的原则,根据验证集的泛化误差,也就是错误率来决定是不是剪枝。
而李航书中讲到此处时,考虑结点的纯度(如熵,如基尼指数),没有验证集,即当前分的越好,每个结点的类别越干净,则熵越小,并考虑子树的结点(正则化)。
这是两种思路。
即对应了CART中的回归树。在连续属性中寻找一个最佳切分属性和切分点。
与离散属性不同,若当前结点划分属性为连续属性,该属性还可以作为后代结点的划分属性。(划分点可以不同)
西瓜书P85页的例子还说明:连续值和离散值可同一个树中,即将连续值看作是可取值为2的一个离散属性即可。将连续值分为+和-两类,即可像离散那样处理。
通常意义上,某一列有缺失值,若是离散,以众数代替;若是连续,以均值代替。
P87页的算法,是针对Gain公式进行调整的一种算法。不是通常理解上的缺失值处理。来源于[Quinlan, 1993] C4.5算法的一种处理。
大体上,进行划分属性选择时,每个属性计算时忽略缺失值,但要乘上使用的非缺失值比例。给定划分属性后,若某样本在该属性上的值缺失,则将样本划分到所有子结点,调整样本权值保持为1即可。
将各个属性看作是一个坐标轴,则d个属性对应的样本,对应着d维空间中的一个点。对样本分类意味着,在这个空间中寻找不同样本之间的分类边界。
决策树形成的分类边界:轴平行。分类边界由若干个与坐标轴平行的分段构成。这使得结果具有较好的可解释性。
然而如果任务的分类边界较为复杂,必须用很多段才可以凑出来。
此时决策树相当复杂,进行大量的属性测试,时间开销大。
若可以使用斜的划分边界,那就省事了。
多变量决策树,可实现斜划分,非叶结点不再是某个属性,而是属性的线性组合。与传统单变量决策树不同(为每个非叶结点寻找一个最优划分属性),而是建立一个合适的线性分类器。
想起当时TSA比赛为何组合属性会有提升?原因在于多加一个组合属性,即空间多一维,而那一维上分类平面可能比较容易划分。
剪枝对提高决策树的泛化性能影响显著,当数据有噪声时,尤为明显。
本质上,各种特征选择方法均可用于决策树划分属性选择。
有一些决策树学习算法可以“增量学习”:在接收到新样本后可对已学得的模型进行调整,不用完全重新学习,主要机制是通过调整分支路径上的划分属性次序,对树进行部分重构。如ID4,ID5R等。增量学习有效降低每次接收到新样本后的训练时间开销,但多步增量学习后的模型,会与基于全部数据学得的模型有较大差别。
优点
缺点