目录
为方便后面复习以及加深对算法的理解,我记录下我对决策树与随机森林的浅显理解,希望大家批评指正。
决策树概述
对于分类问题,每次分类都需要一个判断条件,对于不同的判断条件会产生不同的分类结果以及产生不同的分类复杂度,如下图
假设该图表示我们的相亲条件,针对此图我们需要考虑几个问题:1、如何确定哪个判断条件作为根节点? 2、怎样确定选取内部节点的顺序以保证决策树最矮,即复杂度最低? 3、终止条件?
针对这几个问题展开我对决策树的理解。在此处“白不白”作为决策树的根节点,确定根节点以及内部节点的依据是信息熵。下面先来看一下信息熵的概念:
信息熵、信息增益、信息增益率
式子中pk为数据D中k类所占比例,r为类别总数。
信息熵:下面举例说明:
假如D1={1,1,3,4,4} ,分类条件为大于3的分为一类,不大于3的分为另一类,此时信息熵为:
D2={1,1,1,1,4},分类条件不变,此时信息熵为:
数据集D2中的数据相比于D1更加均匀,信息量更少,相应的信息熵值更低,而我们分类的目的正是找到某个判断条件,使得分类结果中相同类别的数据更多,因此寻找根节点以及内部节点的依据便是找到使得数据信息熵更低的判断条件。
信息增益:对于同一个数据集,采用不同的分类方法对应不同的信息熵,两种分类方法的信息熵差异即为信息增益。举例说明:
假设小明一周打球次数为4次,而一周晴天的天数为4,晴天打球的次数为3,阴天的天数为3,阴天打球次数为1次。假设不加分类条件,小明打球这件事的信息熵为:.若加上分类条件“是否为晴天”则信息熵为:
因此加上分类条件后信息增益为,信息增益越大说明分类效果越好。
但是如果按照信息增益的标准选取节点,也会产生另外的问题:当选取的判断条件可以把数据分得很细致,极端情况为每个情况对应的数据完全相同,此时的信息熵为0,信息增益最大,但是这会降低模型的鲁棒性,产生过拟合,对预测数据效果不好。因此引入信息增益率。
信息增益率:信息增益与自身信息熵的比值。对于上述的极端情况,信息增益最大,但是其分类过细会产生很多类别,因此自身的信息熵会很大,导致这种极端分类情况的信息增益率特别小。
评价函数: 其中H(t)为每个叶子节点的信息熵,Nt为每个叶子节点对应的样本数,目标情况为决策树“又矮又纯”,即叶子结点的深度低,叶子节点内部数据相似性高,对应到公式中即为信息熵更低,叶子结点的样本数更少。
决策树剪枝
预剪枝:构建决策树过程中,提取停止。实施方法:可以提前设置深度,当分裂到规定的深度,停止分裂。或者提前设定叶子节点中样本的个数,当分裂到小于规定个数后,停止分裂。这两种方法都可以实现提前停止的效果,防止过拟合。
后剪枝:决策树构建好后,然后才开始剪裁。设定损失函数:
C(T)为评价函数,a为指定的参数,T(leaf)为叶子节点的个数,因为叶子节点个数越多,损失越大。为保证损失函数Ca(T)越小,当选取的a比较大时,T(leaf)就需要更小。实现方法:按照决策树的广度优先搜索的反序,依次对内部节点进行剪枝,如果将某以内部节点为根的子树换成一个叶节点,可以提高泛化性能,就进行剪枝。剪枝前:Ca(T) = C1+a*T(leaf) 剪枝后:Ca(T) = C2+a*1
比较剪枝前后损失值大小,取损失值小的情况确定是否对某个节点进行裁剪。
随机森林
两个随机:
数据样本采样的随机性:通过从训练数据集中有放回的随机采样,构造出很多的、不同的决策树
--目的:使得某些决策树选不到异常样本
数据特征采样的随机性:通过从特征中的随机采样(无放回,特征不能重复)构造随机森林
--目的:使得某些决策树选不到异常特征
随机森林相当于多个决策树,对于一个测试数据,将它投入到随机森林中的不同决策树中,会得到不同的测试结果。若问题是一个分类问题,则可以通过求众数来得出测试数据的类别;若问题是一个回归问题,则可以通过求平均值得出测试数据的值。
补充:
gini系数:
其中pi是数据属于i类的概率。gini系数作用与熵相同,反映数据的纯度,同一组数据越相似,gini系数越小。