统计学习笔记之决策树

本文深入解析决策树算法,包括特征选择、决策树生成与剪枝等核心步骤,探讨信息熵、信息增益、基尼指数等关键概念,适用于分类与回归问题。

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

决策树即用树结构(实际也可认为是if-then规则集合)来做分类与回归的方法。以下主要讨论的是分类问题。其分类方法是递归地选择最优特征,并根据该特征对训练数据进行分割,使得对于各个子数据有一个最好的分类过程。对应过程是特征空间划分和决策树生成,构建好的决策树很可能是发生过拟合的,因此需要对其自下而上剪枝,使树更简单,具有更好的泛化能力。由此决策树学习方法分三步:特征选择\rightarrow生成决策树\rightarrow决策树的修剪。

一、特征选择

一般来说对于要分类的每条数据应该是具有多个特征的。那么对于分类来说就会存在这样一个问题,选择哪些特征来作为分类依据。直观上说,如果一个特征对于分类有良好的区分能力,即按这特征将训练数据分割成子集使得各个子集在当前条件下有最好的分类那么就应该选择该特征。为此我们引入了信息熵信息增益的概念。

信息熵:即用来衡量随机变量不确定性的程度。换言之,X是一个取有限值的离散随机变量,概率分布为P(X=x_{i})=p_{i}则随机变量X的熵定义成

                                                              H(X)=-\sum_{i=1}^{n}p_{i}\mathrm{log}p_{i}

log是以e或2为底的对数,这时熵的单位对应纳特(nat)或比特(bit).易知熵的值只与分布有关而与X本身的值无关,因此熵也记作H(p). X随机性越大,其熵就越大。且0\leq H(p) \leq \textrm{log}n

条件熵:随机变量(X,Y),联合概率分布为

                                                                P(X=x_{i},Y=y_{i})=p_{ij}

条件熵的计算

                                                           H(Y|X)=\sum_{i=1}^{n} p_{i}H(Y|X=x_{i})

而信息增益是要反映信息熵的变化情况,对于训练数据集D的信息增益g(D)表示的是当已知条件A时,此时在D上的熵的变化。即集合D的经验熵和特征A给定的条件下D的经验条件熵H(D|A)之差,即

                                                             \texttt{g}(D,A)=H(D)-H(D|A)

而这种作差的情形称为互信息,这里也是训练数据和特征的互信息。显然要计算信息增益需依赖特征,不同特征的信息增益往往不同,信息增益较大的特征(比如极端情形,一旦确定该条件,结论几乎就板上定钉)具有更强的分类能力。因此在选择特征的方法便是对训练数据集计算每个特征的信息增益,比较其大小,选择增益最大的特征

信息增益算法

已知:对于训练数据集D,|D|表示D样本数量。

设D中有K个类,第k类表示成C_{k}。|C_{k}|表示第k类样本数量。所有类样本总量等于|D|。

设特征A有n个不同的取值,根据每个不同的取值可将D划分成n个集合,即D_{1},D{2},D{3},\cdots ,D_{n},第i个集合样本数即\left | D_{i} \right |

子集D_{i}中属于第k类的集合表示成D_{ik},同理集合样本数量表示成\left | D_{ik} \right |

(1)计算数据集D经验熵H(D)

                                                                 H(D)=\sum_{k=1}^{K}-\frac{|C_{k}|}{|D|}\textrm{log}\frac{|C_{k}|}{|D|}

(2)计算特征A对数据集D经验条件H(D|A)

                                        H(D|A)=\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_{i}|}\textrm{log}_{2}\frac{|D_{ik}|}{|D_{i}|}

(3)计算信息增益

                                                      \texttt{g}(D,A)=H(D)-H(D|A)

值得一提的是单纯利用信息增益作为划分训练集特征的办法,存在偏向选择取值较多的特征的问题。因此引入信息增益比(\texttt{g}_{R}(D,A))予以校正,于是存在另一种准则:使用特征A对训练数据集D的信息增益与训练数据集D关于特征A的值的熵H_{A}(D)之比:

                                                          \texttt{g}_{R}(D,A)=\frac{\texttt{g}(D|A)}{H_{A}(D)}​​​

其中,

                                                    H_{A}(D)=-\sum_{k=1}^{K}\frac{|D_{i}|}{|D|}\textrm{log}_{2}\frac{|D_{i}|}{|D|}

二、决策树生成

ID3算法

(1)如果D中所有实例都属于同一类C_{k},则该结点标记为C_{k}

(2)如果此时A=\o,或信息增益均小于阈值则将D中结点实例最多那类标记为该结点类别;

(3)对D中各特征(信息增益算法)计算特征的信息增益,选择信息增益最大的特征作为结点特征,并根据特征不同取值构建子结点。

(4)否则对于A_{\texttt{g}}的每个特征值a_{i},按照A_{\texttt{g}}=a_{i}将D分割成若干非空子集D_{i},每一集合根据其实例最多的类别标记该集合对应的结点的类别。

(5)对第i个结点,以D_{i}为训练集,A-{A_{\texttt{g}}}为特征集,对子结点递归地调用(1)~(5),不断返回子树T_{i},构建决策树。

易见,ID3算法只有树生成,所以该算法生成的树容易过拟合。很容易联系到如果选择用信息增益比来选择特征,必然过拟合的问题将得到改善,这便是C4.5算法,只需将ID3中用到信息增益地方改成信息增益比即可。

三、决策树剪枝

为了解决在训练时造成的过拟合,即在训练时过多考虑如何提高训练准确率,导致构造的树过于复杂,而实际验证分类并不理想。因此需要对生成的树简化,即剪枝,从已生成的决策树中裁掉一些子树或叶结点,并将其父结点或根结点作为新的叶结点。这里借助极小化决策树整体的损失函数或代价函数实现。具体损失函数表示成:

                                                               C_{\alpha }(T)=\sum_{t=1}^{|T|}N_{t}H_{t}(T)+\alpha|T|=\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}\texttt{log}\frac{N_{tk}}{N_{t}}+\alpha|T|

其中,T代表树结点结合|T|即取结点数目反映树复杂程度。T的叶结点t有N_{t}个样本,其中k类的样本点有N_{tk}个。H_{t}(T)即结点t上的经验熵。\alpha为学习参数,\alpha越大,促使选择的模型越简单,反之,\alpha越小,则促使最后选择的模型越复杂。显然\alpha=0时,则不考虑模型的复杂度,只考虑模型的拟合程度。由此对于给定的\alpha,选择损失最小的模型即可得到损失最小的子树。

树的剪枝算法

(1)计算每个结点的经验熵。

(2)递归地从树的叶结点向上缩。计算回缩之后的整体树对应的损失C_{\alpha}(T_{A})和回缩前的损失C_{\alpha}(T_{B}),如果C_{\alpha}(T_{A})\leqslantC_{\alpha}(T_{B})则进行剪枝。即将父结点变为新的叶结点。

(3)返回(2),直至不能继续为止,得到损失函数最小的子树T_{\alpha}

CART算法

CART算法时在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。

1、回归树生成,利用平方误差最小化准则进行特征选择,最小二乘回归树??生成算法得到回归树。

2、分类树的生成,利用基尼指数最小化准则,CART生成算法和CART剪枝,最终得到决策树。

对于基尼指数表达的意义跟熵很近似,计算要稍微简单些:

                                                                               Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^2

Gini(D)表示集合D的不确定性,其基尼指数为  (k即D中数据的类别):

                                                                                      Gini(D)=1-\sum_{k=1}^{K}\left ( \frac{|C_{k}|}{|D|} \right )^2

如果对于样本集D根据特征A关于是否取a值这一点作为划分D依据,最后得到的数据集为D_{1},D_{2}两部分。则在特征A条件下的D基尼指数定义成:

                                                                 Gini(D,A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2})

CART生成算法

(1)设结点的训练集为D,计算现有特征取尽所有可能值的基尼指数。

(2)对于所有的特征A及其可能取得所有值中选择基尼指数最小得特征及其对应的特征值作为最优特征和切分点,现将数据分成集合即两个子结点。

(3)对两个结点递归地调用上述两步,直至满足条件停止。

(4)生成CART决策树。

CART剪枝算法

(1)k=0,T=T_{0}

(2)\alpha=+\infty

(3)自下而上的各内部结点t计算C(T_{t})|T_{t}|,以及

                                                       \texttt{g}(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1}

                                                        \alpha=min(\alpha,\texttt{g}(t))

T_{t}表示以t为根结点的子树,C(T_{t})即训练数据的预测误差,|T_{t}|即该子树结点数目。

(4)\texttt{g}(t)=\alpha的内部结点t进行剪枝,并对叶结点t以多数 表决法决定其类。

(5)k=k+1,\alpha_{k}=\alpha,T_{k}=T

(6)如果T_{k}不是根结点及两个叶结点构成的树,则转步骤(3),否则T_{k}=T_{n}

(7)采用交叉验证法(独立验证数据集测试子树序列中各子树的基尼指数)在子树序列T_{0},T_{1},T_{2}, \cdots ,T_{n}中选择最优子树T_{\alpha}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值