IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 决策树(Decision Tree) -> 正文阅读

[数据结构与算法]决策树(Decision Tree)

定义

决策树是一种基于规则的方法,它用一组嵌套的规则进行预测。在树的每个决策节点处,根据判断结果进入一个分支,反复执行这种操作直到到达叶子节点,得到预测结果。这些规则是通过训练得到的,而不是认为设定的。
规则是每一次分裂时的特征及其阀值。

基本原理

先列举决策树算法最有名的几个版本,版本之间最明显的差异就是用于分裂节点的特征的选择标准不同,另外在应用场景(自变量离散或连续、因变量离散或连续)、剪枝、缺失值处理等操作上也有区别。

  • 函数假设:分段函数(分类树的映射是多为空间的分段线性划分,即用平行于各坐标轴的超平面对空间进行切分;回归树的映射函数是分段函数。决策树是分段线性函数而不是线性函数,它具有非线性建模能力。)

  • 损失函数:
    在这里插入图片描述

  • 学习方法:贪心算法

ID3

Step 1.计算在当前节点上的数据集的信息熵和未用于过节点分裂的特征的条件熵,选择信息增益最大的特征进行节点分裂,选择的特征有多少个取值则分裂为多少个叶子节点;
Step 2.继续下一个节点分裂,并进行Step 1,直至节点只包含单一特征或单一样本则停止分裂;

  • 应用场景:自变量离散(多叉树),因变量离散(分类)
  • 分裂节点的特征选择标准:信息增益
    信息增益:
    G a i n ( D , A ) = H ( D ) ? H ( D ∣ A ) Gain(D,A)=H(D)-H(D|A) Gain(D,A)=H(D)?H(DA)
    其中 H ( D ) H(D) H(D)为数据集 D D D的信息熵, H ( D ∣ A ) H(D|A) H(DA)为数据集 D D D基于特征 A A A的条件熵,即数据集 D D D在用特征A进行数据划分前提下的信息熵。
    信息熵是度量数据集信息量大小的指标,信息量越大,代表数据集不纯度越高:
    H ( D ) = ? ∑ k = 1 K p k l o g 2 p k H(D)=-\sum_{k=1}^{K}p_klog_{2}p_k H(D)=?k=1K?pk?log2?pk? p k = ∣ C k ∣ ∣ D ∣ p_k=\frac{|C_k|}{|D|} pk?=DCk??
    其中 K K K为数据集 D D D的类别数, C k C_k Ck?为数据集D属于类别 k k k的样本集合, ∣ . ∣ |.| .表示数据集样本数。
    条件熵是度量数据集在某种划分下的信息量大小,这里是按特征A的特征值划分:
    H ( D ∣ A ) = ? ∑ m = 1 M p m H ( D m ) = ? ∑ m = 1 M p m ( ? ∑ k m = 1 K p k m l o g 2 p k m ) H(D|A)=-\sum_{m=1}^{M}p_mH(D_m)=-\sum_{m=1}^{M}p_m(-\sum_{k_m=1}^{K}p_{k_m}log_{2}p_{k_m}) H(DA)=?m=1M?pm?H(Dm?)=?m=1M?pm?(?km?=1K?pkm??log2?pkm??) p m = ∣ C m ∣ ∣ D ∣ p_m=\frac{|C_m|}{|D|} pm?=DCm?? p k m = ∣ C k m ∣ ∣ D ∣ p_{k_m}=\frac{|C_{k_m}|}{|D|} pkm??=DCkm???
    其中 M M M为特征 A A A的特征值取值数量即用特征 A A A划分的类别数, C m C_{m} Cm?为数据集 D D D特征 A A A取值为 A A A的第 m m m个取值的样本集合, C k m C_{k_m} Ckm??为数据集 D D D属于类别 k k k且特征 A A A取值为 m m m的样本集合, ∣ . ∣ |.| .表示数据集样本数。
    故信息增益体现的是数据集D用特征A划分前后的信息量变化值,信息增益越大,说明利用特征 A A A划分节点使数据集的不纯度降低的越多。
    信息增益的缺点是当特征 A A A取值数量较多时会偏大:数据划分越细不纯度降低越快。
  • 剪枝策略:无
  • 缺失值处理:无

C4.5

  • 应用场景:自变量离散或连续(多叉树),因变量离散(分类)
    若特征 A A A为连续性取值,共m个取值,则从小到大排序,相邻两数取中间值作为节点划分候选值,再遍历每个值作为划分值时的信息增益、取信息增益最大的进行划分(此处有细节考虑)。
  • 分裂节点的特征选择标准:信息增益率
    信息增益率:
    G a i n r a t i o ( D , A ) = G a i n ( D , A ) H A ( D ) , H A ( D ) = ∑ m = 1 M p m l o g 2 p m Gain_{ratio}(D,A)=\frac{Gain(D,A)}{H_A(D)},H_A(D)=\sum_{m=1}^{M}p_mlog_2p_m Gainratio?(D,A)=HA?(D)Gain(D,A)?,HA?(D)=m=1M?pm?log2?pm? p m p_m pm?同上
    这样信息增益率就避免了信息增益对取值种类多的特征有利的缺点,但又会偏好取值种类少的特征。因此会采用先用启发式算法:先找信息增益高于平均水平的特征,再选择信息增益率最大的那个特征。
  • 剪枝策略:后剪枝策略
    待决策树构建完成后,利用递归自底向上针对非叶子节点进行剪枝,若剪枝后错误率更小则进行剪枝。
    ps:没采用的另一种剪枝策略是预剪枝,即贪心方法,在节点划分前来确定是否继续增长,比如节点样本数量低于阈值、划分后准缺率下降。
    两者相比,预剪枝降低过拟合风险、训练时间段但欠拟合风险又变大,后剪枝欠拟合风险小、泛化性通常比预剪枝好但训练时间长。
  • 缺失值处理:特征值缺失样本不参与分裂特征选择,但利用不缺失样本计算信息增益率后会乘上非缺失样本占比;若仍选择该含缺失特征分裂,则分裂后缺失样本以每个节点上非缺失样本占总非缺失样本比例作为概率分配。

CART

  • 多叉树改为二叉树,提高构建效率

  • 应用场景:自变量离散或连续(二叉树),因变量离散或连续(分类)

    • 自变量连续同C4.5
    • 因变量连续时使用的分裂标准改为平方误差
  • 分裂节点的特征选择标准:

    • 基尼指数:
      G i n i ( D ) = ∑ k = 1 K p k ( 1 ? p k ) Gini(D)=\sum_{k=1}^{K}p_k(1-p_k) Gini(D)=k=1K?pk?(1?pk?) p k = ∣ C k ∣ ∣ D ∣ p_k=\frac{|C_k|}{|D|} pk?=DCk??
      其中 K K K为数据集 D D D的类别数, C k C_k Ck?为数据集D属于类别 k k k的样本集合, ∣ . ∣ |.| .表示数据集样本数。
      基尼指数可以为随机取两个样本、两个样本不属于同一类的概率,这里是按特征A的特征值划分,且注意这里是二叉树:
      G i n i ( D ∣ A ) = ∑ m = 1 M p m G i n i ( D m ) = p l e f t ( 1 ? p l e f t ) + p r i g h t ( 1 ? p r i g h t ) Gini(D|A)=\sum_{m=1}^{M}p_mGini(D_m)=p_{left}(1-p_{left})+p_{right}(1-p_{right}) Gini(DA)=m=1M?pm?Gini(Dm?)=pleft?1?pleft?)+pright?1?pright?)
      其中 M M M为特征 A A A的特征值取值数量即用特征 A A A划分的类别数, C m C_{m} Cm?为数据集 D D D特征 A A A取值为 A A A的第 m m m个取值的样本集合, C k m C_{k_m} Ckm??为数据集 D D D属于类别 k k k且特征 A A A取值为 m m m的样本集合, ∣ . ∣ |.| .表示数据集样本数。
      这里取 G i n i ( D ∣ A ) Gini(D|A) Gini(DA)最小(等价于 G i n i ( D ) Gini(D) Gini(D)- G i n i ( D ∣ A ) Gini(D|A) Gini(DA))的特征作为分裂特征,且分裂特征可重复选取。
      基尼指数优点是省去了复杂的log计算;缺点是仍然偏向取值种类多的特征。
    • 平方误差:
      m i n s m i n c 1 , c 2 ∑ x i < = s ( y i ? c 1 ) 2 + ∑ x i > s ( y i ? c 2 ) 2 = m i n s ∑ x i < = s ( y i ? y  ̄ 1 ) 2 + ∑ x i > s ( y i ? y  ̄ 2 ) 2 min_{s}min_{{c_1},{c_2}}\sum_{x_i<=s}(y_i-c_1)^2+\sum_{x_i>s}(y_i-c_2)^2=min_{s}\sum_{x_i<=s}(y_i-\overline{y}_1)^2+\sum_{x_i>s}(y_i-\overline{y}_2)^2 mins?minc1?,c2??xi?<=s?(yi??c1?)2+xi?>s?(yi??c2?)2=mins?xi?<=s?(yi??y?1?)2+xi?>s?(yi??y?2?)2
      其中 s s s为特征的划分值, c 1 c_1 c1? c 2 c_2 c2?为左右节点的预测结果,对 c 1 c_1 c1? c 2 c_2 c2?求导可得 c 1 c_1 c1? c 2 c_2 c2?分别代表左右子节点上的平均值 y  ̄ 1 \overline{y}_1 y?1? y  ̄ 2 \overline{y}_2 y?2?
  • 剪枝策略:基于代价复杂度剪枝

    • 代价复杂度参数 α \alpha α计算公式如下,其中e(T)为错分率,p(T)为该节点所覆盖的样本量占总样本量的比例,L(T)为T节点的叶子节点的个数。俗话说, α \alpha α表示T节点进行分裂后,带来的错误率降低效果平均到所有叶子节点的结果,代表了误差降低程度和叶子节点数之间的平衡系数, α \alpha α越大,说明T节点分裂的“性价比”更高,每个叶子节点能均分到更大的误差降低”成就”,反之越小、“性价比”越低、更容易考虑取消分裂从而提高泛化性。
      在这里插入图片描述
    • 计算每个非叶子节点的 α \alpha α,循环对 α \alpha α最小的节点进行剪枝(有多个节点同时取到最小值时取叶子节点最多的节点),直到只剩下根节点,可得到一系列的剪枝数{T0, T1, T2, …, Tm},其中T0为原始的决策树,Tm为根节点,Ti+1为Ti剪枝后的结果。在这一系列的剪枝树中,根据实际的误差估计决定最优的决策树。
  • 缺失值处理:存在代理特征,即若分裂特征的特征值缺失,则用基尼指数第二小的特征对应的特征值进行左右子节点分配,若第二小的特征特征值也缺失就用第三小的…

  • 样本不均衡处理:分类场景下,一个叶子节点的最终预测结果为叶节点该类别样本数除以根节点该类别样本数得到比例更大的类别。

优缺点

决策树有两个优点:
一是得到的模型很容易可视化,非专家也很容易理解,
二是算法完全不受数据缩放的影响。由于每个特征被单独处理,而且数据的划分也不依赖于缩放,因此决策树算法不需要特征预处理,如果归一化或标准化。特别是特征的尺度完全不一样时或者二元特征和连续特征同时存在时,决策树的效果很好。

控制决策树模型复杂度的参数是预剪枝参数,它在树完全展开之前停止树的构造。通常来说,选择一种预剪枝策略(设置max_depth、max_leaf_nodes或min_samples_leaf)足以防止过拟合。

决策树的主要缺点在于,即使做了预剪枝,它也经常会过拟合(贪心策略),泛化性能很差。因此,在大多数应用中,往往使用bagging或者boosting集成方法来替代单颗决策树。

其他问题

决策树分裂标准、损失函数、误差率之间的关系

参考资料

【机器学习】决策树(上)——ID3、C4.5、CART(非常详细)
模型算法基础——决策树剪枝算法(三)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:59:24  更:2021-08-16 12:01:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:52:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计