2012年深度学习翻盘之后,整个CV和NLP领域几乎被神经网络统治了。但你去任何一个做结构化数据预测的公司看看——金融风控、电商推荐、广告点击率预估、销售预测——树模型(尤其是XGBoost和LightGBM)依然是绝对主流,深度学习在这类场景里连30%的份额都吃不到。
为什么?今天咱们就聊聊树模型的"不死神话"。
决策树——所有树模型的祖宗,简单到令人发指
决策树的逻辑就是一个"问问题"的过程。你要判断"今天适不适合打球",决策树会一路问:天气怎么样?晴天→湿度高吗?高→不适合,低→适合。这就是一个树形结构的决策链条。
训练决策树就是在找"最好的分叉方式"——哪个特征、哪个阈值能把数据分得最"纯"(让每个子节点里的样本尽可能属于同一类)。信息增益、基尼系数、方差减少是三种最常用的"纯度"指标。
决策树的优点是可解释性极强——你不但能知道"模型预测了什么",还能看到"它是怎么做决策的",每一步问的是什么特征、阈值是多少。这在金融风控里是硬需求——监管要求银行必须解释"为什么拒绝了这个贷款申请",不能黑箱输出一个"拒绝"了事。
决策树的缺点是不稳定且容易过拟合——数据稍微变一点,整棵树的结构就全变了。而且单棵树的深度深了,它在训练集上可以做到100%准确,但泛化能力极差。
随机森林——一群人投票总比一个人靠谱
随机森林的核心思想就四个字——"三个臭皮匠,顶个诸葛亮"。你训练上百棵决策树,每棵树用不同的数据子集(Bootstrap采样)和不同的特征子集(随机选一部分特征来做分裂),让它们各学各的、各有各的"偏见",最后把它们的预测结果做投票(分类)或者平均(回归)。
"随机"主要体现在两个方面:
数据随机——每棵树只用60%~80%的训练数据(有放回抽样),相当于每棵树看到的"视野"都窄了一点,但也因此避开了某些异常值的影响
特征随机——每棵树分裂时不是考虑全部特征,而是只随机挑选一部分(比如总特征数的平方根),这样每棵树长出来的"样子"都不一样,互相之间的相关性就降低了
随机森林的泛化能力远强于单棵决策树,而且天然能处理高维数据、对缺失值不敏感、不需要特征归一化——这些都是工业界特别喜欢的"懒人友好"属性。
它的最大缺点是解释性下降了——几百棵树投票出来的结果,你说不清"为什么最后判定是拒绝",毕竟没有一个统一的决策路径。不过可以通过特征重要性排名来给一个"全局解释"——告诉你"在整体上,这个特征对预测结果的影响最大"。
GBDT——串行训练,每一棵树补上一棵的漏洞
随机森林的树是"并行"训练的,彼此独立、最后投票。GBDT(梯度提升决策树)是"串行"训练的——第一棵树先做个预测,算出预测值和真实值之间的残差;第二棵树专门去"补"第一棵树没补上的残差;第三棵树再补第二棵的残差……如此往复。
这个"迭代式纠错"的思路极其高效,每一轮新增的树都在往"减少残差"的方向前进,所以GBDT通常用更少的树就能达到比随机森林更高的精度。
GBDT的工程巅峰就是XGBoost和LightGBM。这两个库把GBDT的效率和工程化做到了极致:
二阶泰勒展开加速优化(比传统GBDT只用一阶导快得多)
对缺失值自动学习最优分裂方向(省掉了预处理里的缺失值填充步骤)
列采样、早停、正则化(L1+L2),极大降低了过拟合风险
支持并行化、分布式训练、GPU加速,百万级数据也能在小时级别训完
为什么树模型在表格数据上还压着深度学习打?
这个问题我问过自己很多次,也在不少场合跟同行争论过。我的结论是几个原因的叠加。
第一,表格数据没有"局部结构"。图像有空间局部性(相邻像素相关)、文本有序列局部性(相邻词相关),但表格数据的列之间没有这种"顺序关系"。你交换两列的位置,表格还是那个表格。CNN的卷积和Transformer的位置编码都是利用"局部结构"的,在表格数据上根本发挥不出优势。
第二,树模型对特征尺度和分布不敏感。深度学习中你不归一化就训不出来,树模型完全不用。你把所有特征乘以100,树的分裂阈值也跟着乘100,结果完全不变——这对工程人员来说是巨大的省心。
第三,树模型天然处理类别型特征和缺失值。深度学习的Embedding和填充需要额外设计,XGBoost直接支持category类型的列内部自动one-hot,缺失值自动学最优分裂方向——省了多少预处理代码。
第四,树模型的训练快、调参少。一个XGBoost模型在百万级数据上,一个小时内搞定训练。同等数据量下训一个深度神经网络,光调学习率和batch size可能就得三天,还不算架构设计的时间。
第五,可解释性。金融、医疗、政府监管领域,你输出的结论必须有据可查。树模型可以给出"为什么是这个结果"的完整决策路径,深度学习再怎么搞可解释性工具(LIME、SHAP),也是"事后解释",不如树模型那种"天然透明"来得硬气。
树模型的未来——它不会死,只会换着方式活
你会看到越来越多的工作在用"树模型+深度学习"的混合架构。比如用GBDT学到的特征重要性来指导神经网络的特征选择,用树模型的特征变换作为深度学习的输入特征,或者用神经网络来做"树的非线性表达"的增强。两者不是谁替代谁的关系,而是各擅胜场的互补关系。
总结一句话:如果是图像、语音、文本、视频,用深度学习;如果是结构化表格数据,优先选XGBoost/LightGBM。违背这个原则的,不是学术探索就是工程事故。