假设你去买西瓜,想挑个熟的,随机树就像一个 "选瓜攻略生成器":
- 它先随机挑一个选瓜标准(比如先看纹路是否清晰,还是先拍声音闷不闷);
- 按这个标准把西瓜分成两堆(纹路清晰的一堆,不清晰的一堆);
- 然后在每堆里再随机挑下一个标准(比如在纹路清晰的堆里,再看蒂部是否弯曲),继续分堆;
- 直到最后每堆西瓜都能直接判断熟不熟,就形成了一棵 "选瓜决策树"。
- 普通决策树:像老农民选瓜,按固定经验(先看纹路→再看蒂部→最后拍声音)。
- 随机树:像新手选瓜,每一步随机挑一个标准(可能先拍声音→再看颜色→最后摸表皮),甚至故意不选最靠谱的标准。
- 问题:根据订单金额、配送时间、菜品温度,预测用户是否打 5 星。
- 随机树做法:
- 随机选一个因素先判断(比如先看 "配送时间是否超过 30 分钟");
- 把订单分成 "超时" 和 "没超时" 两类,再在每类里随机选下一个因素(比如 "超时" 类里看 "菜品温度是否烫手");
- 最后每片叶子节点(分类终点)给出 "大概率好评" 或 "差评" 的结论。
- 问题:根据学历、工作经验、项目成果,决定是否进入下一轮。
- 随机树做法:
- 可能先随机选 "是否有同类项目经验" 作为第一关;
- 通过的人再随机看 "学历是否本科以上",没通过的直接淘汰;
- 虽然每棵树的判断逻辑很 "随性",但多棵树(随机森林)组合起来就很准。
- 问题:在策略游戏里,根据当前资源、敌方位置,决定是 "造兵" 还是 "进攻"。
- 随机树做法:
- 随机选一个因素(比如 "当前金币是否超过 1000");
- 满足条件就倾向 "造兵",不满足就看 "敌方基地血量是否低于 50%";
- 虽然单棵树的决策可能很傻,但胜在计算快,适合实时游戏场景。
| 对比项 | 普通决策树(老农民选瓜) | 随机树(新手选瓜) |
| 选标准方式 |
每次选 "最靠谱" 的标准(比如纹路清晰度) |
随机选标准(可能先看颜色,再看重量) |
| 抗忽悠能力 |
容易被个别极端案例带偏(比如遇到一个纹路乱但很甜的瓜) |
因为随机选标准,反而不容易被单一因素坑 |
| 终极目标 |
追求单棵树判断最准(可能过度拟合) |
牺牲单棵树准确率,为了融入森林当 "备胎" |
特征:天气(晴 / 雨)、温度(高 / 中 / 低)、朋友是否到场(是 / 否)
标签:出门(1)/ 不出门(0)
一棵典型的随机树可能这么长:
开始 → 随机选"朋友是否到场":
→ 朋友到场:再随机选"温度是否高":
→ 温度高:出门(1)
→ 温度中/低:随机选"天气是否晴":
→ 晴天:出门(1)
→ 雨天:不出门(0)
→ 朋友没到场:直接不出门(0)
特点:判断逻辑很 "随性",但胜在每次生成的树都不一样,适合和其他随机树组队(组成随机森林)。
from sklearn.tree import DecisionTreeClassifier
import numpy as np
代码解析:
- 模型会随机选一个特征(比如先看 "价格")作为第一判断标准;
- 假设价格≤12 元就进一步看 "热量",否则直接判断 "不买";
- 最终对新数据(7 甜、12 元、250 卡),模型可能根据训练好的随机逻辑给出 "买" 的结论。
-
为啥要随机?
避免单棵树死磕一个特征(比如只看价格买奶茶),给不同树机会看不同角度(有的看甜度,有的看热量),为随机森林打基础。
-
单棵随机树准吗?
不准,甚至像 "瞎猜",但胜在速度快,且每棵树都不一样(就像 100 个新手选瓜,各有各的歪道理)。
-
啥时候单独用随机树?
- 数据量极小(比如只有 10 条记录);
- 追求速度(单棵树计算比森林快 100 倍);
- 当你想知道 "某个随机因素对结果的影响"(比如随机选特征看奶茶购买决策)。
简单说,随机树就像一个 "爱瞎琢磨的新手",虽然单独干活不靠谱,但凑成团队(随机森林)就能逆袭成大神!