一类常见的机器学习方法
决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。
决策过程的最终结论对应了我们所希望的判定结果。决策过程中提出的每个判定问题都是对某个属性的“测试”
一般的,一棵决策树包含一个根结点,若干个内部结点和若干个叶结点,叶结点对应了决策结果,其他结点对应于一个属性测试。
每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集。
从根结点到每个叶结点的路径对应了一个判定测试序列
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的生成是一个递归过程,有三种情形会导致递归返回(产生叶结点):
决策树学习的关键在于如何选择最优划分属性,随着划分的进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,纯度越来越高。
前置概念:
信息熵:度量样本集合纯度的一种指标
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k p k ( k = 1 , 2 , 3 … … , ∣ y ∣ ) Ent(D)=-\sum^{|y|}_{k=1}p_klog_2p_k ~~~ p_k(k=1,2,3……,|y|) Ent(D)=−∑k=1∣y∣pklog2pk pk(k=1,2,3……,∣y∣)
信息熵越小,D纯度越高
信息增益:划分前的信息熵减去划分后各结点的信息熵之和,表示纯度的提升
G a i n ( D , α ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,\alpha)=Ent(D)-\sum^V_{v=1}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,α)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
D v D^v Dv表示D以某一属性 a = a v a=a^v a=av为划分出来的分支结点所包含的样本集合, ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣表示分支结点所占的权重
ID3(Iterative Dichotomiser 3迭代二叉树三代)决策树,是由 Ross Quinlan于1986年提出的决策树思想方法,是以信息增益为准则来选择划分属性的。
通过比较对不同属性进行本次分支的划分,来找出最大的信息增益,来找到最优划分属性
由于信息增益对可取值数目较多的属性有所偏好(当取值较多时,用该属性划分出的单个分支纯度可能越高,那么这些分支的信息熵可能都比较小,相加后可以得到更小的信息熵之和,进而得到更大的信息增益,简单来说,就是分支越多,信息熵通常越小)
所以,引入了信息增益率来进一步优化。
G a i n r a t i o ( D , α ) = G a i n ( D , α ) I V ( a ) Gain_ratio(D,\alpha)=\frac{Gain(D,\alpha)}{IV(a)} Gainratio(D,α)=IV(a)Gain(D,α)
I V ( a ) IV(a) IV(a)为属性a的固有值(intrinsic value),属性a的可能取值数目越多,IV(a)的取值通常越大(类比信息熵,这里相当于V越大,属性a所含的信息量通常越大)
但是,信息增益率对可取值数目少的属性有所偏好,因此C4.5算法并不是选择增益率最大的候选划分属性,而是使用了一个启发式,先从候选划分属性中找出信息增益高于平均水平的属性,然后再从中选择增益率最高的
CART决策树(Classification and Regression Tree),既可以用于分类问题,也可以用于回归问题。
前置概念:
基尼值:
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(D)=\sum^{|y|}_{k=1} \sum_{k^{'} \neq k}p_kp_{k^{'}}\\~~~~~~~~~~~~~~~~=1-\sum_{k=1}^{|y|}p_{k^2} Gini(D)=∑k=1∣y∣∑k′=kpkpk′ =1−∑k=1∣y∣pk2
基尼系数:
G i n i i n d e x ( D , α ) = ∑ v = 1 ∣ D v ∣ G i n i ( D v ) Gini_index(D,\alpha)=\sum_{v=1}^{|D^v|}Gini(D^v) Giniindex(D,α)=∑v=1∣Dv∣Gini(Dv)
基尼值表示从数据集D中随机抽取两个样本,他们的类别不一致的概率,因此Gini(D)越小,D的纯度越高。
基尼指数则是表示对于一个划分属性来说,他所划分的各个分支的纯度表现,基尼指数越小,纯度表现越好。
我们会选择基尼指数最小的属性作为最优划分属性,因为它所划分的各结点纯度表现最好
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。
在决策树学习过程中,为尽可能正确分类训练样本,节点划分过程不断重复,有时会造成决策树分支过多,导致将一些训练集自身的特点当作普遍特点造成过拟合。因此,可以通过主动剪去一些分支,来减少过拟合的风险。
在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力(对于样本类别判断是否正确的能力)的提升,则停止划分并将当前结点标记为叶结点。
Note:在判断叶结点类别时是在训练集上进行判断的,但是在泛化性能是在验证集上计算的,实际计算中,容易搞混
仅有一层划分的决策树为决策树桩(Decision Stump)
由于分支不能增加泛化性能,但分支再分支却可能增加泛化性能,所以预剪枝可能会造成欠拟合
先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点可以增加泛化性能,那么则替换。
后剪枝决策树通常比预剪枝决策树保留了更多的分支,后剪枝比预剪枝的欠拟合可能性要小,泛化性能更优,但是训练时间开销要更大
我们目前仅讨论了基于离散值属性来生成决策树,但是连续属性我们不能在实际操作中避免,所以我们要在面对连续属性时进行处理。
C4.5决策树便采用了这一方法
对于一个属性a,在样本集D上出现了 { a 1 , a 2 … … a n } \{a^1,a^2……a^n\} {a1,a2……an}共n个取值,我们选定一个划分点t,将D划分为 D t − 和 D t + D_t^-和D_t^+ Dt−和Dt+两个集合。
我们首先根据连续属性在样本中出现的值确定划分点的候选集合:
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ i + 1 } T_a=\{\frac{a^i+a^{i+1}}{2}|1\leq i \leq i+1\} Ta={2ai+ai+1∣1≤i≤i+1}
之后通过信息增益从候选集合中选出最优的划分点
G a i n ( D , α ) = max t ∈ T a E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,\alpha)=\displaystyle \max_{t \in T_a} Ent(D)-\sum_{\lambda \in \{-,+\}} \frac{|D_t^{\lambda|}}{|D|}Ent(D_t^\lambda) Gain(D,α)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)
需注意的是,与离散属性不同,若当前结点划分为连续属性,该属性还可以作为后续结点的划分属性
现实任务中常会遇到不完整的样本,即某些样本的某些属性缺失。尤其是在属性数目较多的情况下,往往会有大量样本出现缺失值,若简单地放弃不完整样本,仅使用无缺失值的样本进行学习,显然是对数据信息的浪费。所以,有必要考虑利用缺失属性值的训练样例来进行学习。
在利用缺失属性值的训练样例时,我们需要考虑两个问题:
(1)如何在属性值缺失的情况下进行划分属性选择?
(2)给定划分属性,若样本在该属性值上缺失,如何对样本进行划分?
我们仅根据 D ~ \displaystyle \widetilde{D} D :在属性a上无缺失值的样本的集合来判断属性a的优劣。
我们将信息增益进行推广:
G a i n ( D , α ) = ρ × G a i n ( D ~ , α ) = ρ × ( E n t ( D ~ ) − ∑ v = 1 V r v ~ E n t ( D v ~ ) ) Gain(D,\alpha)=\rho \times Gain(\widetilde{D},\alpha)\\~~~~~~~~~~~~~~~~~~~~~ =\rho \times (Ent(\widetilde{D})-\displaystyle \sum_{v=1}^V\widetilde{r_v}Ent(\widetilde{D^v})) Gain(D,α)=ρ×Gain(D ,α) =ρ×(Ent(D )−v=1∑Vrv Ent(Dv ))
利用它来进行最优属性选择。
值得一提的是, ρ 、 p k ~ 、 r v ~ \rho 、\widetilde{p_k}、\widetilde{r_v} ρ、pk 、rv 在这里都涉及到单个样本的权重,权重并不总为1
若样本在划分属性a上的取值确定,则直接划入对应的结点,若样本在属性a上的取值缺失,那么将该样本划入该属性所有的分支结点,但是分别以不同的权值 r v ~ ⋅ w x \widetilde{r_v} \cdot w_x rv ⋅wx划入
将每个属性视作坐标空间中的一个轴,则d个属性描述的样本对应的就是d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找样本之间的分类边界。
单变量决策树形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界是由若干个与坐标轴平行的分段组成。
这一点其实很好理解,因为一个属性为一个轴,那么每次产生分支时其实就是在一个轴上画出一条垂直与该轴的竖线来进行分割,这条竖线平行于另外的坐标轴
但有时学习任务的真实分类边界比较复杂,需要用很多段划分才能获得较好的近似,此时需要进行大量的属性测试,预测开销会很大。
如果可以使用斜的边界来进行划分,则开销会大大减小。这样的决策树是“斜决策树”或者说“多变量决策树”。
对这样的决策树而言,我们寻找的不再是一个最优划分属性,而是一个一个属性的线性组合,一个线性分类器。
决策树算法最著名的代表为ID3、C4.5、CART
C4.5Rule是一个将决策树转化为符号规则的算法,最终泛化性能可能还要优于原决策树。
有研究显示,信息增益与基尼指数仅在2%的情况下有显著不同。
多变量决策树有OC1等。
一些决策树可以进行增量学习,在接收到新样本后,对已学得的模型进行调整,不用完全重新学习,可以降低每次接收到新样本后的训练时间开销,但多步增量学习后得到的模型与原模型可能会有较大差别。