从决策树产生的一些列的问题,过度到随机森林:
全文大概要阅读10分钟:
随机森林算法范畴
监督学习分类算法,基模型是由决策树组成
决策树
- 决策树模型与学习
- 特征选择
- 决策树生成
- 决策树剪枝
- CART算法
1)决策树模型与学习
看李航的书,心中要一直默念:
统计学方法=模型假设 + 策略(损失函数)+ 学习方法
【1】 模型假设
模型为一颗决策树
- 组成:结点(根结点,内部结点,叶子结点)和有向边
- 表示:叶子结点表示一个类,内部结点表示一个特征(切片)或属性
- 优点: 可以自学习,在学习过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。
- 算法类别:有监督学习,从一类无序、无规则的事物(概念)中推理出决策树,表示的分类规则。
- 分类规则: 由决策树的根结点到叶结点的每一条路径构建一条规则
- 路径上内部结点的特征对应者规则的条件,而叶结点的类对应着规则的结论
决策树的思想:
类似下方的女孩子找对象,源代码为:
if “男主个子低于1.7M”:
pass!
else :
if “男主颜值赛吴彦祖”:
安排!
elseif “男主颜值一般”:
if “男主土豪”:
安排!
else
pass!
...
用决策树来表示这个逻辑。叶子结点表示决策
【2】决策树的学习损失函数
通常为正则化的极大似然函数,但是基于损失函数找到全局最优决策树是NP-hard完全问题,后面的剪枝会谈到。
【3】学习策略
采用启发式方法,即局部最优。
具体做法: 每次选择特征结点时,都挑选当前条件下最优的那维特征作为划分规则,即局部最优的feature.
通过一种衡量标准,来依次计算不同特征作为切分特征,进行分支选择后的分类情况,找到切分结点。
特征选取目标函数
根据衡量的目标函数不同,建立决策树的三种衡量算法:
- ID3 :核心在于“信息熵”
- C4.5: ID3的改进,核心在于“信息增益比”
- CART: 核心在于“”基尼系数
这里我们先介绍几个概念:
- 信息量
- 熵
- 条件熵
- 信息增益
(1)熵
婚恋网站完全可以使用随机森林进行相亲匹配。
我们假设一位姑娘,名唤“芙蓉 ”,在某婚恋网站注册,欲觅寻一少年为伴。
初始时,系统随机为“芙蓉 ”分配了数个相亲对象,而“芙蓉 ”会根据每个人的条件选择见那些,不见那些。选择过程会被系统记录,由此,便有了历史数据。
比如,历史数据是这样的:
我们相信,不同的人看重的方面不一样,有些姑娘在乎外貌和身高,而有些则更在意收入、学历等硬性实力。
那么,我们如何从姑娘最终的选择当中,推算出其主要看重男方的哪一点呢?
这就是决策树学习的核心技术了。用到了信息熵的概念。
信息熵是用来衡量一个系统有序程度的指标。系统的信息熵大,说明该系统越为混乱,形式不明朗,反之,则当前形势清晰。
结合我们的案例来讲,越是被姑娘看重的指标,按该特征指标进行分类后,系统越清晰有序。比如说,姑娘十分看重身高,若是这样,那么我们在历史数据中一定会发现,有身高优势的男嘉宾大部分得到了见面机会,而身高不足的男嘉宾大部分无缘与女方相见。即见面与否与身高相关性很大。
【1】什么叫信息量?
信息量是用来衡量一条信息的发生使系统变得更确定的程度!
如果我们是一位战场的指挥官,敌人要发动进攻。谍报部门提供了两条情报:
第一条 敌人会从北方进攻
第二条 敌人要进攻旅顺
显然第二条情报的信息量更大,因为它让我们对敌人意图的判断更为明朗。
【2】如何计算信息量呢?
信息论之父-香农,将一条信息发生时所包含的信息量与其发生的概率相联系,准确的说,信息量大小与其发生的概率成反比。
概率越小的事情,发生时所携带的信息量越大!
其实这与我们的直观感受是相符合的,我们会觉得火箭发射失败的消息所包含的信息量很大,因为其发生概率很小。
祭出信息量公式:
公式解释:
【3】那啥又是信息熵?
- 信息熵与信息量,是系统与个体的关系。
- 信息量是衡量系统中某种结果发生时所携带的信息大小。
- 而信息熵则是研究系统各种可能结果及其每种结果发生的概率与整个系统的混乱度的关系。
- 听不懂?没事,我们来举例子:
- 如果我们听到这样的预报,会是怎样的一种感受,废话!!!。。。
- 当一个系统的各种可能性相等的时候,该系统最为混乱(无序),其信息熵也是最大的。
- 反之,如果一个系统中某个结果概率很大,其他结果概率很小,则该系统的信息熵较小,该系统较为明确(有序)!
例如这样的天气预报:
问题来了,上面讲的系统有序程度,是一种主观的感觉。能不能用数学的方法来量化一个系统的有序程度呢?
前面提到了信息量的概念,能否用一个系统的所有可能结果发生时所携带的信息量的总和来衡量该系统的混乱程度呢?
还是以天气预报为例,该系统有四种结果:晴天,多云,小雨和大雨,若按照信息量之和来衡量混乱度,那么其混乱度的值为各个结果发生概率之倒数,再取对数并求和。
这种方式可行吗?不可行!因为概率极小的结果会对最终的结果影响很大,但是现实中,极小的结果对混乱度并无多大影响。
明天95%的概率是多云。如果我们再加上一个结果,下冰雹!!!其概率为万分之一。对这个系统的混乱度会有什么影响呢?
现实中增加了这个可能并没有影响我们对明天的判断。然而,如果用信息量直接求和来衡量混乱度的话,下冰雹这个结果增加后,系统的混乱度大大增加了,因为其发生的概率太小,导致整个系统的信息量之和明显增大。
用每个结果的信息量与其发生概率加权,再求和,最终得到的值便可以有效地衡量整个系统的混乱程度,值越大,越为混乱!信息熵公式:
来,我们用这种方法来算一下天气预报系统的混乱度:
算出来的值就可以科学地衡量一个系统的混乱度了。各位观众可以做一个实验,在各种结果概率相等时,该值最大;而若是存在某个结果概率接近1的时候,该值趋向最小!满足下列曲线
简单计算:
同样数据个数的样本,类别多的信息熵值越大
举例:
我们以“收入”这个特征为代表详细讲解信息熵的计算过程。
男嘉宾共有6位,收入高的2位,中等的3位,收入较低的有1位。根据收入将6位男嘉宾分为高、中等、低3组,每组即是一个子系统。
子系统中有两种结果“见”“不见”。每种结果的概率即其与子系统体量(子系统总人数)的比值。如此,根据信息熵的计算公式便可计算每个子系统的信息熵。
子系统的信息熵与子系统体量(用占比表示:子系统人数/系统总人数)加权后,求和,便是整个系统的信息熵。
按“收入”分割时,总信息熵的计算:
(2)条件密度和条件熵
- 条件密度
将n维的特征空间划分为互不相交的单元或区域,并在每个单元定义一个类的概率分布就构成了条件概率分布。
各叶结点(单元)上的条件概率往往偏向于某个类,即属于某个类的概率较大,决策树分类时将该结点的实例强行分到条件概率大的那一类去。
- 条件熵
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵分别为:经验熵和经验条件熵。
- 信息增益:
信息增益:表示得知特征X的信息而使得类Y的信息不确定性减少的程度。
特征选择
- 信息增益算法
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D, 计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。g(D,A)越大,H(D)不变, H(D|A)越小,条件熵越小,说明剩余的信息量越小,说明结果越明确。
2. 信息增益比
C4.5算法
目的:以信息增益作为划分训练数据集的特征,存在偏向与选择取值较多的特征的问题,也就是所该特征向量的维度越高,越可能被选择上。因为这种特征的分类会越详细,带来的条件信息熵会越小。
理解:
从公式出发,信息增益是整个数据集的经验熵与特征A对整个数据集的经验条件熵的差值,信息增益越大即经验条件熵越小,那什么情况下的属性会有极小的的经验条件熵呢?举个极端的例子,如果将身份证号作为一个属性,那么,其实每个人的身份证号都是不相同的,也就是说,有多少个人,就有多少种取值,如果用身份证号这个属性去划分原数据集,那么,原数据集中有多少个样本,就会被划分为多少个子集,这样的话,会导致信息增益公式的第二项整体为0,虽然这种划分毫无意义,但是从信息增益准则来讲,这就是最好的划分属性。其实从概念来讲,就一句话,信息增益表示由于特征A而使得数据集的分类不确定性减少的程度,信息增益大的特征具有更强的分类能力。
决策树构造书上的例子:
3. 决策树生成
简单贴一下算法流程:
决策树的分叉过程就是一个递归过程,根据信息熵找出最关键特征,按此特征进行分叉,对子树杈上的数据在以类似的方式分叉,一直到特征用尽,或者是这一树杈上的数据都有相同的标签(比如都是见面的,或者都是不见面的)为止!
到此,决策树自动生成了!
如何解决过拟合问题:
解决一下三个问题:
- 什么是过度拟合数据?
- 过度拟合数据是怎样产生的?
- 怎么样去解决这个问题?
1)什么是过度拟合数据?
2)过度拟合产生的原因:
- 样本问题
- 噪音过大
- 样本提取错误:样本数量太少,抽样方法不符合业务场景和业务特点
- 建模中使用了样本中太多无关的输入变量
2. 决策树的构建问题
- 算法对于决策树的生长没有合理的限制和剪枝。会导致决策树的自由生长成有可能每片叶子里只包含单纯的事件数据或非事件数据。
3)解决过拟合问题的方法
- 解决一
- 合理、有效的抽样
- 用相对能反映业务逻辑的训练集去产生决策树
- 解决二
- 剪枝:提前停止树的增长或者对已经生成的树按照一定的规则进行后剪枝
- 预剪枝和后剪枝
如下图所示
对于剪枝这里只做简单介绍,毕竟我们要学习的是随机森林!
CART生成算法
解决决策树过拟合的另一种方法---随机森林
- 为什么选择随机森林?
- Boostrap有放回采样方法
- Bagging 策略
- 随机森林算法思想
- 投票机制
1. 为什么选择随机森林算法?
随机森林预测精度高,可以产生高精度的分类器。泛化能力强,原理易于理解且易于并行计算,因此深受广大用户喜爱!
你可能会想问为什么不能只用一个决策树呢?它似乎很完美,因为它没有犯任何错误!但别忘了这个关键点,即这棵树是在 训练数据上没有犯错。我们早已预计会出现这种情况,因为我们给树提供了答案,而且没有限制最大深度(树的层数)。然而,机器学习模型的目标是可以对从未见过的新数据很好地泛化。
过拟合发生在当我们有一个 非常灵活的模型(模型具有高能力)时,其本质上是通过紧密拟合来记住训练数据。这样的问题是模型不仅学到了训练数据中的实际关系,还学习了存在的噪声。灵活的模型具有 高方差(variance),因为学到的参数(例如决策树的结构)将随着训练数据的不同而变化很大。
另一方面,因为对训练数据做出了 假设,所以一个 不灵活的模型具有较 高的偏差(bias),(它偏向于对数据预先构思的想法)例如,线性分类器假设数据是线性的,不具备拟合非线性关系的灵活性。一个不灵活的模型甚至可能无法拟合训练数据,在高方差和高偏差这两种情况下,模型都无法很好地泛化到新数据之上。
一个能记住训练数据的非常灵活的模型与不能学习训练数据的不灵活模型之间的平衡称为 偏差-方差权衡(bias-variance-tradeoff),它是机器学习中的一个基本概念。
随机森林由多棵决策树组合而成,是多个弱分类器组成强分类器的典型代表!
当我们不限制最大深度时决策树容易过拟合的原因是它具有无限的灵活性,这意味着它可以持续生长,直到它为每个单独的观察点都生成一个叶节点,达到完美地分类。如果返回到之前决策树的图像并将最大深度限制为2(仅进行一次拆分),则分类不再100%正确。我们减少了决策树的方差,但代价是增加了偏差。
限制树的深度可以减少方差(好)并且增加偏差(坏),一种替代方案是,我们可以将许多决策树组合成一个称为随机森林的集成模型(ensemble model)。
随机森林应用非常广泛,根据目标变量的取值类型大致可分为两类:一类是分类“当目标变量取值为离散型时(属性变量、种类变量、有序变量、多级变量等),采用该法可进行分类;
当目标变量为连续型,则可做回归,对应的预测结果是目标变量的分布
两个随机的解释:
随机森林是由许多决策树组成的模型。这个模型不是简单地平均所有树(我们可以称之为“森林”)的预测,而是使用了两个关键概念,名字中的随机二字也是由此而来:
- 在构建树时对训练数据点进行随机抽样
- 分割节点时考虑特征的随机子集
只考虑所有特征的一个子集来拆分每个决策树中的每个节点。通常将其设置sqrt(n_features)以进行分类,这意味着如果有16个特征,则在每个树中的每个节点处,只考虑4个随机特征来拆分节点。
2. Bootstraping方法
背后的想法是在不同样本上训练每棵树,尽管每棵树相对于特定训练数据集可能具有高方差,但总体而言,整个森林将具有较低的方差,同时不以增加偏差为代价。
3. Bagging 的策略
4.随机森林思想
5. 投票机制
随机森林的相关性分析
随机森林的相关性包括子数据集间的相关性和子数据集间特征的相关性。相关性在这里可以理解成相似度,若子数据集间重复的样本或子数据集间重复的特征越多,则相关性越大。
随机森林分类效果(错误率)与相关性的关系:
(1)森林中任意两棵树的相关性越大,错误率越大;
(2)减小子数据间的特征选择个数m,树的相关性和分类能力也会相应的降低;增大特征个数,树的相关性和分类能力会相应的提高。
结论:(1)是随机有放回抽取的,相关性大小具有随机性,没法改变,因此,特征个数是优化随机森林模型的一个重要参数。
结论:
bagging法的模型偏差与子模型的偏差接近,方差较子模型的方差减小。所以,随机森林的主要作用是降低模型的复杂度,解决模型的过拟合问题。
下一节:从决策树到随机森林的代码解析...
原文已经更多详情:
reference:从决策树到随机森林理论篇从人话到鬼话:看不懂来找我麻烦reference:
随机森林通俗演义
清华大学数据科学研究院:独家 | 一文读懂随机森林的解释和实现