概述
本文为本人另两篇博客机器学习/计算机视觉(cv)实习面试资料整理(附字节、阿里、腾讯、美团面经)、机器学习知识点整理以及集成树知识点概括下的子内容,有需要的朋友按需自取~
另:本文只是知识点的整理概括,更为详细的可以参考我每个部分给出的链接~
目录
- 决策树
- 总结
- 概述
- 决策树的三种构建
- ID3算法
- C4.5算法
- CART树
- 步骤
- 分类树
- 回归树
- 信息增益 vs 信息增益比
- Gini 指数 vs 熵
- 剪枝
- 缺失值的处理
- 抛弃缺失值
- 补充缺失值
- 概率化缺失值
- 补充
- 决策树算法
- 特点
- 优点
- 缺点
- 随机森林
- 概述
- 随机采样Bootstrap
- Bagging的生成方法
- Bagging和RF关系
- 优缺点
- 优点
- 缺点
- 特征选择
- 损失函数
- 防止随机森林过拟合
- RF的参数及调参
决策树
详细介绍参考机器学习实战(三)——决策树和随机森林和决策树
总结
- 决策树是一种基本的分类与回归方法,学习通常包含三个步骤:特征选择、决策树的生成和决策树的剪枝;
- 决策树学习的目标:根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类;
- 决策树学习的本质:从训练集中归纳出一组分类规则,或者说是由训练数据集估计条件概率模型;
- 决策树学习的损失函数:正则化的极大似然函数;
- 决策树学习的测试:最小化损失函数;
- 决策树学习的目标:在损失函数的意义下,选择最优决策树的问题;
- 决策树原理和问答猜测结果游戏相似,根据一系列数据,然后给出游戏的答案;
- 过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化;
概述
- 构造决策树的基本思想:随着树深度的增加,节点的熵迅速地降低。熵降低的速度(引入信息增益和信息增益比的概念)越快越好,以便得到一棵高度最矮的决策树;
- 本质是一颗由多个判断节点组成的树。决策树算法的核心是通过对数据的学习,选定判断节点,构造一颗合适的决策树;
- 树模型不需要做归一化:
归一化的目的是为了加快梯度下降法的收敛速度,但是决策树模型不需要计算梯度;
树模型只考虑特征的划分界限,而不需要考虑特征的值范围; - 决策树的关键是选择最优划分属性;
- 一个属性会有多个取值,根据这个属性的不同取值将输入的数据划分为多个样本集合,一个取值对应一个分支集合,使得每个取值分支集合中的样本尽可能属于同一类别,即分支集合的纯度越高;
决策树的三种构建
ID3算法
- 信息增益 ID3:ID3算法的核心是在决策树各个结点上对应信息增益准则选择特征,递归地构建决策树;
1)从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征;
2)由该特征的不同取值建立子节点,再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止;
3)最后得到一个决策树; - 相当于用极大似然法进行概率模型的选择;
- ID3 仅仅适用于二分类问题。ID3 仅仅能够处理离散属性;
C4.5算法
- 增益率 C4.5:与ID3算法相似,但是做了改进,将信息增益比作为选择特征的标准,选最大;为了避免ID3算法偏向于选择可取值数目较多的属性,对可取值较少的属性有所偏好;克服了 ID3 仅仅能够处理离散属性的问题;
- C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点;
CART树
详细介绍参考决策树学习笔记(三):CART算法,决策树总结和决策树之CART(分类回归树)详解
- 基尼指数 CART树:全称是分类与回归树;
- 使用 Gini 指数较小的作为选择特征的准则;
- CART 生成的树必须是二叉树;
- 数据对象的属性特征为离散型或连续型,并不是区别分类树与回归树的标准;
- 作为分类决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本所属类别最多的那一类(即叶子节点中的样本可能不是属于同一个类别,则多数为主);作为回归决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本的均值;
- CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布;
步骤
CART算法由以下两步组成:决策树生成和剪枝;
- 决策树生成:递归地构建二叉决策树的过程,基于训练数据集生成决策树,生成的决策树要尽量大;
- CART决策树的生成就是递归地构建二叉决策树的过程;
- CART决策树既可以用于分类也可以用于回归;
- 自上而下从根开始建立节点,在每个节点处要选择一个最好的属性来分裂,使得子节点中的训练集尽量的纯;
- 不同的算法使用不同的指标来定义"最好":
- 分类问题,可以选择GINI,双化或有序双化;
- 回归问题,可以使用最小二乘偏差(LSD)或最小绝对偏差(LAD);
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准;
- 这里用代价复杂度剪枝 Cost-Complexity Pruning(CCP)
分类树
- 采用基尼指数选择特征;叶子节点中概率最大的类别作为当前节点的预测类别;
- 如果特征值是连续值:CART的处理思想与C4.5是相同的,即将连续特征值离散化。唯一不同的地方是度量的标准不一样,CART采用基尼指数,而C4.5采用信息增益比;
- 特征a有连续值m个,从小到大排列。m个数值就有m-1个切分点,分别使用每个切分点把连续数值离散划分成两类,将节点数据集按照划分点分为D1和D2子集,然后计算每个划分点下对应的基尼指数,对比所有基尼指数,选择值最小的一个作为最终的特征划分;
- CART与ID3,C4.5处理离散属性不同的是:如果当前节点为连续属性,则该属性(剩余的属性值)后面还可以参与子节点的产生选择过程;
- 如果特征值是离散值:CART的处理思想与C4.5稍微所有不同。如果离散特征值多于两个,那么C4.5会在节点上根据特征值划分出多叉树。但是CART则不同,无论离散特征值有几个,在节点上都划分成二叉树;
- 假设特征a有m个离散值。分类标准是:每一次将其中一个特征分为一类,其它非该特征分为另外一类。依照这个标准遍历所有的分类情况,计算每种分类下的基尼指数,最后选择值最小的一个作为最终的特征划分;
- 最后收集所有特征的最佳切分点,进行对比,选出最好的特征以及特征划分点;
回归树
- 采用RSS残差平方和选择特征;将叶子节点中样本的y均值作为回归的预测值;
- 回归树的预测变量是连续值,比如预测一个人的年龄,又或者预测季度的销售额等等;
- 回归树在选择特征的度量标准和决策树建立后预测的方式上也存在不同;
- 计算所有的特征以及相应所有切分点下的残差平方和,找到一组(特征j,切分点s),以满足:分别最小化左子树和右子树的残差平方和,并在此基础上再次最小化二者之和;
- 采用的办法是后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略;
- CART剪枝与C4.5有所不同,C4.5剪枝算法是人为给定一个alpha,然后从叶结点逐渐向根节点回溯,然而CART多了一个遍历alpha的步骤,从0~+无穷;
信息增益 vs 信息增益比
之所以引入了信息增益比,是由于信息增益的一个缺点。那就是:信息增益总是偏向于选择取值较多的属性。信息增益比在此基础上增加了一个罚项,解决了这个问题。
Gini 指数 vs 熵
既然这两个都可以表示数据的不确定性,不纯度。那么这两个有什么区别那?
- Gini 指数的计算不需要对数运算,更加高效;
- Gini 指数更偏向于连续属性,熵更偏向于离散属性;
剪枝
-
用以缓解过拟合;
-
预剪枝:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分并将当前结点标记为叶节点,预留一部分数据作为验证集(留出法),判断性能是否提升;可能会带来欠拟合的风险;
-
后剪枝:先从训练集中生成一颗完整的决策树,然后自底向上对每个非叶节点进行观察,若将该节点替换为叶结点能带来泛化性能的提升,则将该子树替换为叶结点;开销较大;
-
极小化决策树整体的损失函数或代价函数来实现;
-
损失函数认为对于每个分类终点(叶子节点)的不确定性程度就是分类的损失因子,而叶子节点的个数是模型的复杂程度;
-
决策树的生成只是考虑通过提高信息增益对训练数据进行更好的拟合,而决策树剪枝通过优化损失函数还考虑了减小模型复杂度;
缺失值的处理
抛弃缺失值
抛弃极少量的缺失值的样本对决策树的创建影响不是太大。但是如果属性缺失值较多或是关键属性值缺失,创建的决策树将是不完全的,同时可能给用户造成知识上的大量错误信息,所以抛弃缺失值一般不采用。只有在数据库具有极少量的缺失值同时缺失值不是关键的属性值时,且为了加快创建决策树的速度,才采用抛弃属性缺失值的方式创建决策树。
补充缺失值
缺失值较少时按照我们上面的补充规则是可行的。但如果数据库的数据较大,缺失值较多(当然,这样获取的数据库在现实中使用的意义已不大,同时在信息获取方面基本不会出现这样的数据库),这样根据填充后的数据库创建的决策树可能和根据正确值创建的决策树有很大变化。
概率化缺失值
对缺失值的样本赋予该属性所有属性值的概率分布,即将缺失值按照其所在属性已知值的相对概率分布来创建决策树。用系数F进行合理的修正计算的信息量,F=数据库中缺失值所在的属性值样本数量去掉缺失值样本数量/数据库中样本数量的总和,即F表示所给属性具有已知值样本的概率。
补充
- 在选择分裂属性的时候,训练样本存在缺失值,如何处理?
假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵; - 分类属性选择完成,对训练样本分类,发现属性缺失怎么办?
比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数; - 训练完成,给测试集样本分类,有缺失值怎么办?
这时候,就不能按比例分配了,因为你必须给该样本一个确定的label,而不是薛定谔的label。这时候根据投票来确定,或者填充缺失值;
注:该部分来自知乎某回答,但是找不到出处了,如果有什么问题请联系我~
决策树算法
决策树算法主要包括三个部分:特征选择、树的生成、树的剪枝。常用算法有 ID3、C4.5、CART:
- 特征选择:特征选择的目的是选取能够对训练集分类的特征。特征选择的关键是准则:信息增益、信息增益比、Gini 指数;
- 决策树的生成:通常是利用信息增益最大、信息增益比最大、Gini 指数最小作为特征选择的准则。从根节点开始,递归的生成决策树。相当于是不断选取局部最优特征,或将训练集分割为基本能够正确分类的子集;
- 决策树的剪枝:决策树的剪枝是为了防止树的过拟合,增强其泛化能力;包括预剪枝和后剪枝;
特点
- 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据;
- 缺点:可能会产生过度匹配的问题;
- 适用数据类型:数值型和标称型;
优点
- 易于理解和解释,决策树可以可视化;
- 几乎不需要数据预处理。其他方法经常需要数据标准化,创建虚拟变量和删除缺失值。决策树还不支持缺失值;
- 使用树的花费(例如预测数据)是训练数据点(data points)数量的对数;
- 可以同时处理数值变量和分类变量。其他方法大都适用于分析一种变量的集合;
- 可以处理多值输出变量问题;
- 使用白盒模型。如果一个情况被观察到,使用逻辑判断容易表示这种规则。相反,如果是黑盒模型(例如人工神经网络),结果会非常难解释;
- 即使对真实模型来说,假设无效的情况下,也可以较好的适用。
缺点
- 决策树学习可能创建一个过于复杂的树,并不能很好的预测数据。也就是过拟合。修剪机制(现在不支持),设置一个叶子节点需要的最小样本数量,或者数的最大深度,可以避免过拟合;
- 决策树可能是不稳定的,因为即使非常小的变异,可能会产生一颗完全不同的树。这个问题通过decision trees with an ensemble来缓解;
- 学习一颗最优的决策树是一个NP-完全问题under several aspects of optimality and even for simple concepts。因此,传统决策树算法基于启发式算法,例如贪婪算法,即每个节点创建最优决策。这些算法不能产生一个全家最优的决策树。对样本和特征随机抽样可以降低整体效果偏差;
- 概念难以学习,因为决策树没有很好的解释他们,例如,XOR, parity or multiplexer problems;
- 如果某些分类占优势,决策树将会创建一棵有偏差的树。因此,建议在训练之前,先抽样使样本均衡;
随机森林
详细介绍参考随机森林。
概述
- bagging拓展;鉴于决策树容易过拟合的缺点,随机森林采用多个决策树的投票机制来改善决策树;
- 随机森林使用了m棵决策树,那么就需要产生m个一定数量的样本集来训练每一棵树,如果用全样本去训练m棵决策树显然是不可取的,全样本训练忽视了局部样本的规律,对于模型的泛化能力是有害的;
随机采样Bootstrap
- 原始训练集的样本数为n, 则每个采样集的样本数量也是n, 但是样本内容不同,所以某一个样本可能被多次采样到,某一些样本没有机会被采样到;
- 产生n个样本的方法采用Bootstraping法,这是一种有放回的抽样方法,产生n个样本, 然后去重;
- 实际上,在bagging的每轮采样中,训练集中大约有**36.8%**的数据没有被采样集采集;剩下的做验证集;
- 而最终结果采用Bagging的策略来获得,即多数投票机制;
Bagging的生成方法
- 从样本集中通过重采样的方式产生n个样本;
- 假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式获得最佳分割点;
- 重复m次,产生m棵决策树;
- 多数投票机制来进行预测;
Bagging和RF关系
- Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系;
- Random Forest(随机森林)是Bagging的扩展变体,它在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF包括四个部分:
1、随机选择样本(放回抽样, 行抽样);
2、构建决策树(CART树);
3、随机选择特征(列抽样);
4、随机森林投票(平均); - 随机选择样本和Bagging相同,随机选择特征是指在树的构建中,会从样本集的特征集合中随机选择部分特征,然后再从这个子集中选择最优的属性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型;
- 在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法;
- RF不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,可以在内部进行评估;
- RF和Bagging对比:Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集;
优缺点
优点
- 训练可以高度并行化,对于大数据时代的大样本训练速度有优势;
- 由于随机选择特征时只考虑特征子集,因此样本特征维度很高时仍然高效;
- 训练后,可以给出各个特征的重要性;
- 由于采用了随机采样,方差小,泛化能力强;
- 相比Boosting,实现简单;
缺点
- 在噪声较大的分类或者回归问题上会过拟合;
特征选择
- 基于选择频率, 即特征在构建随机森林时被选为最优特征划分的次数;
- 基于基尼不纯度,根据特征选择后降低的gini不纯度来确定
存在问题:偏向于选择具有较多类别的特征;
当存在相关特征时,一个特征被选择后,与其相关的其他特征的重要度则会变得很低; - 准确率:每次选择一列特征,将该特征的所有数值打乱后训练模型,查看模型下降的准确度;
损失函数
- 分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益;
- 回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae;
参考决策树的损失函数即可:CART分类树建立算法的具体流程和CART回归树建立算法的具体流程
防止随机森林过拟合
- 增加树的数量;
- 增加叶子结点的数据数量;
- bagging算法中,基模型的期望与整体期望一致,参考就理论角度论证Bagging、Boosting的方差偏差问题;
- 随着基模型数(m)的增多,整体模型的方差减少,从而防止过拟合的能力增强,模型的准确度得到提高;
RF的参数及调参
要调整的参数主要是 n_estimators和max_features
- n_estimators是森林里树的数量,通常数量越大,效果越好,但是计算时间也会随之增加。 此外要注意,当树的数量超过一个临界值之后,算法的效果并不会很显著地变好;
- max_features是分割节点时考虑的特征的随机子集的大小。 这个值越低,方差减小得越多,但是偏差的增大也越多:
回归:max_features = n_features;
分类:max_features = sqrt(n_features); - 其他参数:
class_weight也可以调整正负样本的权重;
max_depth = None 和 min_samples_split = 2 结合,为不限制生成一个不修剪的完全树;
本人关于树的其他文章:
- 集成树知识点概括
- AdaBoost算法概述
- GBDT(梯度提升树)算法概述
- XGBoost算法概述
- LightGBM算法概述
- 集成(模型)融合方法总结
最后
以上就是自信小猫咪为你收集整理的决策树、随机森林知识点概括决策树随机森林的全部内容,希望文章能够帮你解决决策树、随机森林知识点概括决策树随机森林所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复