前置学习:
默认你已经理解了机器学习一里的留出法等对准确性提高的各种通用的前置方法
引用部分为西瓜书原文(这句话的不算)
决策树
顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决 策问题时一种很自然的处理机制.例如,我 们 要 对 “这是好瓜吗?”这样的问题 进行决策时,通常会进行一系列的判断或“子决策”:我 们 先 看 “它是什么颜 色?”,如 果 是 “青绿色”,则 我 们 再 看 “它的根蒂是什么形态?”,如 果 是 “蜷 缩 ”,我 们 再 判 断 “它敲起来是什么声音?”,最后,我们得出最终决策
决策树学习的目的是为 了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简 单且直观的“分而治之"(divide-and-conquer)策略
决策树的生成是一个递归过程.在决策树基本算法中,有三种情形会 导致递归返回:( 1 )当前结点包含的样本全属于同一类别,无需划分;( 2 )当前 属性集为空,或是所有样本在所有属性上取值相同,无法划分;( 3 )当前结点包 含的样本集合为空,不能划分
每一次的判断都是根据一个特征来的
我们肯定要判断,哪一个特征的权证更高一些,我们优先对这个特征进行判断
于是又了信息增益的判断
为什么它能判断
“信 息 熵 "(information entropy)是度量样本集合纯度最常用的一种指标.
熵越大,随机变量的不确定性就越大
信息增益是相对于特征而言的,信息增益越大,特征对最终的分类结果影响也就越大,我们就应该选择对最终分类结果影响最大的那个特征作为我们的分类特征
如何计算信息增益,(小编还没学到信息论
推导:此处省略一千字
然后呢,问题又来了,我一定要使用信息增益判断吗
不是,还可以用增益率
信息增益准则对可取值数目较多的属性有所偏好,为减少这种 偏好可能带来的不利影响,著名的C4.5决策树算法[Quinlan, 1993]不直接使 用信息增益,而是使用“增益率”(gain ra tio )来选择最优划分属性
还可以用基尼指数(知道有就行主要我没看懂,书里也没有详细介绍优缺点)
选择什么特征进行第一步判断了,下一步是什么
第一章提到了所有算法都需要解决的问题,过拟合
预剪枝和后剪枝,就是解决这个问题的
一个开销少,准确度相对低;一个开销大,准确度相对高。
预剪枝使得决策树的很多分支都没有“展 开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测 试时间开销.但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可 能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显 著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了 欠拟合的风险.
后剪枝决策树通常比预剪枝决策树保留了更 多的分支.一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预 剪枝决策树.但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上 地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树 和预剪枝决策树都要大得多
连续与缺失值
如果刚才的数据,
有连续(就是像密度,含糖率这样的属性特征),要怎么决定信息增益。用了一个连续属性离散化技术,把连续的编程离散的,想理解的可以看原文
有缺失(就是有一列数据中缺了几个数),要怎么解决
我没太理解,反正就是把信息增益的公式进化了一下
让他能处理缺失问题,从而依旧使用信息增益来判断
这里的代码我们参考Jack Cui的学习笔记https://github.com/Jack-Cherish/Machine-Learning/tree/master
先说一下常用sop
- 收集数据:可以使用任何方法。比如想构建一个相亲系统,我们可以从陌陌探探青藤啥的那里爬一下数据,或者通过自媒体爆火视频和普通视频调研大家对相亲对象的标准。根据他们考虑的因素和最终的选择结果,就可以得到一些供我们利用的数据了。
- 准备数据:收集完的数据,我们要进行整理,将这些所有收集的信息按照一定规则整理出来,并排版,方便我们进行后续处理。
- 分析数据:可以使用任何方法,决策树构造完成之后,我们可以检查决策树图形是否符合预期。
- 训练算法:这个过程也就是构造决策树,同样也可以说是决策树学习,就是构造一个决策树的数据结构。
- 测试算法:使用经验树计算错误率。当错误率达到了可接收范围,这个决策树就可以投放使用了。
- 使用算法:此步骤可以使用适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。
其实就是上面概念理解,和解决方案,从数理内容,转换成编程内容
如何用编程来实现这些个数学公式
机器学习实战教程(三):决策树实战篇之为自己配个隐形眼镜
接下来,非专门的技术人员远离
编写代码计算信息增益
创建决策树
可视化决策树
实现一个隐形眼镜的配置
数据从开源笔记中下载,以下是最终代码