2023年6月29日发(作者:)
决策树与神经⽹络⽅法的应⽤场景总结“最近在实验室项⽬的研究中,客户需要对⽐在决策场景中决策树与神经⽹络的对⽐,在查阅资料过程中,发现这篇发布于的⽂章写的很好,与⼤家⼀块分享”
这个问题可以从⼏个维度来分析。但先要说明决策树就是决策树,随机森林和xgboost的性能提升主要是来⾃于集成学习。所以,我们扩展⼀下题⽬把对⽐延伸到:1. 单棵决策树,如⽐较常见的C4.5等2. 以决策树为基模型的集成学习算法(Ensemble Tree),如随机森林,gradient boosting,和xgboost3. 神经⽹络,包括各种深度和结构的⽹络我的看法是,单棵决策树的⽤途已经⽐较有限了,已经基本被集成决策树代替。⽽决策树集成模型和神经⽹络有不同的使⽤场景,不存在替代⼀说。给出⼀个较为通⽤的看法仅供参考:如果不强调绝对的解释度,尽量避免单棵决策树,⽤集成树模型在集成数模型中,优先推荐使⽤xgboost在中⼩数据集上,优先选择集成树模型。⼤数据集上推荐神经⽹络在需要模型解释度的项⽬上,优先使⽤树模型在项⽬时间较短的项⽬上,如果数据质量低(⼤量缺失值、噪⾳等),优先使⽤集成树模型在硬件条件有限及机器学习知识有限的前提下,优先选择树模型对于结构化较⾼的数据,尤其是语⾳、图⽚、语⾔,优先使⽤神经⽹络模型(往往其数据量也较⼤)⽤个不恰当的⽐喻,集成树模型就像Python,⽽神经⽹络就像C++。前者简单粗暴效果好,容易上⼿优点多,后者⽐较精贵更为复杂但严肃项⽬上潜⼒很⼤。如果你愿意好好学习数据结构、内存分配和要命的指针,C++⼏乎⽆所不能。但如果你只打算写个简单的⽹络爬⾍,Python⼗⾏就可以搞定。1. 单棵决策树 vs. 集成学习决策树是1963年被 Morgan和Sonquist提出的[5],通过类树的结构实现分类和回归。我们⼀般认为决策树模型:1. 易于使⽤和解释[6],单棵的决策树很容易进⾏可视化和规则提取2. 可以⾃动实现特征选择[3] - 通过计算节点分裂时"不纯度的降低"(impurity reduction) 和剪枝(pruning)3. 预测能⼒有限,⽆法和强监督学习模型相提并论[6]4. 稳定性低(stability)⽅差⾼(variance),数据扰动很容易造成决策树表现有很⼤的变化[1, 6]随机森林是Breiman提出的[10],模型使⽤集成的学习来降低单棵决策树中的⾼⽅差(high variance)从⽽提⾼了整体的预测能⼒。⽽gradient boosting machine(GBM) [9]和xgboost [8]分别是在2001年和2014年提出的。鉴于两者⽐较相似放在⼀起讨论,这两个模型:1. 和随机森林的并⾏学习(parallel learning)不同,使⽤串⾏学习(sequential learning)不断地提⾼的模型的表现能⼒降低偏差(bias)2. 在进⾏预测分类的时候⾮常快且对于储存空间的要求低[3]3. boosting这个学习⽅法可以看成⼀种L1正则化来防⽌过拟合,因此模型不容易拟合[3]。Python⼯具库scikit-learn也提到过其不容易过拟合[2],⽤较多的基学习器也不碍事4. 单纯对⽐GBM和xgboost的话,它们的分类性能接近,xgboost有⼀个额外的正则项进⼀步降低过拟合。⽽xgboost的速度更快[4],往往更适合较⼤的数据集根据各种各样实践和研究来看,随机森林、GBM和xgboost都明显优于普通的单棵决策树,所以从这个⾓度来看,单棵决策树可以被淘汰了。⽽单棵决策树最⼤的护城河在于,它可以被很轻松的可视化甚⾄是提取规则分类规则。⽽集成学习在这⼀点是很难做到的[34]。⽽可解释化对于⼯业界很多时候是很重要的,从这个⾓度来看,决策树还有⼀点点⽴⾝之本。但这个使⽤的前提是,⼀定⼀定要确定决策树的表现不错(⽐如查看交叉验证的结果)再来可视化和规则提取,不然很有可能提取到⽆效甚⾄是错误的规则。随机森林的作者曾经实现过可视化,但远不如决策树直观,xgboost⽀持单棵树的可视化。从某个⾓度上来看,或许对xgboost中较为可靠和稳定的单棵树进⾏可视化可以彻底淘汰决策树。2. 集成树模型 vs. 神经⽹络神经⽹络已经是我们很熟悉的算法了,最⼤能⼒就是从复杂的数据中进⾏特征表⽰,也被认为可以近似表⽰任何函数(假设有特定多的node)[3],现在如此⽕爆的深度学习就是深度较⼤的神经⽹络的特定叫法。神经⽹络和集成树模型在以下⼏点上有较⼤的不同:1. 从数据量上来讨论:神经⽹络往往需要较⼤的数量,⽽⼩数据集上树模型有明显的优势。常常有⼈问,多⼩才算⼩?这也同时需要取决于特征的数量。但⼀般来说,⼏百⼏⼗个数据的情况下神经⽹络很难表现良好。2. 从特征⼯程⾓度看:神经⽹络需要更苛刻的数据准备⼯作,⽽树模型⼀般不需要以下步骤:(i) 缺失数据弥补(missing valueimputation) (ii) 数据类型转化(categorical to numerical):把类别数据变为数字型 (iii) 数据缩放(data scaling):把不同范围的数据归⼀到[0,1]或者投射到正态分布上 (iv) 更多的参数调整:⽐如初始化权重,⽐如选择合适学习率等3. 从调参难度来看:集成树模型远低于神经⽹络。⼤部分的集成树模型也仅需要:(i)基学习器数量 (ii) 考虑的特征数 (iii) 最⼤深度 等。神经⽹络的调参惨剧已经没什么好说的,这点上和树模型差距⾮常⼤。4. 从模型解释度来看:集成树模型的解释度⼀般更⾼,⽐如可以⾃动⽣成特征重要性(feature importance)。神经⽹络的特征虽然也可以⼀定程度上进⾏分析,但不⼤直观。再早年间,在神经⽹络上使⽤包裹式(wrapper)⽅法,每次加1或者减1个特征进⾏特征排序也曾存在过,远不如集成树模型的嵌⼊式(embedded)特征选择来的⽅便和直观。5. 从模型预测能⼒来看:抛去调参的难度差异不提,⼤中型数据上的表现较为接近。随着数据量增⼤,神经⽹络的潜⼒越来越⼤6. 从项⽬周期来看:因为在各个⽅⾯神经⽹络都需要更多的时间,因此其需要的总时间往往远⼤于决策树集成,更别提还需要很好的硬件⽀持,如GPU。⼀般来说,在⼩数据量多特征下,集成的树模型往往优于神经⽹络。随着数据量增⼤,两者表现趋于接近,随着数据量继续上升,神经⽹络的优势会逐步体现。这个跟很多答主提到的⼀样:随着数据量上升,对模型能⼒的要求增加⽽过拟合的风险降低,神经⽹络的优势终于有了⽤武之地⽽集成学习的优势降低。3. 总结综上来看,⼤部分项⽬建议使⽤集成决策树,⾸推xgboost,速度快效果好⽤时少。特定的复杂且数据量⼤的项⽬,建议还是⽼⽼实实的为神经⽹络调参,拿出debug C++ pointer的精神来。所以暂时来看,已经被替代的是单棵决策树,⽽集成决策树还⾮常重要甚⾄变得更为重要。在短时间内,看不到集成决策树模型被替代的可能 ʕ·
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687986439a64032.html
评论列表(0条)