《机器学习》第三章 决策树学习 笔记加总结
《机器学习》第三章 决策树学习
决策树学习方法搜索一个完整表示的假设空间,从而避免了受限假设空间的不足。决策树学习的归纳偏置是优越选择较小的树。
3.1.简介
决策树学习是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树。
决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。
决策数有两大优点:
1)决策树模型可以读性好,具有描述性,有助于人工分析;
2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
3.2.决策树表示法
决策树通过把实例从根节点排列到某个叶子结点来分类实例,叶子结点即为实例所属的分类。树上的每一个结点指定了对实例的某个属性的测试,并且该结点的每一个后继分支对应于该属性的一个可能值。分类实例的方法是从这棵树的根节点开始,测试这个结点的属性,然后按照给定实例的属性值对应的树枝向下移动。然后这个过程在以新结点的根的子树上重复。
决策树对应表达式:
(Outlook=Sunny∧Humidity=Normal∨(Outlook=Overcast))∨(Outlook=Rain∧Wind=Weak)
3.3.决策树学习的适用问题
通常决策树学习最适合具有以下特征的问题:
1)实例是由“属性-值”对表示
2)目标函数具有离散的输出值
3)可能需要析取得描述
4)训练数据可以包含错误
5)训练数据可以包含缺少属性值的实例
【核心任务都是要把样例分类到各可能的离散值对应的类别中,常称为分类问题】
3.4.基本的决策树学习算法
基本步骤
决策树构建的基本步骤如下:
1. 开始,所有记录看作一个节点
2. 遍历每个变量的每一种分割方式,找到最好的分割点
3. 分割成两个节点N1和N2
4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止
决策树的变量可以有两种:
1) 数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
2) 名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”。使用“=”来分割。
如何评估分割点的好坏?如果一个分割点可以将当前的所有节点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点。比如上面的例子,“拥有房产”,可以将记录分成了两类,“是”的节点全部都可以偿还债务,非常“纯”;“否”的节点,可以偿还贷款和无法偿还贷款的人都有,不是很“纯”,但是两个节点加起来的纯度之和与原始节点的纯度之差最大,所以按照这种方法分割。构建决策树采用贪心算法,只考虑当前纯度差最大的情况作为分割点。
通过自顶向下构造决策树来进行学习。构造过程是从“哪一个属性将在树的根结点被测试?”这个问题开始的。为了回答这个问题,使用统计测试来确定每一个实例属性单独分类训练样例的能力。分类能力最好的属性被选作树的根结点的测试。然后为根节点属性的每个可能值产生一个分支,并把训练样例排列到适当的分支之下。然后重复整个过程,用每个分支结点关联的训练样例来选取在该点被测试的最佳属性。这形成了对合格决策树的贪婪搜索(greedy search),也就是算法从不回溯重新考虑原来的选。
D3(Examples,Target_attribute,Attributes)
Examples即训练样例集。Target_attribute是这棵树要测试的目标属性。Attributes是除目标属性外供学习到的决策树测试的属性列表。返回一棵能正确分类给定Examples的决策树。
.如果Examples都为正,那么返回label=+的单结点树Root
.如果Examples都为反,那么返回label=+的单结点树Root
.如果Attributes为空,那么返回单结点树Root,label=Examples中最普遍的Target_attribute的值
.否则开始
.A←Attributes中分类Examples能力最好的属性
.Root的决策属性←A
.对于A的每个可能值vi
.在Root下加一个新的分支对应测试A=vi
.令Examples vi为Examples中满足A属性值为vi的子集
.如果Examples vi为空
.在这个新分支下加一个叶子结点,结点的label=Examples中最普遍的Target_attribute值
.否则在这个新分支下加一个子树ID3(Examples vi,Target_attribute,Attributes-{A})
.结束
.返回Root
3.4.1.哪个属性是最佳的分类属性
熵(entropy):刻画了任意样例集的纯度(purity)。
如果目标属性具有c个不同的值,那么S相对c个状态(c-wise)的分类的熵定义为:
Entropy(S)≡∑(i=1,c)-pilog2pi
Pi是S中属于类别i的比例。
信息增益(information gain):一个属性的信息增益就是由于使用这个属性分割样例而导致的期望熵降低。
Entropy(S,A)≡Entropy(S)-∑(v∈Values(A))(|Sv|/|S|)Entropy(Sv)
Values(A)是属性A所有可能值的集合,Sv 是S中属性A的值为v的子集。
例如,假定S包含14个样例-[9+,5-]。在这14个样例中,假定正例中的6个和反例中的2个有Wind=Weak,其他的有Wind=Strong。由于按照属性Wind分类14个样例得到的信息增益可以计算如下。
Values(Wind)=Weak,Strong
S=[9+,5-]
SWeak←[6+,2-]
Sstrong←[3+,3-]
=Entropy(S)-(8/14)Entropy(SWeak)-(6/14)Entropy(Sstrong)
=0.940-(8/14)0.811-(6/14)1.00
=0.048
3.5.决策树学习中的假设空间搜索
ID3算法中的假设空间包含所有的决策树,它是关于现有属性的有限离散值函数的一个完整空间。
【因为每个有限离散值函数可被表示为某个决策树,所以ID3算法避免了搜索不完整假设空间的一个主要风险:假设空间不包含目标函数】
当变了决策树空间时,ID3仅维护单一的当前假设。
基本的ID3算法在搜索中不进行回溯。
【它易受无回溯的爬山搜索中的常见风险影响:收敛到局部最优答案,而不是全局最优答案】
ID3算法在搜索的每一步都使用当前的所有训练样例,以统计为基础觉得怎样简化以前的假设。
【使用所有样例的统计属性的一个优点是大大降低了对个别训练样例错误的敏感性】
3.6.决策树学习的归纳偏置
ID3的搜索策略为:(a)优先选择较短的树而不是较长的;(b)选择那些信息增益高的属性离根结点较近的树。
近似的ID3算法归纳偏置:较短的树比较长的树优先。
ID3归纳偏置的更贴切近似:较短的树比较长的树优先。那些信息增益高的属性更靠近根结点的树优先。
3.6.1.限定偏置和优越偏置
ID3与候选消除算法对假设空间搜索的差异:
1)ID3的搜索范围是一个完整的假设空间
2)变型空间候选消除算法的搜索范围是不完整的假设空间,但它彻底地搜索这个空间,查找所有与训练数据一致的假设。
【简单地讲,ID3的归纳偏置来自它的搜索策略,而候选消除算法的归纳偏置来自它对搜索空间的定义】
优先偏置:ID3的归纳偏置是对某种假设胜过其他假设的一种优选,它对最终可列举的假设没有硬性限制。这种类型的偏置通常被称为优先偏置(搜索偏置)。
限定偏置:候选消除算法的偏置是对待考虑假设的一种限定。这种形式的偏置通常被称为限定偏置(语言偏置)。
如果需要某种形式的归纳偏置来从训练数据中泛化,那么我们该优先考虑哪种形式的归纳偏置:优先偏置还是限定偏置?
优选偏置比限定偏置更符合需要,因为它允许学习器工作在完整的假设空间上,这保证了未知的目标函数被包含在内。相反,限定偏置严格地限制了假设集合的潜在空间,通常不是我们希望的,因为它同时引入了把未知的目标函数排除在外的可能性。
3.6.2.为什么短的假设优先
奥坎姆剃刀:优先选择拟合数据的最简单的假设。
奥坎姆剃刀困难一:困难在于可以定义很多小的假设集合--其中大多数相当晦涩难解。那么,我们根据什么相信有短描述的决策树组成的小假设集合就比其他众多可定义的小假设集合更适当呢?
奥坎姆剃刀困难二:假设的大小是由学习器内部使用的特定表示决定的。所以两个学习器使用不同的假设,两者又都用奥坎姆剃刀原则得到相互矛盾的结论!
3.7.决策树学习的常见问题
决策树学习的实际问题包括:确定决策树增长的深度;处理连续值的属性;选择一个适合的属性筛选度量标准;处理属性值不完整的训练数据;处理不同代价的属性;提高计算效率。
3.7.1.避免过度拟合数据
定义:给定一个假设空间H,一个假设h∈H,如果存在其他的假设h'∈H,使得在训练样例上h的错误率比h'小,但在整个实例分布上h’的错误率比h小,那么就说假设h过度拟合训练数据。
当数据中有噪声或训练样例的数量太少以至于不能产生目标函数的代表性的采样时,这个策略便会遇到困难。这个简单算法产生的树会过度拟合训练样例。但是运用到测试数据上却得到非常高的错误率。过渡拟合的原因有以下几点:
噪音数据:训练数据中存在噪音数据,决策树的某些节点有噪音数据作为分割标准,导致决策树无法代表真实数据。
缺少代表性数据:训练数据没有包含所有具有代表性的数据,导致某一类数据无法很好的匹配,这一点可以通过观察混淆矩阵(Confusion Matrix)分析得出。
多重比较(Mulitple Comparition):举个列子,股票分析师预测股票涨或跌。假设分析师都是靠随机猜测,也就是他们正确的概率是0.5。每一个人预测10次,那么预测正确的次数在8次或8次以上的概率只有5%左右,比较低。但是如果50个分析师,每个人预测10次,选择至少一个人得到8次或以上的人作为代表,那么概率概率十分大,随着分析师人数的增加,概率无限接近1。但是,选出来的分析师其实是打酱油的,他对未来的预测不能做任何保证。上面这个例子就是多重比较。这一情况和决策树选取分割点类似,需要在每个变量的每一个值中选取一个作为分割的代表,所以选出一个噪音分割标准的概率是很大的。
有几种途径可被用来避免决策树学习中过度拟合。他们可被分为两类:
1)及早停止树增长,在ID3算法完美分类训练数据之前就停止树增长;
2)后修剪法,即允许树过度拟合数据,然后对这个树进行后修建。
解决这个问题的方法包括:
使用与训练样例截然不同的一套分离的样例,来评估通过后修剪法从树上修剪结点的效用。
使用所有可用数据进行训练,但进行统计测试来估计扩展(或修剪)一个特定的结点是否有可能改善在在训练集合外的实例上的性能。
使用一个明确的标准来衡量训练样例和决策树的复杂度,当这个编码的长度最小时停止树增长。
上面第一种方法是最普通的,它常被称为训练和验证集法。这种方法中,可用的数据被分成两个样例集合:一个训练集合用来形成学习到的假设,一个分离的验证集合用来评估这个假设在后续数据上的精度,确切地说是用来评估修剪这个假设的影响。【动机:即使学习器可能会被训练集合中的随机错误和巧合规律性所误导,但验证集合不大可能表现出同样的随机波动。所以,验证集合可以用来对过度拟合训练集中的虚假特征提供防护检验。很重要一点是验证集合应该足够大,以便它本身可提供具有统计意义的实例样本。常见做法:1/3用作验证集合2/3作训练集合】
错误率降低修剪步骤组成:删除以此结点为根的子树;使它成为叶子结点;把和该结点关联的训练样例的最常见分类赋给它。仅当修剪后的树对于验证集合的性能不比原来的树差时才删除该结点。
如果有大量的数据可供使用,那么使用分离的数据集合来引导修剪时一个有效的方法。这个方法的主要缺点是当数据有限时。从中保留一部分用作验证集合进一步减少了训练可以使用的样例。
规则后修剪
规则后修剪包括下面的步骤:
1)从训练集合推导出决策树,增长决策树直到尽可能好地拟合训练数据,允许,过度拟合发生。
2)将决策树转化为等价的规则集合,方法是为从根结点到叶子结点的每一条路径创建一条规则。
3)通过删除任何能导致估计精度提高的前件来修剪每一条规则。
4)按照修剪过的估计精度对它们进行排序,并按这样顺序应用这些规则来分类后来的实例。
为什么修剪之前要把决策树转化成规则集呢?这样做主要有三个好处:
转化为规则集可以区分决策结点使用的不同上下文。
转化为规则集消除了根结点附近的属性测试和叶结点附近的属性测试的区别。
转化为规则以提高可读性。
3.7.3.属性选择的其他度量标准
太多的可能值必然把训练样例分割成非常小的空间。因此,相对训练样例,它会有非常高的信息增益,尽管对于未见实例它是一个非常差的目标函数预测器。避免这个不足的一种方法是用其他度量而不是信息增益来选择决策属性。一个可以选择的度量标准是增益比率。增益比率通过加入一个被称作分裂信息的项来惩罚类似Date的属性,分裂信息用来衡量属性分裂数据的广度和均匀性:
SplitInformation(S,A)≡-∑(i=1,c)(|Si|/|S|)log2(|Si|/|S|)
增益比率度量是用前面的增益度量和这里的分裂信息度量来共同定义的,即
GainRatio(S,A)≡(Gain(S,A))/(SplitInformation(S,A))
距离的度量:它不偏向有大量值的属性,并报告了其实验研究,说明了这种方法产生的决策树的预测精度与增益法和增益比率法得到的结果没有明显的差别。而且这种距离度量避免了增益比率度量的实际困难。
3.7.4.处理缺少属性值得训练样例
在某些情况下,可供使用的数据可能缺少某些属性值。在这种情况下,经常需要根据此属性值已知的其他实例来估计这个缺少的属性值。
处理缺少属性值的策略一:赋给它结点n的训练样例中该属性的最常见值。另一种策略是可以赋给它结点n的被分类为c(x)的训练样例中该属性的最常见值。然后使用这个估计值的训练样例就可以被现有的决策树学习算法使用了。
处理缺少属性值的策略二:为A的每个可能值赋予一个概率,而不是简单地将最常见的值赋给A(x)。根据结点n的样例上A的不同值的出现频率,这些概率可以被再次估计。
3.7.5处理不同代价的属性
度量代替信息增益属性选择度量,学到了更加有效的识别策略,同时没有损失分类的精度。
Gain^2(S,A)/Cost(A)