zoukankan      html  css  js  c++  java
  • 决策树分类

    problem

    1. 用你自己熟悉的语言,编写程序(ID3算法,C4.5算法中的一种)对所给定的数据集进行分类挖掘,给出具体程序和挖掘结果,结果要求包含决策树的树形图以及分类规则。
    2. 利用自己的分类规则对未分类数据集进行分类,给出分类结果。
    3. 报告格式以信计专业的实验报告格式为准。
    • 训练数据
    x1 x2 x3 x4 x5 x6 x7 class
    0 0 1 27 0 1 0 2
    0 1 0 27 0 1 0 1
    0 1 0 27 1 0 0 2
    0 0 1 24 1 0 0 1
    1 0 0 30 1 0 0 1
    0 0 1 31 0 1 0 1
    1 0 1 37 1 0 0 2
    0 0 1 22 0 0 1 2
    0 0 1 25 0 1 1 1
    1 0 1 34 1 1 0 2
    0 1 0 33 1 1 0 2
    0 0 1 37 1 1 0 1
    0 1 0 30 0 1 1 2
    1 1 0 42 1 0 0 1
    0 0 0 43 1 0 0 1
    0 1 1 28 1 0 0 2
    0 1 1 29 0 1 1 1
    1 1 0 51 1 0 1 2
    0 1 1 22 0 1 0 2
    1 1 0 40 0 0 1 1
    0 0 1 28 1 0 1 1
    1 0 0 52 0 1 1 2
    0 1 0 38 1 0 1 1
    1 0 0 26 1 0 0 2
    0 0 1 33 1 0 1 1
    0 0 1 26 1 0 0 2
    0 1 0 23 1 0 1 1
    0 0 0 37 1 0 1 2
    0 0 1 50 0 1 0 1
    0 0 1 24 0 1 0 2
    • 带分类数据
    x1 x2 x3 x4 x5 x6 x7 class
    0 0 1 0 12 0 1
    0 0 0 1 10 0 1
    1 0 0 0 24 0 0
    1 0 0 0 27 1 0
    0 0 1 0 36 0 1
    0 1 0 1 12 0 1
    1 0 1 0 36 0 1
    1 0 0 1 24 0 0
    0 1 0 0 48 0 0
    1 0 0 1 6 1 0
    0 1 0 0 30 1 0
    0 0 1 0 18 0 1
    0 1 0 1 18 1 0
    0 0 1 0 24 1 0
    0 0 1 1 9 0 1
    0 1 0 1 18 0 1
    1 0 0 1 15 1 0
    0 1 0 1 24 1 0
    0 1 0 0 24 0 0
    0 1 0 1 36 0 0

    分析

    本文拟采用C4.5算法对上述的数据进行分类,开发环境:visual studio 2019,使用C/C++语言编写相关代码。

    知识点

    1. 信息增益比例

    一个属性的增益比例1公式:

    [GainRatio(A)=frac{Gain(A)}{SplitI(A)} ag{1} ]

    [SplitI(A)=-sum_{j=1}^{v} p_j log _2{p_j} ag{2} ]

    上述式子的内容部分继承自ID3算法,接下来简单地介绍一下相关的知识。

    • 信息增益
      假设给定的数据样本集为: (X={ (x_i,y_i)|i=1,2, cdots ,total }),其中样本(x_i(i=1,2,cdots,total))用d维特征向量(x_i=(x_{i1},x_{i2},cdots,x_{id})) 来表示, (x_{i1},x_{i2},cdots,x_{id})分别对应d个描述属性(A_1,A_2,cdots,A_d)的具体取值; (y_i(i=1,2,cdots,total))表示数据样本(x_i)的类标号,假设给定数据集包含m个类别,则(y_i in {c_1,c_2,cdots,c_m }),其中(c_21,c_2,cdots,c_m)是类别属性C的。
    1. 假设(n_j)是数据集X中属于类别(c_j)的样本数量,则各类别的先验概率为(P(c_j)=frac{n_j}{total},j=1,2,cdots,m)。对于给定数据集X,计算期望信息:

    [I(n_1,n_2,cdots ,n_m)=-sum_{j=1}^{m}P(c_j)log _2{P(c_j)} ag{3} ]

    1. 计算描述属性Af划分数据集X所得的熵
      • 假设描述属性(A_f)有q个不同取值,将X划分为q个子集({X_1,X_2,cdots,X_s,cdots,X_q}) ,其中(X_s(s=1,2,cdots,s))中的样本在(A_f)上具有相同的取值。
      • 假设(n_s)表示(X_s)中的样本数量,(n_{js}) 表示(X_s)中属于类别(c_j)的样本数量。则由描述属性(A_f)划分数据集X所得的熵为:

    [E(A_f)=sum_{s=1}^{q}frac{n_{1s}+cdots+n_{ms}}{total} I(n_{1s},cdots,n_{ms}) ag{4} ]

    其中:

    [I(n_{1s},cdots,n_{ms})=-sum_{j=1}^{m}p_{js}log_2{(p_{js})} ag{5} ]

    式中的 (p_js=frac{n_{js}}{n_s})(p_{js}) 表示在子集(X_s)中类别为(c_j)的数据样本所占的比例。熵值越小,表示属性对数据集划分的纯度越高。计算Af划分数据集时的信息增益:

    [Gain(A_f)=I(n_1,n_2,cdots,n_m)-E(A_f) ag{5} ]

    2. 合并具有连续值的属性

    对于连续属性值,C4.5其处理过程如下:

    • 根据属性的值,对数据集排序;
    • 用不同的阈值对数据集动态地进行划分;
    • 当输出改变时确定一个阈值;
    • 取两个实际值中的中点作为一个阈值;
    • 取两个划分,所有样本都在这两个划分中;
    • 得到所有可能的阈值、增益及增益比;
    • 在每一个属性会变为两个取值,即小于阈值或大于等于阈值。
      简单地说,针对属性有连续数值的情况,则在训练集中可以按升序方式排列。如果属性A共有n种取值,则对每个取值(v_j(j=1,2,cdots,n)),将所有的记录进行划分:一部分小于(v_j);另一部分则大于或等于(v_j) 。针对每个(v_j)计算划分对应的增益比率,选择增益最大的划分来对属性A进行离散化 。

    3. 处理含有未知属性值的训练样本

    C4.5处理的样本中可以含有未知属性值,其处理方法是常用的值替代或者是将最常用的值分在同一个类中。具体采用概率的方法,依据属性已知的值,对属性和每一个值赋予一个概率,取得这些概率依赖于该属性已知的值。

    4. 规则的产生

    一旦树被建立,就可以把树转换成if-then规则。规则存储在一个二维数组中,每一行代表树的一个规则,即从根到叶之间的一个路径。表中的每列存放树中的结点。

    • 算法示例
      示例
    1. 首先对Humidity进行属性离散化,针对上面的训练集合,通过检测每个划分而确定最好的划分在75处,则这个属性的范围就变为({(<=75 ,>75)})
    2. 计算目标属性PlayTennis分类的期望信息:(I(s_1,s_2)=I(9,5)=-frac{9}{14}log_2{frac{9}{14}}-frac{5}{12}log_2{frac{5}{14}}=0.940)
    3. 计算每个属性的 GainRatio: $$ GainRatio(Outlook)=frac{0.2467}{1.577}=0.156 $$ $$ GainRatio(windy)=0.049 $$ $$ GainRatio(Temperature)=0.0248 $$ $$ GainRatio(Humidity)=0.0483 $$
    4. 选取最大的GainRatio,根据Outlook的取值,将三分枝。
    5. 再扩展各分枝节点,得到决策树。

    5. 算法描述

    5.1 ID3算法

    1.概念提取算法CLS 
        1) 初始化参数C={E},E包括所有的例子,为根.
        2) IF    C中的任一元素e同属于同一个决策类
                则创建一个叶子 
                节点YES终止. 
           ELSE    依启发式标准,选择特
                Fi={V1,V2,V3,...Vn}并创建
                判定节点 
       划分C为互不相交的N个集合C1,C2,C3,...,Cn;
       3) 对任一个Ci递归. 
    
    1) 随机选择C的一个子集W   (窗口). 
    2) 调用CLS生成W的分类树DT(强调的启发式标准在后). 
    3) 顺序扫描C搜集DT的意外(即由DT无法确定的例子). 
    4) 组合W与已发现的意外,形成新的W. 
    5) 重复2)到4),直到无例外为止.
    
    • 启发式标准
      只跟本身与其子树有关,采取信息理论用熵来量度. 熵是选择事件时选择自由度的量度,其计算方法为
      P=freq(Cj,S)/|S|;
      INFO(S)=-SUM( PLOG(P) ) ;
      SUM()函数是求j从1到n和.
      Gain(X)=Info(X)-Infox(X);
      Infox(X)=SUM( (|Ti|/|T|)
      Info(X);
      为保证生成的决策树最小,ID3算法在生成子树时,选取使生成的子树的熵(即Gain(S))最小的的特征来生成子树.

    • ID3算法对数据的要求

    1. 所有属性必须为离散量.
    2. 所有的训练例的所有属性必须有一个明确的值.
    3. 相同的因素必须得到相同的结论且训练例必须唯一.
    • ID3算法性能分析
      • ID3算法的假设空间包含所有的决策树,它是关于现有属性的有限离散值函数的一个完整空间。所以ID3算法避免了搜索不完整假设空间的一个主要风险:假设空间可能不包含目标函数。
      • ID3算法在搜索的每一步都使用当前的所有训练样例,大大降低了对个别训练样例错误的敏感性。因此,通过修改终止准则,可以容易地扩展到处理含有噪声的训练数据。
      • ID3算法在搜索过程中不进行回溯。所以,它易受无回溯的爬山搜索中的常见风险影响:收敛到局部最优而不是全局最优。
      • ID3算法只能处理离散值的属性。
      • 信息增益度量存在一个内在偏置,它偏袒具有较多值的属性。例如,如果有一个属性为日期,那么将有大量取值,这个属性可能会有非常高的信息增益。假如它被选作树的根结点的决策属性则可能形成一颗非常宽的树,这棵树可以理想地分类训练数据,但是对于测试数据的分类性能可能会相当差。
      • ID3算法增长树的每一个分支的深度,直到恰好能对训练样例完美地分类。当数据中有噪声或训练样例的数量太少时,产生的树会过渡拟合训练样例。

    5.2 C4.5算法

    • C4.5算法是从ID3算法演变而来,除了拥有ID3算法的功能外,C4.5算法引入了新的方法和增加了新的功能:
      • 用信息增益比例的概念;
      • 合并具有连续属性的值;
      • 可以处理具有缺少属性值的训练样本;
      • 通过使用不同的修剪技术以避免树的过度拟合;
      • K交叉验证;
      • 规则的产生方式等。

    参考

    [1] 毛国君,段立娟.数据挖掘原理与算法--3版[M].北京:清华大学出版社,2016(2020.1重印).
    [2] [Wikipedia](https://en.wikipedia.org/wiki/Main_Page)
  • 相关阅读:
    HashMap看这篇就够了
    01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
    01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】
    01 语言基础+高级:1-6 集合_day02【Collection、泛型】
    数据库相关的收藏文章
    SSM到Spring Boot-校园商铺平台
    01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
    在Mac OS X系统中的十大简单实用使用技巧
    轻松测试你的词汇量
    程序员,你应该懂de
  • 原文地址:https://www.cnblogs.com/jianle23/p/14116017.html
Copyright © 2011-2022 走看看