| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【周志华机器学习】四、决策树 -> 正文阅读 |
|
[人工智能]【周志华机器学习】四、决策树 |
文章目录参考资料
1. 基本概念决策树是基于树结构来进行决策的。 例如: 决策树中决策过程的每一次判定都是对某一属性的“测试”,决策最终结论则对应最终的判定结果。一般一棵决策树包含:一个根节点、若干个内部节点和若干个叶子节点,易知:
2. 决策树的构造决策树的构造是一个递归的过程,有三种情形会导致递归返回: (1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别; (2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别; (3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。 算法的基本流程如下图所示:
属性划分的目标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别。因此下面便是介绍量化纯度的具体方法,决策树最常用的算法有三种:ID3,C4.5和CART。 3. ID3算法(使用信息增益)ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为
p
k
(
k
=
1
,
2
,
.
.
.
,
∣
γ
∣
)
p_k(k=1,2,...,|\gamma|)
pk?(k=1,2,...,∣γ∣),则样本集合D的信息熵定义为: 假 定 离 散 属 性 a 有 V 个 可 能 的 取 值 a 1 , a 2 , . . . , a V {a^1,a^2,...,a^V} a1,a2,...,aV , 若 使 用 a 来 对 样 本 集 D进 行 划 分 , 则 会 产 生 V 个 分 支 结 点 , 其 中 第 v 个 分 支 结 点 包 含 了 D 中 所 有 在属 性 a 上 取 值 为 a v a^v av 的 样 本 , 记 为 D v D^v Dv. 易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。于 是 可 计 算 出 用 属 性 a 对 样 本 集 D 进 行 划 分 所 获 得 的 “ 信 息 增 益 “(information gain) 信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。 4. C4.5算法(使用增益率)ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。 首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率,增益率定义为: 称 为 属 性 a 的 “固有值” (intrinsic value)。属性a的可能取 值 数 目 越 多 ( 即 V 越 大 ), 则 IV(a) 的 值 通 常 会 越 大 . 5. CART算法(使用基尼系数)CART(Classification And Regression Tree)决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,基尼指数定义如下: 进而,使用属性α划分后的基尼指数为: 于 是 , 我 们 在 候 选 属 性 集 合 A中 , 选 择 那 个 使 得 划 分 后 基 尼 指 数 最 小 的 属性 作 为 最 优 划 分 属 性 , 即 a ? = arg?min ? a ∈ A a^* = \argmin_{a\in A} a?=a∈Aargmin? Gini_index(D, a)。 示例 假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”, 当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下: 1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士} 2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士} 3.划分点: “硕士”,划分后的子集合 : {博士},{本科,硕士}} 对于上述的每一种划分,都可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度: 因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值) 然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。到此就可以长成一棵“大树”了。 三种不同的决策树算法小结
6. 剪枝处理从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过的问题:过拟合(overfitting),即太依赖于训练样本。 剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:
评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以将数据集划分为训练集和测试集。 预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。 后剪枝则表示在构造好一颗完整的决策树后,自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶子结点能带来决策树泛化性能提升,则将该子树替换为叶结点,类别标记为其包含样本最多的类别。 预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。 而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。 7. 连续值与缺失值处理7.1 连续值处理对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法,基本思想为:给定样本集D与连续属性a,二分法试图找到一个划分点t将样本集D在属性a上分为 ≤ t ≤t ≤t与 > t >t >t。
7.2 缺失值处理现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解决两个问题: (1)如何选择划分属性。 (2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。
注意,根节点中的权重初始化为1。 对于问题(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即: 对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在分支节点中的权重变为: 8. 后记1. 树形结构为什么不需要归一化?因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。 既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如 对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。 2. 分类决策树和回归决策树的区别Classification And Regression Tree(CART)是决策树的一种,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),两者在建树的过程稍有差异。 回归树: 参考:https://blog.csdn.net/suipingsp/article/details/42264413 CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。 CART回归树实质上就是在该特征维度对样本空间进行划分,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:
所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 11:35:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |