决策树算法梳理


1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

  • 熵是一个随机变量不确定性的度量,对于一个离散型随机变量X~P(x)其离散熵可以定义为:
    在这里插入图片描述
    其中: 花体x 表示为包含所有小 x元素的集合,log以2为底。
    一个随机变量的熵越大,意味着不确定性越大,那么也就是说,该随机变量包含的信息量越大。熵是平均意义上对随机变量的编码长度。
    在这里插入图片描述
    必然是事件熵为0,并不含有不确定性,也就是说,必然事件不含有信息量。
  • 联合熵
    联合熵就是度量一个联合分布的随机系统的不确定度,下面给出两个随机变量的联合熵的定义:
    在这里插入图片描述
    容易知道,联合熵的物理意义就是,观察一个多个随机变量的随机系统获得的信息量,为了进一步剖析联合熵,我们对其的进行数学推导如下:
    在这里插入图片描述
  • 条件熵
    条件熵物理意义为在得知某一确定信息的基础上获取另外一个信息时所获得的信息量。
    在这里插入图片描述
  • 信息增益
    信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好,在概率中定义为:待分类的集合的熵和选定某个特征的条件熵之差(这里只的是经验熵或经验条件熵,由于真正的熵并不知道,是根据样本计算出来的),公式如下:
    在这里插入图片描述
  • 基尼不纯度
    将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。大概意思是 一个随机事件变成它的对立事件的概率。
    (1)基尼不纯度越小,纯度越高,集合的有序程度越高,分类的效果越好;
    (2)基尼不纯度为 0 时,表示集合类别一致;
    (3)基尼不纯度最高(纯度最低)时,f1=f2=…=fm=1m。
    在这里插入图片描述

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

决策树是一种依托决策而建立起来的一种树。在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值。决策树仅有单一输出,如果有多个输出,可以分别建立独立的决策树以处理不同的输出。

https://blog.csdn.net/u014688145/article/details/53212112

  • ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树,ID3相当于用极大似然法进行概率模型的选择。

输入:训练数据集D,特征集A,阈值ϵ 
  输出:决策树T 
  (1) 若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T; 
  (2) 若A=∅,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T; 
  (3) 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag; 
  (4) 如果Ag的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T; 
  (5) 否则,对Ag的每一个可能值ai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T; 
  (6) 对第i个子子结点,以Di为训练集,以 A−{Ag}为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti
  • C4.5
  • C4.5算法其实与ID3类似,主要的不同就是C4.5使用信息增益比来选择特征
输入:训练数据集D,特征集A,阈值ϵϵ 
  输出:决策树T 
  (1) 若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T; 
  (2) 若A=∅,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T; 
  (3) 否则,计算A中各特征对D的信息增益比,选择信息增益比最大的特征Ag; 
  (4) 如果Ag的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T; 
  (5) 否则,对Ag的每一个可能值aiai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T; 
  (6) 对第i个子子结点,以Di为训练集,以 A−{Ag}为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti
  • CART

CART,又名分类回归树,是在ID3的基础上进行优化的决策树
(1)CART既能是分类树,又能是分类树;
(2)当CART是分类树时,采用GINI值作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据;
(3)CART是一棵二叉树
CART算法有两步:
决策树生成和剪枝。
决策树生成:递归地构建二叉决策树的过程,基于训练数据集生成决策树,生成的决策树要尽量大;
自上而下从根开始建立节点,在每个节点处要选择一个最好的属性来分裂,使得子节点中的训练集尽量的纯。
不同的算法使用不同的指标来定义"最好":
分类问题,可以选择GINI,双化或有序双化;
回归问题,可以使用最小二乘偏差(LSD)或最小绝对偏差(LAD)。
决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。
这里用代价复杂度剪枝 Cost-Complexity Pruning(CCP)

分类树的生成
(1)对每个特征 A,对它的所有可能取值 a,将数据集分为 A=a,和 A!=a 两个子集,计算集合 D 的基尼指数:
在这里插入图片描述
(2)遍历所有的特征 A,计算其所有可能取值 a 的基尼指数,选择 D 的基尼指数最小值对应的特征及切分点作为最优的划分,将数据分为两个子集。
(3)对上述两个子节点递归调用步骤(1)(2), 直到满足停止条件。
(4)生成 CART 决策树。
其中 GINI 指数是一种不等性度量;是介于 0~1 之间的数,0-完全相等,1-完全不相等;总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。
定义:

分类问题中,假设有 K 个类,样本属于第 k 类的概率为 pk,则概率分布的基尼指数为:在这里插入图片描述
样本集合 D 的基尼指数为:
在这里插入图片描述
其中 Ck 为数据集 D 中属于第 k 类的样本子集。
如果数据集 D 根据特征 A 在某一取值 a 上进行分割,得到 D1 ,D2 两部分后,那么在特征 A 下集合 D 的基尼指数为:
在这里插入图片描述
其中算法的停止条件有:
1、节点中的样本个数小于预定阈值
2、样本集的Gini系数小于预定阈值(此时样本基本属于同一类)
3、或没有更多特征


3. 回归树原理

回归树模型表示为:
在这里插入图片描述
其中,数据空间被划分成了 R1~Rm 单元,每个单元上有一个固定的输出值 cm。这样就可以计算模型输出值与实际值的误差:
在这里插入图片描述
我们希望每个单元上的 cm,可以使得这个平方误差最小化,易知当 cm 为相应单元上的所有实际值的均值时,可以达到最优:
在这里插入图片描述
那么如何生成这些单元划分?
假设,我们选择变量 xj 为切分变量,它的取值 s 为切分点,那么就会得到两个区域:
在这里插入图片描述
当 j 和 s 固定时,我们要找到两个区域的代表值 c1,c2 使各自区间上的平方差最小,
在这里插入图片描述
前面已经知道 c1,c2 为区间上的平均,
在这里插入图片描述
那么对固定的 j 只需要找到最优的 s,然后通过遍历所有的变量,我们可以找到最优的 j,这样我们就可以得到最优对(j,s),并得到两个区间。
上述过程表示的算法步骤为:

在这里插入图片描述
即:
(1)考虑数据集 D 上的所有特征 j,遍历每一个特征下所有可能的取值或者切分点 s,将数据集 D 划分成两部分 D1 和 D2
(2)分别计算上述两个子集的平方误差和,选择最小的平方误差对应的特征与分割点,生成两个子节点。
(3)对上述两个子节点递归调用步骤(1)(2),直到满足停止条件。


4. 决策树防止过拟合手段

通常过拟合由以下三种原因产生:1. 假设过于复杂;2. 数据存在很多噪音;3. 数据规模太小。
过拟合的解决方法通常有:1. early stopping;2. 数据集扩增;3. 正则化;4. Dropout。

Early stopping
对模型的训练过程就是对模型参数的进行学习更新的过程。参数学习的过程中往往会用到一些迭代算法,比如梯度下降法。Early stopping的目的就是在迭代次数还未到设定最大迭代次数时停止迭代防止过拟合的产生。
Early stopping的具体方法是在每一轮的迭代过程进行交叉验证,如果验证集的精度相较上一次没有得到提升,那么就停止迭代。这种方法的思想非常直接,因为当精度都不再提高了,那么训练就没有意义了。但是也存在这样一种情况,当前代的交叉验证精度下降了,但是下一代又提升了,所以不能根据一两次的精度下降就判定不会再提高。一般的做法是,在迭代过程中,记录到目前为止最好的验证精度,如果连续十代没有提升精度,那么就认为精度不会再提高,此时便可以停止迭代。

数据集扩增
数据挖掘领域流传着这样一句话,更多的数据往往胜过一个更好的模型,因为我们的模型是通过大量的数据训练得来的,然后通过这个模型对将来的数据进行拟合。因此我们可以假设这些数据是独立同分布的,通常获取数据有以下方法:

  1. 从数据源头采集更多数据
  2. 复制原有的数据并加上随机噪声
  3. 重采样
  4. 根据当前估计数据分布参数,使用该分布产生更多数据

正则化方法
正则化是指在优化目标函数或代价函数是,在目标函数后面加上一个正则项。正则项通常有L1正则项和L2正则项。
L1正则是基于L1范数和项,即参数的绝对值和参数的积项
L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项

Dropout
正则是通过在代价函数后面加上正则项来防止模型过拟合。在神经网络中,有一种方法是通过修改自身结构来实现的,叫做Dropout。这是对网络训练的一种技巧。


5. 模型评估

分类树模型:采用通用的分类模型评估指标
Accuracy
Precision
Recall
F1-score
ROC曲线和AUC
PR曲线

回归树模型:采用通用的回归模型评估指标
MSE
MAE
R^2


6. sklearn参数详解,Python绘制决策树

sklern中使用sklearn.tree.DecisionTreeClassifier类来实现决策树分类算法。其实几个典型的参数解释如下
DecisionTreeClassifier(criterion=“gini”,splitter=“best”,max_features = None,
max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.,max_features=None,random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.,min_impurity_split=None,class_weight=None,presort=False)
1.特征选择标准(criterion):‘gini’或者’entropy’选择基尼指数或者信息增益,根据选用 的模型选择
2.划分点选择标准(splitter):‘best’或者’random’,前者在特征的所有划分点中找出最优的划分点,后者是随机在部分划分点中找出局部最优的划分点,‘best’适合样本量小,而’random’适合样本量大
3.划分考虑最大特征数(max_features):默认None,以为考虑所有特征数,如果是‘log2’意味着划分最多考虑log2(N),如果是’sqrt’或者’auto’则意味着划分最多N−−√N \sqrt{N}N​
4.决策树最大深度(max_depth):特征少时默认,样本量大,特征多时可以限制在10~100之间
5.内部节点再划分所需最小样本数(min_samples_split):默认是2,如果样本量小,默认即可。样本量数量级非常大,增大数值
6.叶子节点最少样本数(min_weight_fraction_leaf):默认是1, 可以输入最少样本数的整数,或者最少样本数占样本总数百分比
7.分类特征值最大数量(max_features):‘默认使用全部特征值
8.最大节点数(max_leaf_nodes):默认None
9.节点划分最小不纯度下降(min_impurity_decrease) 如果该分裂导致杂质的减少大于或等于该值,则将分裂节点。
10.节点划分最小不纯度(min_impurity_split) 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点
11.随机发生器种子(random_state):None表示随机数字发生器np.random采用的RandomState instance, 如果是一个整数值,random_state 是随机数字发生器的种子
12.是否预分类数据(presort):默认False,是否预分类数据以加速训练时最好分类的查找,True时会减慢训练过程


参考
[1][https://zhuanlan.zhihu.com/p/36192699]
[2][https://www.cnblogs.com/fantasy01/p/4581803.html]
[3][https://blog.csdn.net/u014688145/article/details/53212112]
[4][https://www.cnblogs.com/yonghao/p/5135386.html]
[5][https://www.jianshu.com/p/b90a9ce05b28]
[6][https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/82504619]
[7][https://blog.csdn.net/shubingzhuoxue/article/details/80598656]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值