You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

随机森林算法决策树构建方式及sclearn实现逻辑咨询

scikit-learn 中决策树划分规则的生成逻辑

你提到的花卉分类场景对应sklearn的DecisionTreeClassifier类(没有decisiontreemaker()这个接口,应该是笔误),它采用贪心自上而下递归分裂的策略生成划分规则,全程不会全局搜索最优树结构,单节点的分裂规则确定步骤如下:

  • 对当前待分裂节点,先遍历所有可用输入特征(你的场景里就是花瓣宽度、花瓣长度两个连续特征)。针对每个连续特征,先将节点内所有样本的特征值升序排列,取每两个相邻不同取值的中点作为候选分裂阈值。举个例子,如果当前节点里样本的花瓣宽度取值为0.1cm、0.2cm、0.5cm,对应的候选阈值就是0.15cm、0.35cm。
  • 对每一组「特征+候选阈值」的组合,计算分裂后的不纯度下降幅度:分裂准则默认是基尼系数,只有手动指定参数criterion="entropy"时才会基于熵计算信息增益。计算逻辑是用父节点的不纯度,减去分裂后左右子节点按样本量加权的不纯度之和,这个差值越大,说明该分裂规则区分类别的效果越好。
  • 遍历完所有候选组合后,选择不纯度下降幅度最大的组合作为当前节点的正式分裂规则,比如最终选中「花瓣宽度 <= 0.8cm」,就按这个阈值把当前节点的样本拆分成左右两个子节点。
  • 对生成的两个子节点递归执行上述分裂流程,直到触发停止条件就终止:比如节点内样本全属于同一类(不纯度为0)、节点样本数少于min_samples_split阈值、树的深度达到max_depth限制等,此时该节点会被标记为叶节点,输出类别为节点内样本数占比最高的花卉物种。
随机森林的树构建逻辑:不存在暴力遍历所有树结构的操作

随机森林生成单棵树时完全不会暴力枚举所有可能的树结构——当特征、样本量稍大时,可能的决策树结构数量是指数级增长的,暴力遍历的算力成本根本无法承受。它的构建逻辑是在单棵贪心决策树的基础上加入两层随机扰动,兼顾训练效率和集成效果:

  • 训练每棵树前,先从原训练集中做有放回的bootstrap随机抽样,用抽到的样本子集(通常包含原集约63%的不重复样本)作为该树的训练数据,不会用全量样本。
  • 每个节点做分裂前,不会遍历全部特征,会先随机抽取一个特征子集(分类任务默认抽取总特征数的平方根个,你的场景只有2个特征,每次会随机抽1~2个),仅在这个小的特征子集里按照前面说的贪心规则找最优分裂点,这是随机森林降低树之间相关性、提升泛化能力的核心设计。
  • 单棵树的生成全程用局部最优的贪心策略,不会回溯调整之前的分裂选择,也不会给所有可能的树结构计算熵权重打分。只有当你手动指定分裂准则为熵时,熵才会被用来计算单个节点单次分裂的效果,不会参与全局树结构的评估。

内容的提问来源于stack exchange,提问作者user17752727

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:51:34