决策树原理与常用方式

    技术2024-10-17  6

            说到树,可能第一时间就会想到——回归,是的,决策树就是依靠一次次的回归从而是实现分类。另外决策树由如下优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。

    构建决策树的一般流程如下: (1) 收集数据:可以使用任何方法。 (2) 准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。 (3) 分析数据:可以使用任何方法,构造树完成之后,应该检查图形是否符合预期。 (4) 训练算法:构造树的数据结构。 (5) 测试算法:使用经验树计算错误率。 (6) 使用算法    

    1.准备数据

     

           在构造决策树时,我们需要解决的第一个问题就是,当前数据集上哪个特征在划分数据分类时起决定性作用。为了找到决定性的征,划分出最好的结果,就必须先评估每个特征。完成测试之后,原始数据集就被划分为几个数据子集。这些数据子集会分布在第一个决策点的所有分支,如果某个分支下的数据属于同一类型,则当前已经正确地划分数据分类, 无需进一步对数据集进行分割。如果数据子集内的数据不属于同一类型,则需要重复划分数据子集的过程。如何划分数据子集的算法和划分原始数据集的方法相同,直到所有具有相同类型的数据均在一个数据子集内。

    创建分支的伪代码函数如下所示:

    检测数据集中的每个子项是否属于同一分类: If so return 类标签 Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 for 每个划分的子集 调用函数createBranch并增加返回结果到分支节点中 return 分支节点

    另外划分数据的方法通常有:二分法、ID3算法、C4.5算法等,下面主要介绍ID3与C4.5算法。

    其中,ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上,越是小型的决策树越优于大的决策树,ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间。

    ID3实现步骤为

    初始化特征集合和数据集合;计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。

     

    当然了,ID3算法也有相应的缺点:

    ID3 没有剪枝策略,容易过拟合;信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;只能用于处理离散分布的特征;没有考虑缺失值。

     

    C4.5 相对于 ID3 的缺点对应有以下改进方式:

    引入悲观剪枝策略进行后剪枝;引入信息增益率作为划分标准;将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元 分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;对于缺失值的处理可以分为两个子问题:1. 在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)2. 选定该划分特征,对于缺失该 特征值的样本如何处理?(即到底把这个样本划分到哪个结点里) 针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算; 针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。

     

    剪枝策略: 过拟合的树在泛化能力的表现非常差,而剪枝策略则可以在一定程度上避免过拟合。

    预剪枝: 在节点划分前来确定是否继续增长,及早停止增长的主要方法有:

    预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于“贪心”策略,会带来欠拟合风险。

    节点内数据样本低于某一阈值;所有节点特征都已分裂;节点划分前准确率比划分后准确率高。

    后剪枝: 在已经生成的决策树上进行剪枝,从而得到简化版的剪枝决策树。

    C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其 错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。

    后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。

    C4.5的缺点:

    剪枝策略可以再优化;C4.5 用的是多叉树,用二叉树效率更高;C4.5 只能用于分类;C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

     

    Processed: 0.025, SQL: 9