zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【数据挖掘】决策树 分类 ( 抽取分类规则 | 过拟合 | 剪枝 | 先剪 | 后剪 | 连续数值离散化 | 最优化分点 | 增益率选择划分属性 )

属性规则 选择 分类 最优化 数值 连续 数据挖掘
2023-06-13 09:17:42 时间

文章目录

I . 决策树 分类规则抽取


1 . 决策树规则表示形式 : 决策树 中蕴含的 规则可以使用 IF-THEN 形式表示 ;

2 . 决策树规则数量 : 从决策树根节点 , 到叶子节点 , 每条路径都对应一条规则 , 规则数量就是叶子节点的数量 ;

3 . 中间内部节点表示 : 使用 AND 将多个属性判定组个在一起 , 相当于 逻辑与 运算 ;

4 . 叶子节点表示 : 叶子节点构成 THEN 部分 , 表达其分类结果 ;

5 . IF-THEN 示例 : 下图的决策树 , 有 5 个叶子节点 , 可以抽取出 5 条规则 , 下面列举这 5 条路径 :

① 下图中的红色路径 : 该条路径表示 , 如果年龄在 30 岁以下 , 是学生 , 就会购买商品 ;

IF age = "<=30" AND isStudent = "yes" THEN isBuy = "yes"

② 下图中的蓝色路径 : 该条路径表示 , 如果年龄在 30 岁以下 , 不是学生 , 就不会购买商品 ;

IF age = "<=30" AND isStudent = "no" THEN isBuy = "no"

③ 下图中的紫色路径 : 该条路径表示 , 31 ~ 39 岁的 , 会购买商品 ;

IF age = ">= 31 && <= 39>" isBuy = "yes"

④ 下图中的绿色路径 : 该条路径表示 , 在 40 岁以上 , 信用好的 , 会购买商品 ;

IF age = ">=40" AND credit= "good" THEN isBuy = "yes"

⑤ 下图中的黑色路径 : 该条路径表示 , 在 40 岁以上 , 信用一般的 , 不会购买商品 ;

IF age = ">=40" AND credit= "normal" THEN isBuy = "no"

II . 决策树 过拟合 与 剪枝


1 . 决策树过拟合问题 :

① 完全服从 : 生成的决策树 , 完全服从与训练集 ;

② 分支太多 : 这种过拟合的决策树 , 出现很多类型的分支 , 有些分支出现次数很少 , 甚至在实际使用中从来不用 , 分支不具有代表性 ;

③ 消极结果 : 过拟合会导致模型准确度很低 ;

2 . 解决过拟合问题 : 剪枝方法 ; 通过进行剪纸 , 将部分分支路径删除 ;

① 先剪 : 在建立 决策树 模型时 , 训练模型过程中 , 如果该数据样本分支很少 , 就不创建这个分支 ;

② 后剪 : 先将 完整的 决策树模型 创建出来 , 然后将样本少的路径直接剪除 ;

III . 决策树 剪枝 先剪 与 后剪 对比


1 . 时间消耗分析 :

① 先剪 : 训练模型时剪枝 , 训练时间会减少 , 相对于没有剪枝的情况 , 测试的时间也会的减少 ;

② 后剪 : 在模型创建后剪枝 , 要生成完整的树 , 训练时间会增加 , 训练完之后剪枝 , 相对于没有剪枝的情况 , 测试的时间会减少 ;

2 . 拟合风险 : 这里分为 过拟合 ( 拟合过度 ) 和 欠拟合 ( 拟合度不够 ) ;

① 先剪 : 不会过拟合 , 但是 有可能欠拟合 ;

② 后剪 : 不会过拟合 , 欠拟合风险不变 ;

3 . 最佳实践 : 推荐使用 后剪 剪枝策略 ;

IV . 连续属性 离散化处理 ( 二分法 | 最优划分点 )


1 . 连续值属性 :

① 连续属性离散化 : 决策树要基于一个离散的值进行分类 , 连续的值 , 无法根据属性值划分数据集 , 需要将连续属性值离散化 , 再使用决策树分析 ;

② 示例 : 如学生成绩 , 0 ~ 100 分 , 60 分以上划分为 及格 , 60 分以下划分为 不及格 ;

2 . 二分法处理连续属性值 :

① 连续属性

D

: 数据集中的

D

属性 , 其取值是连续的数值 ;

② 属性值排序 :

D

属性的

n

个不同的连续取值从小到大排序

\{ a_1 , a_2, \cdots , a_n \}

;

③ 划分点

t

: 划分点

t

D

属性的一个取值 , 将

D

属性的值分为 子集

D_t^-

D_t^+

;

D_t^-

子集 : 该子集中的属性值 , 小于等于

t

;

D_t^+

子集 : 该子集中的属性值 , 大于

t

;

3 . 最优划分点 :

① 候选划分点 :

D

属性有

n

个取值 , 可以有

n-1

个候选划分点 ;

② 某两个属性值之间的划分点确定 :

\{ a_1 , a_2, \cdots , a_n \}

取值集合中 , 将两个数值之间的中点 , 作为划分点 ;

③ 最优化分点确定 : 需要选择最优的划分点 , 以达到最终决策树分类的目的 ;

V . 根据 增益率 选择划分属性


1 . 信息增益弊端 : 如果数据集中 , 某个属性有很多值 , 其信息增益比较大 , 很容易将分支多的属性放在树根 ;

示例说明 : 如 人的性别 , 其取值只有 男 和 女 两种 , 其只有两项 , 人的年龄 有 130 种取值范围 , 其计算出来信息增益比较大 ;

2 . 增益率引入 : ID3 使用信息增益确定树根属性 , C4.5 使用增益率确定树根属性 ;

3 . 增益率 ( Gain Ratio ) 计算公式 :

A

表示属性类型 ;

D

表示样本的总个数 ;

v

表示当前的

A

属性不同取值个数 , 取值集合为

\{a_1, a_2 , \cdots , a_v\}

D_j

表示样本取值

a_j

的样本个数 ;

SplitInfo_A(D) = - \sum_{j=1}^{v} \frac{D_j}{D} log_2 \frac{D_j}{D}

增益率公式 :

GainRatio ( A ) = Gain(A) / SplitInfo(A)

VI . 根据 增益率 选择划分属性 计算案例


1 . 计算案例 :

参考之前的 信息增益计算案例 : 信息增益计算 案例

2 . 信息增益计算结果 : 依次计算 各个属性的 信息增益 :

① 年龄 属性的信息增益 :

Gain ( 年龄 ) = 0.246

② 收入 属性的信息增益 :

Gain ( 收入 ) = 0.029

③ 是否是学生 属性的信息增益 :

Gain ( 是否是学生 ) = 0.151

④ 信用等级 属性的信息增益 :

Gain ( 信用等级 ) = 0.048

⑤ 树根 属性选择: 年龄属性的 信息增益 最大 , 选择年龄属性作为树根 ;

3 . 这里计算收入 属性的增益率 : 14 个样本中, 4 个高收入 , 6 个中等收入 , 4 个低收入 ;

\begin{array}{lcl} SplitInfo_A(D) &=& - \sum_{j=1}^{v} \frac{D_j}{D} log_2 \frac{D_j}{D} \\\\ &=& = - \frac{4}{14} log_2 \frac{4}{14} - \frac{6}{14} log_2 \frac{6}{14} - \frac{4}{14} log_2 \frac{4}{14} \\\\ &=& 0.926 \end{array}
GainRatio ( A ) = Gain(A) / SplitInfo(A) = \frac{0.029}{0.926} = 0.031

4 . 树根选择 : 同样增益率最大的属性 , 会被设置为 划分属性 ;

VII . 决策树 作用 及 优势

1 . 大数据分类 : 在大数据分类中 , 要求快速的对几百万的样本 , 涉及几十上百的属性进行分类 ;

2 . 决策树 算法优势 :

① 可伸缩性 : 随着数据量增大 , 复杂度线性增长 , 不是指数级增长 ;

② 学习速度快 : 学习速度比其它分类方法快 ;

③ 规则转化 : 可以抽取转化分类规则 ;

④ 数据库结合 : 可以使用 SQL 查询数据库中的数据 ;

⑤ 准确性高 : 使用决策树分类 , 准确性有保障 ;