深度学习-决策树
小白入门网课笔记整理,欢迎交流
什么是决策树
例子:你正在运营一个猫领养中心,并希望通过几个特征来训练一个分类器,快速判断一个动物是否是猫。
特征:耳朵形状(尖的,或下垂),脸形状(圆的,或不圆),是否有胡须(有,或没有)
最后得到的结果是二分类,是或者不是

什么是决策树

树的最顶端的节点称为根节点
椭圆的节点,除了根节点,其他称为决策节点(查看特征,然后决定你是向左还是向右走)
底部的矩形框,称为叶节点(它们做出预测)

有很多不同的决策树。
决策树学习算法的任务是,从所有可能的决策树中尝试挑选一个在训练集上表现良好,并且理想情况下也能很好泛化到新数据的树。例如你的交叉验证和测试集。
一些重要的选择
- 你如何选择在每个节点上使用的特征来进行分割(哪个特征能导致左分支和有分支的标签纯度最高)
- 决定什么时候停止分裂(当一个节点100%是一个类别的时候,或者决定树生长的最大深度,或者增加深度但是分类纯度变化不大时,或者一个节点中的例子数量低于某个阈值)
限制树高度的原因:树不会变得太大难以管理,不容易过拟合
分类树
熵
熵:一种测量样本集纯度的方法
熵函数通常用大写H表示,参数为p1

p1等于猫的样本比例,p0为非猫样本的比例
为了计算熵,将0log0视为等于0
选择分割-信息增益
在决策树的学习中,熵的减少称为信息增益。
如何利用信息增益来决定在决策树的节点上根据什么特征进行分割
- 根据不同的特征划分,然后计算猫的占比,计算熵
- 计算与未分割时的熵相比的减少量
- 选择减少量最多的


为什么我们要计算熵的减少量而不是左右子分支的熵?
决定合适不在进一步分割的停止准则之一熵的减少量太小,这时候没必要增加树的大小并冒着过拟合的风险进行分割,如果熵的减少量太小低于某个阈值,就决定不再分割。
独热编码
特征取两个以上的值(比如耳朵的形状,尖的,耷拉的,椭圆的)应该怎么处理-独热编码
如果一个分类特征可以取K个可能值,在我们的例子中是3,那么我们将用K个二元特征替换它。

使用独热编码来编码分类特征的方法也适用于训练神经网络。
连续值特征


为了让决策树在每个节点上处理连续值特征,在考虑分割时,你只需考虑不同的分割值,进行通常的信息增益计算,并决定如果该连续值特征能提供最高可能的信息增益,则在该特征上进行分割。
回归树
给定一个新的测试样本,从根节点开始,沿着决策节点向下,直到到达一个叶节点,然后预测叶节点上的值。
构建回归树时,我们不再试图减少熵,而是试图减少数据子集中体重的方差(这个例子中是根据耳朵形状,脸形状,胡子预测动物的体重)。
选择加权方差减少最多的作为一个决策节点。

树集成
使用单一决策时的一个弱点是:决策树对数据的微小变化非常敏感。
解决方法:构建不止一颗决策树,而是构建许多决策树,我们称为树集成。
原因:通过用于许多决策树并让它们投票,使得你的整体算法对任何单一树的行为不那么敏感,这让你的整体算法更加鲁棒。
随机森林算法

循环多次:有放回抽样得到一些样本,训练得到一棵决策树
推荐的次数是64-128次
预测时,让这些树全部投票决定最终的正确预测。
关键思想:使用这种有放回抽样过程,有时你最终在根节点和根节点附近的节点上总是使用相同的分割。尝试在每个节点上进行随机化特征选择,从而在投票时得到更准确的预测。(就是有放回的从整体样本中抽取一些出来训练决策树,然后把这些树集成到一起,最后的结果由树投票决定)
通常的做法是,在每个节点选择一个特征进行分裂的时候,如果有n个特征可用,并不是从所有n个特征中选择,我们会选择一个随机子集k(k小于n),并允许算法仅从该K个特征的子集中选择。当n很多的时候,k等于根号n
为什么有效:采样替换过程导致算法探索了很多对数据的微小变化,并且训练了不同的决策树,并平均了采样替换过程导致的所有这些数据变化。所以数据集的微小变化一般不会对随机森林算法的整体输出产生巨大影响。
XGBoost
循环多次:不放回采样,但是每次通过循环,除了第一次,在采样时,不在1/m的概率从所有m个样本中均匀选择,而是更有可能选择之前训练的树表现不佳的误分类样本。

下次抽样的时候,选择分类错误的样本的概率更大。
XGBoost一些优点:
1.基于开源技术的增强型决策树实现方案
2.快速高效的实现方式
3.对于停止分裂或分裂有默认的标准
4.内置了正则化机制以防止过拟合
5.高度竞争性的机器学习算法竞赛(例如:Kaggle竞赛)
会用就行了,具体实现细节很复杂
决策树VS神经网络
决策树与树集成
1.适用于表格(结构化)数据
2.不建议用于非结构化数据(图像、音频、文本)
3.快速
4.小型决策树具备人类可理解性(太大的决策树可读性较弱)
神经网络
1.适用于各种类型的数据,包括表格数据(结构化数据)和非结构化数据。
2.可能比决策树的处理速度慢一些
3.支持迁移学习功能
4.在构建多个模型协同工作的系统时,将多个神经网络串联起来可能会更简便一些。
更多推荐
所有评论(0)