决策树与随机森林

本文深入探讨了决策树的基本概念及其三种主要算法(ID3、C4.5和CART),并详细解释了信息增益、信息增益比、基尼系数等核心指标。此外,还介绍了随机森林的工作原理及生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.决策树

决策树是一种最基本的分类与回归方法,常用的是用来做分类,主要分为三种,ID3,C4.5和CART算法,随机森林分类器是基于决策树方法的。

1.1决策树模型

顾名思义,可以将预测模型看做是一棵树每遇到一个特征就像是遇到树中的一个节点,该特征的值决定了下一步走向当前节点的哪一个子树。就是个不断if-then的过程。
这里写图片描述

举个例子,上图中银行根据申请贷款对象的基本情况决定是否贷款给他,每个对象有年龄,有工作与否,有房与否等几个特征表示。先判断第一个年龄,在一定范围内才考虑,那么第一个树节点上,有两个分支,一个是继续判断,一个是否决。判别标准就是年龄是否在定义的范围内;接着是是否有房,再者是工作,一直到最后决定贷不贷款。

1.1.1决策树与条件概率分布

那么在上面相亲的例子中,如何确定每个节点的判别标准呢?换句话说,如何根据训练集样本构建(训练)出决策树呢?现实生活中样本数据和判断标准不可能像上面贷款例子中那么简单。决策树表示给定特征X条件下类Y的条件概率分布。
我们可以根据样本特征样在样本空间上实行一个划分:比如,先将贷款对象分为中老青年三类类,再根据是否有房继续划分。当然,对于不同的银行或者决策侧重点来说,可能有人更看重有工作,先依据是否有工作划分,所以如何确定样本特征划分依据的先后顺序呢?不同的决策树算法是不一样的:

1.1.2信息增益

先给出熵和条件熵的定义:熵是表示随机变量不确定性的度量。设X是一个取值有限的离散随机变量,其概率分布为

P(X=xi)=pii=1,2,,n

则随机变量的熵的定义为:
H(X)=i=1npilogpi

规定若pi=0,0log0=0;熵的单位是比特。所以熵只与X的分布有关,跟X的取值无关。X的取值越不确定,熵越大。反之,熵越小
设有随机变量(X,Y),其联合概率分布为
P(X=xi,Y=yi)=piji=1,2,,n,j=1,2,,m

条件熵H(Y|X)表示在已知随机变量X的条件下Y的不确定性:
H(Y|X)=i=1npiH(Y|X=xi)

pi=P(X=xi)i=1,2,,n。当熵和条件熵的概率是由数据估计(就是去count特征的频率代替概率)(特别是极大似然估计)时,熵和条件熵称为经验熵和经验条件熵。
给定样本集合D和其中的某个样本特征A,定义集合D的经验熵与特征A给定条件下的D的经验条件熵只差为信息增益:
g(D,A)=H(D)H(D|A)

对于表格给出的数据集D,经验熵为:
H(D)=915log915615log615=0.971

因为对于D来说就两种取值,是或者否,分别占比(经验概率)915,615,设A为表示年龄的特征,有三种表示,青中老年每个都是5个样本,其中,青年中D1、D2、D3分别表示青年、中年、老年的数据子集,所以D对特征A的条件(经验)熵为:
H(D|A)=515H(D1)+515H(D2)+515H(D3)=13(25log2535log3535log3525log2545log4515log15)=0.888

所以特征A的信息增益为:
g(D,A)=H(D)H(D|A)=0.083

通常选择增益最大的特征是最优特征,最先用来建树。
1.1.2信息增益比(率)

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。如上述表中,若把编号看成是一个特征,则编号特征的信息增益最大,所以可以使用信息增益比对此问题进行校正,定义信息增益比gR(D,A)为信息增益g(D,A)与A特征值的熵HA(D)

gR(D,A)=g(D,A)HA(D)

在本例中,
HA(D)=25log2535log35
1.2决策树的生成

决策树有三种,分为ID3,C4.5和CART算法,分别基于信息增益,信息增益比和基尼系数来作为划分选择特征的依据。

1.2.1 ID3算法

ID3算法的核心是在决策树各个节点上使用信息增益准则选择特征,递归地构建决策树,从根节点开始,寻找当前数据集中信息增益最大的特征,将该特征不同取值的样本划分为不同的子集(该特征有几个取值就分为几个子集,即该节点的子孩子),再对不同的子节点递归调用上述方法,所以不同的子树是互相独立不干扰的。直到最后所有特征的信息增益都很小或者没有特征可以选择为止(若子集中所有样本都属于同一个类)。算法如下:
输入:训练数据集D,特征集A,阈值ε
输出:决策树T;
1、若D中所有样本都是同一个类Ck,则T为单节点树,将Ck作为该节点的类标记,返回T;
2、若A=,则T为单节点树,并将D中实例数目最大的类Ck作为其类标记,返回T;
3、否则,计算特征集A中每个特征信息增益,选择最大的特征Ag;
4、如果Ag的信息增益小于阈值ε,则T为单节点树,将D中实例数目最大的类Ck作为其类标记,返回T;
5、否则,对Ag的每个可能取值ai,将数据集D划分成若干非空子集Di,将Di中实例数目最大的类作为标记,构建子节点,由节点和子节点构成树T,返回T;
6、对第i个子节点,以Di作为训练集,以AAg作为特征集,递归调用1~5步,得到子树Ti,返回Ti
ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。

1.2.2 C4.5算法

C4.5的决策树生成方法和ID3相似,在生成的过程中,C4.5使用信息增益比来选择特征。

1.2.3决策树的剪枝

过拟合是指产生的分类器对训练集数据的分类很准确,但是对于未知的测试数据往往分类结果很差。产生的原因在于在学习时过多的考虑了如何提升对训练数据的正确分类,从而构建了过于复杂的树。决策树中采用剪枝来解决过拟合:即对生成的树进行简化。
决策树中的模型简化称为剪枝:从已经生成的树上裁掉一些子树或者叶子节点,并将根节点或者父节点作为新的叶子节点。
决策树的剪枝通过极小化其整体的损失函数或者代价函数来实现。设树的节点个数为|T|,t是树T的叶子节点,该叶子节点有Nt个样本实例,其中,属于k类的样本实例有Nkt个,Ht(T)为叶节点t上的经验熵,α0为参数,则决策树的损失函数可以定义为:

Cα(T)=t=1|T|NtHt(T)+α|T|(1)

其中,经验熵为:
Ht(T)=kNtkNtlogNtkNt

带入1式有:
Cα(T)=t=1|T|kNtklogNtkNt+α|T|

记作:
Cα(T)=C(T)+α|T|(2)

其中C(T)为模型对训练数据的预测误差,即对训练数据的拟合程度,后面的α|T|为模型的复杂度,其实就是加了正则项防止过拟合,α表示参数。
决策树的剪枝过程就是:给定参数α之后,计算每个节点的经验熵,递归地从叶子节点往根节点回缩,比较一组叶节点回缩到其父节点之前与之后的整体损失函数值,假如回缩之后的损失值小于等于回缩之前,若是,则进行剪枝,将该父节点置为叶节点。树的剪枝算法是一个动态规划的过程。
1.3 CART算法

CART,分类与回归树,同样由特征选择,树的生成和剪枝组成,既可以用作分类也可以用来回归。
CART是在给定输入随机变量X条件下给出随机变量Y的条件概率分布的学习方法,即给定X,CART给出P(Y|X),所以CART是个判别式模型。在该模型中,假设决策树是二叉树,内部特征取值是“是”“否”两种,等价于递归地二分每个特征,将输入空间划分为有限个单元,在这些单元上预测概率。

1.3.1 CART生成

决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼系数最小化准则。

1.3.1.1 回归树生成

设输入X输出Y,Y是连续变量,给定训练数据D={(x1,y1),(x2,y2),,(xn,yn)},一个回归树对应输入空间的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元R1,R2,,RM,并且在每个单元Rm上有一个固定的输出值cm,于是回归树的模型为:

f(x)=m=1McmI(xRm)

当输入空间的划分确定时,可以使用平方误差xiRm(yif(xi))2来表示回归树对于训练数据的预测误差,用平方误差最小化的原则求解每个单元上的最优输出值。单元Rm上的cm的最优值c^Rm上所有的实例xi的对应的输出yi的均值:
c^m=ave(yi|xiRm)

那么如何划分输入空间呢?采用启发式的规则,选择第j个样本特征x(j)和他的取值s,作为切分变量和切分点,依据训练样本在第j个特征的取值将空间划分为两个区域:
R1(j,s)={x|xjs}R2(j,s)={x|xjs}

当 j 和 s 固定时,我们要找到两个区域的代表值 c1,c2 使各自区间上的平方差最小,即求解:
minj,s[minc1xiR1(yic1)2+minc2xiR2(yic2)2]

前面已经知道 c1,c2 为区间上的平均,那么对固定的 j 只需要找到最优的 s。
这样接着对每个区域重复上述划分过程,直达满足停止条件(李航老师的书里面并没有提到停止条件)。这样就生成一颗回归树,通常称为最小二乘回归树。
1.3.1.2 分类树生成

基尼系数:分类问题中,假设有K个类,样本属于属于第k类的概率为pk,则概率分布的基尼系数为:

Gini(p)=k=1Kpk(1pk)=1k=1Kpk2

给定数据集合D,其基尼系数为:
Gini(D)=1k=1K(|Ck||D|)2

如果集合D中的样本在特征A下根据是否取值a的标准,将集合分为两个部分:
D1={(x,y)D|A(x)=a},D2=DD1

那么集合D关于特征A的基尼系数为:
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

基尼系数Gini(D)表示集合D的确定性,基尼系数Gini(D,A)表示经过特征A=a的分割后集合D的不确定性。基尼系数越大,样本的不确定性也就越大,这一点和熵相似。
CART分类树的构建过程也是一个递归构建二叉树的过程:
1、给定训练数据集D,计算现有特征的对该数据集的Gini系数:对每个特征的每个可能取值计算Gini系数。
2、在所有特征的所有可能取值中,选择Gini系数最小的作为最优特征和最优切分点,依据该特征是否取该值将数据划分为两个子集。
3、对每个子集递归调用1,2的步骤过程,直至满足停止条件。
停止条件是节点中的样本个数小鱼预定的阈值或者样本的基尼系数小于预定阈值(样本基本属于同一个类)或者没有更多特征。
1.3 CART剪枝
1.3.1剪枝,形成一个子树序列

计算子树的损失函数

Cα(T)=C(T)+α|T|

T为任意的子树,C(T)为对训练数据的预测误差(如基尼系数),|T|为子树的叶子节点的个数,α0为参数,权衡训练数据的拟合程度和模型的复杂度。
对于固定的参数α,一定存在使得损失函数Cα(T)最小的子树,表示为Tα,在损失函数最小的意义下是最优的,且是唯一的。当α大的时候,最优子树偏小,反之偏大。极端情况下,α=0时,整体树是最优的,当α时,根节点组成的单节点树是最优的。

2.随机森林

2.1随机森林简介

随机森林通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,即在变量(列)的使用和数据(行)的使用上进行随机化,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。

2.2随机森林生成

随机森林中的每一棵分类树为二叉树,其生成遵循自顶向下的递归分裂原则,即从根节点开始依次对训练集进行划分;在二叉树中,根节点包含全部训练数据, 按照节点纯度最小原则,分裂为左节点和右节点,它们分别包含训练数据的一个子集,按照同样的规则节点继续分裂,直到满足分支停止规则而停止生长。若节点n上的分类数据全部来自于同一类别,则此节点的纯度I(n)=0,纯度度量方法是Gini准则,即假设P(Xj)是节点n上属于Xj 类样本个数占训练。
具体实现过程如下:
(1)原始训练集为N,应用bootstrap法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类树,每次未被抽到的样本组成了k个袋外数据;
(2)设有mall个变量,则在每一棵树的每个节点处随机抽取mtry个变量(mtry n mall),然后在mtry中选择一个最具有分类能力的变量,变量分类的阈值通过检查每一个分类点确定;
(3)每棵树最大限度地生长, 不做任何修剪;
(4)将生成的多棵分类树组成随机森林,用随机森林分类器对新的数据进行判别与分类,分类结果按树分类器的投票多少而定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值