统计学习方法学习笔记-05-决策树
作者:互联网
首先介绍决策树的基本概念,然后通过\(ID3\)和\(C4.5\)介绍特征的选择、决策树的生成以及决策树的修剪,最后介绍\(CART\)算法
决策树模型与学习
- 分类决策树模型的树结构有两种结点,内部结点表示一个特征或属性,叶结点表示一个类;
- 决策树所有的从根节点到叶结点的路径构成if-else规则集,这些规则是互斥且完备的;
- 决策树学习算法包含特征选择、决策树的生成和决策树的修剪
- 从可能的决策树中直接选取最优决策树是\(NP\)完全问题,现实中采用启发式方法学习次优的决策树
特征选择
如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的,特征选择在于选取对训练数据具有分类能力的特征,特征选择的准则一般是信息增益或信息增益比
信息增益
- 设\(X\)是一个取有限个值的离散随机变量,其概率分布为\(P(X = x_i) = p_i,i = 1,2,\cdots,n\),则随机变量\(X\)的熵为:
熵越大,随机变量的不确定性越大,\(0 \leq H(p) \leq \log n\)
- 条件熵:\(H(Y|X)\)表示在已知随机变量\(X\)的条件下随机变量\(Y\)的不确定性,定义为\(X\)给定条件下\(Y\)的条件概率分布的熵对\(X\)的数学期望
这里\(p_i = P(X = x_i),i = 1,2,\cdots,n\)
- 信息增益表示得知特征\(X\)的信息而使得类\(Y\)的信息的不确定性减少的程度,特征\(A\)对训练数据集\(D\)的信息增益\(g(D,A)\),定义为集合\(D\)的经验熵\(H(D)\)与特征\(A\)给定条件下\(D\)的经验条件熵\(H(D|A)\)之差:
信息增益的算法
输入:训练数据集\(D\)和特征\(A\)
输出:特征\(A\)对训练数据集\(D\)的信息增益\(g(D,A)\)
设训练数据集为\(D\),\(|D|\)表示其样本容量,即样本个数,设有\(K\)个类\(C_k,k = 1,2,\cdots,K,|C_k|\)为属于类\(C_k\)的样本个数,\(\sum_{k = 1}^K|C_k| = |D|\),设特征\(A\)有\(n\)个不同的取值\(\{a_1,a_2,\cdots,a_n\}\),根据特征\(A\)的取值将\(D\)划分为\(n\)个子集\(D_1,D_2,\cdots,D_n\),\(|D_i|\)为\(D_i\)的样本个数,\(\sum_{i = 1}^n|D_i| = |D|\),记子集\(D_i\)中属于类\(C_k\)的样本的集合为\(D_{ik}\)即\(D_{ik} = D_i \bigcap C_k,|D_{ik}|\)为\(D_{ik}\)的样本个数
- 计算数据集\(D\)的经验熵\(H(D)\)
- 计算特征\(A\)对数据集\(D\)的经验条件熵\(H(D|A)\)
- 计算信息增益
信息增益比
目的:以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比来校正
- 特征\(A\)对训练数据集\(D\)的信息增益比\(g_R(D,A)\)定义为其信息增益\(g(D,A)\)与训练数据集\(D\)关于特征\(A\)的值的熵\(H_A(D)\)之比
决策树的生成
ID3算法
输入:训练数据集\(D\),特征集\(A\),阈值\(\varepsilon\)
输出:决策树\(T\)
- 若\(D\)中所有实例属于同一类\(C_k\),则\(T\)为单结点树,并将类\(C_k\)作为该结点的类标记,返回\(T\);
- 若\(A = \emptyset\),则\(T\)为单结点树,并将\(D\)中实例数最大的类\(C_k\)作为该结点的类标记,返回\(T\);
- 否则计算各特征对\(D\)的信息增益,选择信息增益最大的特征\(A_g\)
- 如果\(A_g\)的信息增益小于阈值\(\varepsilon\),则置\(T\)为单结点树,并将\(D\)中实例数最大的类\(C_k\)作为该结点的类标记,返回\(T\);
- 否则,对\(A_g\)的每一个可能取值\(a_i\),依\(A_g = a_i\)将\(D\)分割为非空子集\(D_i\),将\(D_i\)中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树\(T\),返回\(T\);
- 对第\(i\)个子结点,以\(D_i\)为训练集,以\(A-\{A_g\}\)为特征集,递归的调用第一步到第五步,得到子树\(T_i\),返回\(T_i\)
C4.5生成算法
输入:训练数据集\(D\),特征集\(A\),阈值\(\varepsilon\)
输出:决策树\(T\)
- 若\(D\)中所有实例属于同一类\(C_k\),则\(T\)为单结点树,并将类\(C_k\)作为该结点的类标记,返回\(T\);
- 若\(A = \emptyset\),则\(T\)为单结点树,并将\(D\)中实例数最大的类\(C_k\)作为该结点的类标记,返回\(T\);
- 否则计算各特征对\(D\)的信息增益比,选择信息增益比最大的特征\(A_g\)
- 如果\(A_g\)的信息增益比小于阈值\(\varepsilon\),则置\(T\)为单结点树,并将\(D\)中实例数最大的类\(C_k\)作为该结点的类标记,返回\(T\);
- 否则,对\(A_g\)的每一个可能取值\(a_i\),依\(A_g = a_i\)将\(D\)分割为非空子集\(D_i\),将\(D_i\)中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树\(T\),返回\(T\);
- 对第\(i\)个子结点,以\(D_i\)为训练集,以\(A-\{A_g\}\)为特征集,递归的调用第一步到第五步,得到子树\(T_i\),返回\(T_i\)
决策树的剪枝
目的:解决过拟合问题
剪枝时的损失函数
设树\(T\)的叶结点个数为\(|T|\),\(t\)是树\(T\)的叶结点,该叶结点有\(N_t\)个样本点,其中\(k\)类的样本点有\(N_{tk}\)个,\(k = 1,2,\cdots,K\),\(H_t(T)\)为叶结点\(t\)上的经验熵,\(\alpha \geq 0\)为参数,则决策树学习的损失函数可以定义为:
\[C_\alpha(T) = \sum_{t = 1}^{|T|}N_tH_t(T) + \alpha|T| \]其中经验熵为:
\[H_t(T) = -\sum_k\frac{N_{tk}}{N_t}\log \frac{N_{tk}}{N_t} \]将式子左边记为:
\[C(T) = \sum_{t = 1}^{|T|}N_tH_t(T) = -\sum_{t = 1}^{|T|}\sum_{k = 1}^KN_{tk} \log \frac{N_{tk}}{N_t} \]有:
\[C_\alpha(T) = C(T) + \alpha|T| \]\(C(T)\)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,\(|T|\)表示模型复杂度,参数\(\alpha\)控制两者之间的影响,较大促使选择较简单的模型,较小促使选择较复杂的模型
树的剪枝算法
当\(\alpha\)确定时,选择损失函数最小的模型
输入:生成算法产生的整个树\(T\),参数\(\alpha\);
输出:修剪后的子树\(T_\alpha\)
- 计算每个结点的经验熵
- 递归的从树的叶结点向上回缩,设一组叶结点回缩到其父结点之前与之后的整体树分别为\(T_B\)与\(T_A\),其对应的损失函数分别是\(C_\alpha(T_B)\)与\(C_\alpha(T_A)\),如果\(C_\alpha(T_B) \leq C_\alpha(T_A)\),则进行剪枝,即将父结点变为新的叶结点。
- 返回第二步,直到不能继续为止,得到损失函数最小的子树\(T_{\alpha}\)
CART算法
classification and regression tree分类与回归树模型
- 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准;
回归树的生成
假设输入\(X\)与\(Y\)分别为输入和输出变量,并且\(Y\)是连续变量,给定训练数据集\(D = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\)
输入:训练数据集\(D\);
输出:回归树\(f(x)\),对应着将特征空间划分为\(M\)个单元\(R_1,R_2,\cdots,R_M\),在每个单元上有一个固定的输出值\(c_m\);
- 选择最优切分变量\(j\)与切分点\(s\),求解
选择第\(j\)个变量\(x^{(j)}\)和它取的值\(s\)作为切分变量和切分点,定义两个区域\(R_1(j,s) = \{x|x^{(j)} \leq s\},R_2(j,s) = \{x|x^{(j)} \gt s\}\),遍历变量\(j\),对固定的切分变量\(j\)扫描切分点\(s\),选择使上式达到最小值的对\((j,s)\)
- 用选定的对\((j,s)\)划分区域并决定相应的输出值:
- 继续对两个子区域调用步骤1,2,直到满足停止条件;
- 将输入空间划分为\(M\)个区域\(R_1,R_2,\cdots,R_M\),生成决策树:
分类树的生成
分类树使用基尼指数选择最优特征,同时决定该特征的最优二值切分点
基尼指数
分类问题中,假设有\(K\)个类,样本点属于第\(k\)类的概率为\(p_k\),则概率分布的基尼指数定义:
\[Gini(p) = \sum_{k = 1}^Kp_k(1-p_k) = 1 - \sum_{k = 1}^Kp_k^2 \]对于给定的样本集合\(D\),其基尼指数为:
\[Gini(D) = 1 - \sum_{k = 1}^K\left(\frac{|C_k|}{|D|}\right)^2 \]\(C_k\)是\(D\)中属于第\(k\)类的样本子集,\(K\)是类的个数。
如果样本集合\(D\)根据特征\(A\)是否取某一可能值\(a\)被分割成\(D_1\)和\(D_2\)两部分,即:
则在特征\(A\)的条件下,集合\(D\)的基尼指数定义为:
\[Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2) \]基尼指数\(Gini(D)\)表示集合\(D\)的不确定性,基尼指数\(Gini(D,A)\)表示经\(A = a\)分割后集合\(D\)的不确定性,基尼指数值越大,样本集合的不确定性越大。
CART生成算法
输入:训练数据集\(D\),停止计算的条件;
输出:CART决策树;
- 设节点的训练数据集为\(D\),计算现有特征对该数据集的基尼指数,此时,对每一个特征\(A\),对其可能取的每个值\(a\),根据样本点对\(A = a\)的测试为“是”或“否”将\(D\)分割成\(D_1\)和\(D_2\)两部分,计算\(A = a\)的基尼指数
- 在所有可能额特征\(A\)以及它们所有可能的切分点\(a\)中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现有结点生成两个子结点,将训练数据集依特征分配到两个子结点中去;
- 对两个子结点递归的调用1,2步,直至满足停止条件
- 生成CART决策树
算法停止计算的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
CART剪枝
首先从生成算法产生的决策树\(T_0\)底端开始不断剪枝,直到\(T_0\)的根结点,形成一个子树序列\(\{T_0,T_1,\cdots,T_n\}\),之后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树
剪枝,形成一个子树序列
- 子树的损失函数:
- 对整体树\(T_0\)开始剪枝,对\(T_0\)的任意内部结点\(t\),以\(t\)为单结点树的损失函数是:
- 以\(t\)为根结点的子树\(T_t\)的损失函数是:
- 当\(\alpha = 0\)时,有不等式:
- 当\(\alpha\)不断增大时,不等式反向
- 在\(\alpha = \frac{C(t) - C(T_t)}{|T_t| - 1}\)时,\(T_t\)和\(t\)有相同的损失函数值,也就是单个节点的损失函数值和一颗子树的损失函数值相同,所以这课子树可以被剪掉
- 对\(T_0\)中的每一个内部结点进行计算:
在\(T_0\)中减去\(g(t)\)最小的子树\(T_t\),将得到的子树作为\(T_1\),同时将最小的\(g(t)\)设为\(\alpha_1\),\(T_1\)为区间\([\alpha_1,\alpha_2)\)的最优子树,如此剪枝下去,不断增加\(\alpha\)的值,产生了新的区间。
在剪枝得到的子树序列中通过交叉验证选取最优子树
- 使用独立的验证数据集,测试子树序列\(T_0,T_1,\cdots,T_n\)中各棵子树的平方误差或基尼指数
- 平方误差或基尼指数最小的决策树被称为最优的决策树\(T_\alpha\)
- 子树和\(\alpha\)是一一对应的
CART剪枝算法
输入:CART算法生成的决策树\(T_0\)
输出:最优决策树\(T_\alpha\)
- 设\(k = 0,T = T_0\);
- 设\(\alpha = +\infty\);
- 自下而上的对各内部节点\(t\)计算:
- 对\(g(t) = \alpha\)的内部结点\(t\)进行剪枝,并对叶结点\(t\)以多数表决法决定其类,得到树\(T\);
- 设\(k = k + 1, \alpha_k = \alpha,T_k = T\);
- 如果\(T_k\)不是由根结点及两个叶结点构成的树,则回到第二步,否则\(T_k = T_n\);
- 采用交叉验证法在子树序列\(T_0,T_1,\cdots,T_n\)中选取最优子树\(T_\alpha\);
标签:结点,子树,frac,05,sum,学习,alpha,决策树 来源: https://www.cnblogs.com/eryoyo/p/16696571.html