决策树学习

决策树学习是应用最广的归纳推理算法之一,它是一种逼近离散值函数的方法。在这种方法中学习到的函数被表示为一颗决策树,学习得到的决策树也能再被表示为多个if-then规则,以提高可读性。
决策树学习方法对噪声数据有很好的健壮性且能够学习析取表达式。
决策树学习算法有很多,比如ID3、C4.5、ASSISTANT等等。这些决策树学习方法搜索一个完整表示的假设空间,从而避免了受限假设空间的不足。决策树学习的归纳偏置是优先选择较小的树。

 

决策树表示法

决策树通过把实例从根节点排列(sort)到某个叶子节点来分类实例,叶子节点即为实例所属的分类。
树上的每一个节点说明了对实例的某个属性(attribute)的测试,并且该节点的每一个后继分枝对应于该属性的一个可能值。

分类实例的方法是
  从这颗树的根节点开始,测试这个节点指定的属性;
  然后按照给定实例的该属性值对应的树枝向下移动;
  然后这个过程再以新节点为根的子树上重复。

决策树示例:
例子:在一个水果的分类问题中,采用的特征向量为:{颜色,尺寸,形状,味道},其中:
            颜色属性的取值范围:红,绿,黄
            尺寸属性的取值范围:大,中,小
            味道属性的取值范围:甜,酸
            形状属性的取值范围:圆,细
样本集:一批水果,知道其特征向量及类别
问   题:一个新的水果,观测到了其特征向量,应该将其分类哪一类?

通常决策树代表实例属性值约束的合取(conjunction)的析取式(disjunction)。从树根到树叶的每一条路径对应一组属性测试的合取树本身对应这些合取的析取
上述例子可对应如下析取式:
               (颜色=绿∧尺寸=大)
            ∨(颜色=绿∧尺寸=中)
            ∨(颜色=绿∧尺寸=小)
            ∨(颜色=黄∧形状=圆∧尺寸=大)
            ∨(颜色=黄∧形状=圆∧尺寸=小)
            ∨(颜色=黄∧形状=细)
            ∨(颜色=红∧尺寸=中)
            ∨(颜色=红∧尺寸=小∧味道=甜)
            ∨(颜色=红∧尺寸=小∧味道=酸)

决策树的适用问题

决策树学习适合解决具有以下特征的问题
1.实例是由“属性-值”对表示的:实例是用一系列固定的属性和它们的值来描述的。
2.目标函数具有离散的输出值:决策树给每个实例赋予一个布尔型的分类。决策树方法很容易扩展到学习有两个以上输出值的函数。
3.可能需要析取的描述:决策树很自然地代表了析取表达式。
3.训练数据可以包含错误:决策树学习对错误有很好的健壮性,无论是训练样例所属的分类错误,还是描述这些样例的属性值错误。
4.训练数据可以包含缺少属性值的实例:决策树甚至可以再有未知属性值的训练样例中使用。

ID3算法

大多数已开发的决策树学习算法是一种核心算法(CLS算法)的变体。该算法采用自顶向下的贪恋搜索遍历可能的决策树空间。这种方法是ID3算法(Quinlan 1986)和后继的C4.5(Quinlan 1993)的基础。

ID3是一种自顶向下增长树的贪婪算法
  在每个节点选取能最好分类样例的属性;
  继续这个过程指导这棵树能完美分类训练样例;
  或所有的属性都已被使用过。
构造过程是从“哪一个属性将在树的根节点被测试”这个问题开始。
  分类能力最好的属性被选作树的根节点的测试。
  然后为根节点属性的每个可能值产生一个分枝,并把训练样例排列到适当的分枝(也就是,样例的该属性值对应的分枝)之下。
  算法从不回溯重新考虑以前的选择。

ID3算法的核心问题:

选取每个结点上要测试的属性。 如何衡量一个属性价值的高低呢? 这个问题没有统一答案。 ID3算法选择信息增益(Information Gain)最大的属性作为决策树结点。

熵(ENTROPY)

对于数据集合D,若任意一个数据d(d∈D)有c个不同取值选项。 那么数据集D对于这c个状态的熵为

其中Pi是数据集D中取值为i(或者说属于类别i)的数据的比例(或者概率)。 如果数据有c种可能值,那么熵的最大可能值为log2c。 定义0log0=0。

信息增益

属性A对于数据集D的信息增益Gain(D,A)
  由于使用该属性分割数据集D,而导致数据集D期望熵减少的程度。

Values(A)是属性A所有可能值的集合。 Dv是D中属性A的值为v的子集,即Dv={d|d∈D,A(d)=v}。 Entropy(D)是D未用属性A分割之前的熵。 Entropy(Dv)是D用属性A分割之后的熵。 属性A的每一个可能取值都有一个熵,该熵的权重是取该属性值的数据在数据集D中所占的比例。

决策树节点划分

任意一个结点n,可以出现以下三种情况
1.结点n中的样本属于同一类,即结点n绝对纯净。此时结点n不可进一步划分。
2.结点n中的样本不属于同一类,但是不存在任何一个划分可以使其子结点的平均熵低于结点n。此时结点n不可进一步划分。
3.可以用一个属性对结点n进行划分,从而使结点n的子结点具有更低的熵。此时结点n可以进一步划分。

确定叶节点

一个策略是: 对于每一个可以进一步划分的结点都进行划分,直到得到一个不可划分的子结点,并将该子结点定为叶结点。 这种策略完美分类训练数据, 但是当训练数据不能覆盖真实数据分布时,就会过度拟合。

实践中决策树学习不要追求训练样本的完美划分,不要绝对追求叶结点的纯净度。 只要适度保证叶结点的纯净度,适度保证对训练样本的正确分类能力就可以了。 当然叶结点纯净度也不能过低,过低则是欠学习。 我们应该在过度拟合与欠学习之间寻求合理的平衡。 即,在结点还可以进一步划分的时候,可根据预先设定的准则停止对其划分,并将其设置为叶结点

测试集方法:将数据样本集合分为训练集与测试集。 根据训练集构建决策树,每展开一层子结点,并将其设为叶结点,就得到一棵决策树,然后采用测试集对所得决策树的分类性能进行统计。 重复上述过程,可以得到决策树在测试集上的学习曲线。 根据学习曲线,选择在测试集上性能最佳的决策树为最终的决策树。

阈值方法 在决策树开始训练之前,先设定一个阈值作为终止学习的条件。 在学习过程中如果结点满足了终止条件就停止划分,作为叶结点。 终止条件 可以选择为信息增益小于某阈值, 或者结点中的数据占全体训练数据的比例小于某阈值等等。

叶节点的类别:对于叶结点n,如果在该结点对应的样本中,属于第i类的样本数量最多,则判该叶结点为第i类。

ID3算法伪代码

  • 第一步 创建根结点。
  • 第二步 根结点数据集为初始数据集。
  • 第三步 根结点属性集包括全体属性。
  • 第四步 当前结点指向根结点。
  • 第五步 在当前结点的属性集和数据集上,计算所有属性的信息增益。
  • 第六步 选择信息增益最大的属性A作为当前结点的决策属性。
  • 第七步 如果最大信息增益小于等于0,则当前结点是叶子结点,标定其类别,并标记该结点已处理。执行第十四步。否则执行第八步。
  • 第八步 对属性A的每一个可能值生成一个新结点。
  • 第九步 把当前结点作为新结点的父结点。
  • 第十步 从当前结点数据集中选取属性A等于某个值的数据,作为该值对应新结点的数据集。
  • 第十一步 从当前结点属性集中去除属性A,然后作为新结点的属性集。
  • 第十二步 如果新结点数据集或者属性集为空,则该新结点是叶子结点,标定其类别,并标记该结点已处理。
  • 第十三步 标记当前结点已处理。
  • 第十四步 令当前结点指向一个未处理结点。如果无未处理结点则算法结束。否则执行第五步。

ID3算法特点

ID3算法的假设空间就是所有可能决策树的集合,也是一个关于现有属性的有限离散值函数的完整空间。
ID3算法运用爬山法搜索假设空间, 并未彻底地搜索整个空间,而是当遇到第一个可接受的树时,就终止了。
ID3算法实际上用信息增益度量作启发式规则,指导爬山搜索。
ID3的搜索策略是:

  • 优先选择较短的树,而不是较长的;
  • 选择那些高信息增益高属性更靠近根结点的树。
  • 优先选择短的树,即复杂度小的决策树,更符合奥坎姆剃刀原则,也就是优先选择更简单的假设。

基本的ID3算法不回溯,对已经做过的选择不再重新考虑。

  • ID3算法收敛到局部最优解,而不是全局最优。
  • 可以对ID3算法得到的决策树进行修剪,增加某种形式的回溯,从而得到更优解。

ID3算法在搜索的每一步都使用当前的所有训练数据。
使用全体数据的统计属性(信息增益)可以大大降低个别错误训练数据对学习结果的影响。 所以ID3算法可以很容易地扩展到处理含有噪声的训练数据。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹏森

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值