《机器学习》学习笔记之决策树
来源:互联网 发布:linux内核优化 编辑:程序博客网 时间:2024/05/29 17:54
近日在学习周志华教授的《机器学习》一书,决定做这么一个学习笔记,记录自己入门的过程。
文章仅是对部分内容的总结,个人浅薄之见,如有错误,欢迎指正。
决策树,顾名思义,以树的结构来进行预测。它的基本概念在章节开头有详细的介绍。
构建树的递归算法中,有三个情形会导致递归返回。其中第二个:当前属性(特征)集为空,或是所有样本在所有属性上取值相同,无法划分。其意思是:已经没有特征拿来作进一步划分生成子节点,或者此结点中的样本标记不一致,但是他们在剩余待划分的所有特征的取值都一样,此时也无法进一步划分。比如我们要判定两个西瓜是不是好瓜,还剩两个特征用来当做结点划分,一个是颜色,一个是敲声。这两个西瓜类别不同,一个好瓜一个坏瓜,但他们颜色都是青绿色,敲声都是浑浊,所以他们在所有属性上取值相同,也就没法区别哪个好哪个坏了。
关于信息熵,其本质是反映样本集合不一致的程度。样本越不同,信息熵越大。比如10个西瓜,其中9个好瓜1个坏瓜,它的信息熵要小于10个西瓜中5好5坏。直观上容易理解。前者类别非常一致了,基本都是好瓜,而后者好坏数量都差不多,他们也就更加不同。
在一个结点划分后,计算它子节点的信息熵的和时,为什么要给样本数多的节点赋予更高权重呢?极端的例子:把1万个未知的西瓜都判定为好瓜所带来的信息量,一定大于把两个未知西瓜判定为好瓜的信息量吧。
如果多个特征带来的信息增益相同且最大,那么任选这几个最大之一即可。
增益率:特征a的信息增益除以特征a的固有值。特征a的取值数目越多,固有值越大。信息增益准则偏好取值数目较多的特征,所以利用增益率可以减缓这个偏好。然而增益率准则又会偏好取值数目较少的特征,所以C4.5算法对两个准则做了折衷:先选信息增益高于平均水平的特征,再从这些特征里选增益率最高的。
基尼系数与信息熵特点相同:样本集越一致,基尼系数越小。
剪枝中:如果叶结点中正负例个数相同,则此叶结点中全部样本判为正例
预剪枝与后剪枝对比
预剪枝 优点:降低过拟合风险 节约计算时间
缺点:增加欠拟合风险
后剪枝 优点:降低欠拟合风险 泛化能力更强
缺点:时间开销过大
离散特征被用于一个结点的划分后,它的子节点不可能再用此特征了,因为每个子节点对于此特征的取值均相同。而连续特征则可反复用多次,比如一个结点的特征为密度是否<0.5 ,对于类别为是的子节点,还可以用密度是否<0.3 作为特征。
如果一个样本集中某些样本的某些属性值缺失,应该如何来学习一个决策树呢?
只需解决两个问题:1.如何在属性值缺失的情况下进行划分属性选择? 2.给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
第一个问题:与之前相同,也是计算每个特征的信息增益,再从中选择信息增益最大的特征。只不过计算信息增益的公式有所不同,对于一个指定的特征,在之前计算信息增益的公式中,把所有样本换成没有缺失这个特征的样本即可,最后将计算出的信息增益(无缺失样本的信息增益)乘以无缺失样本占所有样本的比例即得到对于所有样本,此特征的信息增益。
第二个问题:对于已确定用来划分的特征,如果一个样本在此特征上的取值未知,则将其划入所有子结点,再将其样本权值乘以一个比例(书中有介绍)即可。至于什么是样本权值:每个样本的初始权值为1,假如一个子节点中3个样本的权值都为0.5,我们求这个节点中样本个数占所有子结点中样本个数的比例时,就不是用3除以总数,而是用1.5除以总数了。
多变量决策树:将每个结点按照多个特征的线性组合进行划分而非之前的单一特征。 书中对于此种树并无更多详细介绍。
- 《机器学习》学习笔记之决策树
- 机器学习学习笔记之二:决策树
- 机器学习之决策树学习笔记
- 机器学习笔记---决策树
- 机器学习笔记:决策树
- 【机器学习笔记】决策树
- 《机器学习实战》之决策树-笔记2
- 机器学习----笔记之决策树(3)
- 机器学习笔记(二)之决策树
- 机器学习之决策树
- 机器学习 之 决策树
- 机器学习之决策树
- 机器学习之决策树
- 机器学习之决策树
- 机器学习之决策树
- 机器学习之决策树
- 机器学习之决策树
- 机器学习之决策树
- iOS开发实用知识点记录(持续更新)
- Arduino软串口调试
- FFmpeg 基本用法
- Codeforces Round #301 (Div. 2) C. Ice Cave(BFS)
- JavaScript探秘:for-in循环(for-in Loops)
- 《机器学习》学习笔记之决策树
- 浅析Python中的struct模块
- 渐渐明白习以为常的珍贵
- CentOS7中源码编译安装MySQL5.7.x
- 关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
- Linux(LAMPP)下使用MySQL时不能正常显示中文的解决办法
- 使用命令行上传代码到github
- 278. First Bad Version [easy] (Python)
- ssh-keygen的使用方法