文章目录
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 : 数据集中的 D D D 属性 , 其取值是连续的数值 ;
② 属性值排序 : 将 D D D 属性的 n n n 个不同的连续取值从小到大排序 { a 1 , a 2 , ⋯ , a n } \{ a_1 , a_2, \cdots , a_n \} {a1,a2,⋯,an} ;
③ 划分点 t t t : 划分点 t t t 是 D D D 属性的一个取值 , 将 D D D 属性的值分为 子集 D t − D_t^- Dt− 和 D t + D_t^+ Dt+ ;
④ D t − D_t^- Dt− 子集 : 该子集中的属性值 , 小于等于 t t t ;
⑤ D t + D_t^+ Dt+ 子集 : 该子集中的属性值 , 大于 t t t ;
3 . 最优划分点 :
① 候选划分点 : D D D 属性有 n n n 个取值 , 可以有 n − 1 n-1 n−1 个候选划分点 ;
② 某两个属性值之间的划分点确定 : { a 1 , a 2 , ⋯ , a n } \{ a_1 , a_2, \cdots , a_n \} {a1,a2,⋯,an} 取值集合中 , 将两个数值之间的中点 , 作为划分点 ;
③ 最优化分点确定 : 需要选择最优的划分点 , 以达到最终决策树分类的目的 ;
V . 根据 增益率 选择划分属性
1 . 信息增益弊端 : 如果数据集中 , 某个属性有很多值 , 其信息增益比较大 , 很容易将分支多的属性放在树根 ;
示例说明 : 如 人的性别 , 其取值只有 男 和 女 两种 , 其只有两项 , 人的年龄 有 130 种取值范围 , 其计算出来信息增益比较大 ;
2 . 增益率引入 : ID3 使用信息增益确定树根属性 , C4.5 使用增益率确定树根属性 ;
3 . 增益率 ( Gain Ratio ) 计算公式 :
① A A A 表示属性类型 ;
② D D D 表示样本的总个数 ;
③ v v v 表示当前的 A A A 属性不同取值个数 , 取值集合为 { a 1 , a 2 , ⋯ , a v } \{a_1, a_2 , \cdots , a_v\} {a1,a2,⋯,av}
④ D j D_j Dj 表示样本取值 a j a_j aj 的样本个数 ;
S p l i t I n f o A ( D ) = − ∑ j = 1 v D j D l o g 2 D j D SplitInfo_A(D) = - \sum_{j=1}^{v} \frac{D_j}{D} log_2 \frac{D_j}{D} SplitInfoA(D)=−j=1∑vDDjlog2DDj
增益率公式 :
G a i n R a t i o ( A ) = G a i n ( A ) / S p l i t I n f o ( A ) GainRatio ( A ) = Gain(A) / SplitInfo(A) GainRatio(A)=Gain(A)/SplitInfo(A)
VI . 根据 增益率 选择划分属性 计算案例
1 . 计算案例 :
参考之前的 信息增益计算案例 : 信息增益计算 案例
2 . 信息增益计算结果 : 依次计算 各个属性的 信息增益 :
① 年龄 属性的信息增益 : G a i n ( 年 龄 ) = 0.246 Gain ( 年龄 ) = 0.246 Gain(年龄)=0.246
② 收入 属性的信息增益 : G a i n ( 收 入 ) = 0.029 Gain ( 收入 ) = 0.029 Gain(收入)=0.029
③ 是否是学生 属性的信息增益 : G a i n ( 是 否 是 学 生 ) = 0.151 Gain ( 是否是学生 ) = 0.151 Gain(是否是学生)=0.151
④ 信用等级 属性的信息增益 : G a i n ( 信 用 等 级 ) = 0.048 Gain ( 信用等级 ) = 0.048 Gain(信用等级)=0.048
⑤ 树根 属性选择: 年龄属性的 信息增益 最大 , 选择年龄属性作为树根 ;
3 . 这里计算收入 属性的增益率 : 14 个样本中, 4 个高收入 , 6 个中等收入 , 4 个低收入 ;
S p l i t I n f o A ( D ) = − ∑ j = 1 v D j D l o g 2 D j D = = − 4 14 l o g 2 4 14 − 6 14 l o g 2 6 14 − 4 14 l o g 2 4 14 = 0.926 \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} SplitInfoA(D)===−∑j=1vDDjlog2DDj=−144log2144−146log2146−144log21440.926
G a i n R a t i o ( A ) = G a i n ( A ) / S p l i t I n f o ( A ) = 0.029 0.926 = 0.031 GainRatio ( A ) = Gain(A) / SplitInfo(A) = \frac{0.029}{0.926} = 0.031 GainRatio(A)=Gain(A)/SplitInfo(A)=0.9260.029=0.031
4 . 树根选择 : 同样增益率最大的属性 , 会被设置为 划分属性 ;
VII . 决策树 作用 及 优势
1 . 大数据分类 : 在大数据分类中 , 要求快速的对几百万的样本 , 涉及几十上百的属性进行分类 ;
2 . 决策树 算法优势 :
① 可伸缩性 : 随着数据量增大 , 复杂度线性增长 , 不是指数级增长 ;
② 学习速度快 : 学习速度比其它分类方法快 ;
③ 规则转化 : 可以抽取转化分类规则 ;
④ 数据库结合 : 可以使用 SQL 查询数据库中的数据 ;
⑤ 准确性高 : 使用决策树分类 , 准确性有保障 ;