跳转至

P4-3.1 为什么需要启发式

Section ID: P4-3.1 Version: v2026.07.20

在 P4-2 章里,我们把 supervised learning、unsupervised learning、reinforcement learning 看成几种大的学习类型。接下来就会自然出现一个问题:真正去解决现实问题时,应该先看哪些数据、先试哪些 model、结果到什么程度才进入下一阶段?

这时就会出现 heuristic 这个词。heuristic 不是保证完整证明或最优解的规则,而是在时间和信息都有限的条件下,帮助你快速做出较为可信选择的判断标准。

heuristic 很容易被误解成 大概猜一下。但在机器学习实务中,heuristic 不是随机猜测,而是根据经验、问题结构、计算成本和验证结果来缩小候选集的方法。

这一节会说明 heuristic不用完全穷举而是先缩小候选的判断可验证的工作假设 这些概念。后面的章节会带着这个抓手继续判断当前语境,而 把实务判断读成假设与验证结构 这一层基础含义,会通过本节和 概念词汇表 再次接回。

本节范围

这一节解释为什么需要 heuristic。具体的 model selection、feature selection、preprocessing、hyperparameter tuning 会在后面分别展开。模型选择 heuristics 会在 P4-8 再次处理,feature selection 和 preprocessing 会在 P4-7 再次处理,hyperparameter tuning 会在 P4-9 再次处理。

这一节回答下面这些问题。

  • heuristic 是什么?
  • 为什么不能把所有情况都完整算完?
  • heuristic 和 algorithm、optimization 有什么不同?
  • heuristic 会在机器学习的哪些位置使用?
  • 使用 heuristic 时,为什么还必须要有 validation?

用为什么需要启发式留下的判断标准

  • 能把 heuristic 解释成在受限条件下用于缩小候选集的实用判断标准。
  • 能理解 heuristic 并不保证最优解。
  • 能用例子说明为什么在时间、数据、计算量和成本限制下,heuristic 会变得必要。
  • 能说明为什么 heuristic 必须和 validation 一起使用。
  • 能把 heuristic 看成可验证的 working hypothesis,而不是个人直觉。

先用一个场景来理解

假设你正在做一个新的客户流失预测模型。数据还不完美,时间也有限。

需要决定的东西 可能的选择 为什么很难全部都试一遍
要使用的 feature 访问次数、购买金额、登录间隔、咨询记录 feature 组合会越来越多。
要使用的 model logistic regression、decision tree、random forest、boosting 每种 model 都需要训练和调参时间。
评估标准 accuracy、precision、recall、F1 哪个更重要会随着业务目标而变化。
调参范围 树深、学习率、迭代次数 如果每种组合都试,成本会变得很高。

在这种情况下,把所有可能组合都试到底,再挑出最好的 这个想法在理论上听起来不错,但在现实里往往做不到。所以才需要 heuristic,例如先立一个简单 baseline、先去掉明显没必要的 feature、先选择符合业务目标的 metric。

heuristic 是缩小候选集的方法

heuristic 会减少为了解决问题而必须先看的候选。它不是把所有路径都走完,而是先挑出值得优先检查的路径。

flowchart TB
  A["候选很多<br/>特征 / 模型 / 设置"]
  B["启发式<br/>利用经验与约束"]
  C["缩小后的候选集<br/>先试这些"]
  D["验证<br/>用数据确认"]
  E["修正<br/>保留、修改或丢弃"]

  A --> B
  B --> C
  C --> D
  D --> E
  E --> B

在这张图里,heuristic 不是最终结论。它只是先决定要尝试哪些候选的方法。真正用数据验证之后,如果不合适,就必须调整它。

为什么不能把所有东西都算完

这时会出现一个问题:计算机不是很快吗,为什么不能全都算? 原因在于,选择空间会比想象中膨胀得更快。

例如,想一想从 20 个 feature 里挑出要不要用哪些 feature 这个问题。就算每个 feature 只有 不用 两种状态,可能的组合数也会非常大。如果再把 model 类型、hyperparameter、数据拆分方式叠加进去,实验次数会继续膨胀。

会膨胀的要素 为什么会变难
feature 数量 组合数会快速增长。
model 候选 每种 model 都要付出训练时间。
hyperparameter 设置组合会越来越多。
数据规模 一次训练的成本会变大。
评估条件 要同时查看多种 metric 和多种验证拆分。

所以在实务里,比起完全穷举所有可能性,更常见的做法是先缩小较可信的候选,再一边验证一边修正方向。

heuristic 和 algorithm 的差别

algorithm 是按固定步骤解题的方法。heuristic 则是用来决定:在这些步骤内外,先看哪些候选、算到什么程度、优先做哪些选择。

区分 先联想到的话 例子
algorithm 固定步骤 用给定数据训练 decision tree。
heuristic 缩小候选的判断标准 先试可解释的 model。
optimization 寻找能让目标函数更好的值 找到能减少 loss 的参数值。
validation 检查这个选择是否真的可接受 在 validation data 上确认性能。

heuristic 并不会替代 algorithm。相反,它是用来决定先试哪个 algorithm、先看哪一组设置、以及结果到什么程度就该进入下一阶段。

有限理性与足够好的选择

理解 heuristic 时,Herbert A. Simon 的 bounded rationality 视角很有帮助。Stanford Encyclopedia of Philosophy 把 bounded rationality 解释成:离开完全理性假设,转而研究在信息获取能力和计算能力都受限的主体身上,什么样的理性才是合适的。

这个视角同样很适合机器学习实务。我们并没有完整信息、无限计算时间,也没有完美评估环境。所以,比起 理论上可能存在的最优解,更重要的是 在当前条件下可验证、足够好的选择

这并不意味着放弃准确性。相反,它意味着承认限制,并在这些限制之内以更合理的方式作出更好的选择。

heuristic 在机器学习里会用到哪些地方

在机器学习里,heuristic 经常会用在下面这些位置。

位置 heuristic 例子 后面会在哪里再处理
feature selection 与其一开始塞进太多 feature,不如先看更容易解释的 feature。 P4-7
preprocessing 先检查缺失值很多的列。 P4-7
model selection 先建立一个简单 baseline model。 P4-8
tuning 先试小范围,再考虑更宽的范围。 P4-9
evaluation 先看业务上更危险的错误类型。 P4-6

这张表里最重要的一点是:heuristic 不是 最终答案。它只是开始实验的方向。如果 validation 结果不好,就必须修改 heuristic。

好 heuristic 和坏 heuristic

heuristic 可能很有用,但它不总是对的。一个好的 heuristic,既要能快速缩小问题,又必须保留可验证性。

heuristic 为什么可以用 还必须验证什么
先做一个简单 model。 可以很快建立比较标准。 要比较复杂 model 是否真的更好。
先怀疑缺失值很多的 feature。 可以更快发现数据质量问题。 仍然要确认这个 feature 会不会包含重要信号。
先使用可解释的 feature。 更容易和业务负责人一起讨论。 要确认性能没有被牺牲得太多。
先做计算成本更低的实验。 可以更快找到方向。 要确认小实验的结果是否也能延伸到更大数据上。

坏 heuristic 则是没有验证、只是反复沿用的习惯。比如 永远先上 random forest,或者 有缺失值就整列丢掉,都可能随着情境不同而变错。heuristic 必须和当前问题一起读。

heuristic 是工作假设

这一节把 heuristic 当成 working hypothesis 来处理。也就是说,它是一个出发点,表示 先这样做可能是合理的

只要把它当成 working hypothesis,就会出现下面这条流程。

  1. 先说明为什么这个选择看起来合理。
  2. 用小数据或 baseline model 先确认一下。
  3. 看 validation 结果。
  4. 如果不对,就修改。
  5. 如果看起来还成立,再扩展到下一阶段。

这条流程的好处是:既不丢掉现场经验判断,又能把它转成一种可验证的形式。

实际工作里,首先要判断的是 现在能不能用 heuristic,以及 哪些东西不能原样直接相信

当前状态 使用 heuristic 的方式 不能原样放着不管的东西
候选太多,时间和计算成本都有限 把 heuristic 当成先缩小候选的出发点 把 heuristic 当成最终答案固定住
可以用 baseline 和小规模验证快速确认 把它写成工作假设,并立刻验证 没有验证就把它当习惯重复使用
explainability、performance、cost 相互冲突 先写清楚优先哪个约束,再缩小候选 只看单一标准,忽略其他约束

案例与示例

案例 1. 想先找出退货可能性高的订单时

假设某个网店运营团队,想提前检查那些退货可能性高的订单。人一开始先看的标准,是 是不是服饰类商品折扣幅度是不是很大同一个客户最近是不是经常退货 这样的几个信号。

这些标准作为出发点很有用,但一旦订单数量很多,就很难由人直接把所有组合都比较一遍。而且不同团队可能会优先看不同标准,于是即便面对同样数据,优先级也会变得不稳定。

这时 heuristic 就可以变成这样一个工作假设:先不要把所有 feature 全部放进去,而是先用那些最可能直接和退货相关的 feature 做一个小 baseline model。 例如,可以先选最近退货次数、商品类别、订单金额、是否延迟配送,做一个小型分类实验。

这种判断到底对不对,仍然必须通过验证来确认。你可以比较 只用这一小组 feature用更大 feature 集 时的性能差异,也要确认人工认为重要的标准是否真的在数据里形成了信号。如果结果差不多,说明这个简单起点是有效的;如果差很多,就要修改 heuristic。

flowchart TD
  A["订单表"]
  B["列出所有可能的特征"]
  C["比较规模变得过大"]
  D["先挑一个小的启发式子集"]
  E["建立一个小的基准模型"]
  F["与更宽的特征集合比较"]
  G["保留或修改启发式"]

  A --> B --> C
  A --> D --> E --> F --> G

检查清单

  • 能不能说明在什么状态下,heuristic 不是 随便猜,而是缩小候选集的装置?
  • 能不能说明为什么 heuristic 总要和 baseline model 或 validation data 一起出现?
  • 能不能说明当 explainability、cost、performance 冲突时,为什么必须把优先项记录下来?
  • 能不能说明 heuristic 是在有限时间和有限信息里缩小候选的实用判断标准?
  • 能不能说明 heuristic 不会取代 algorithm,而是用来决定先试哪些候选、按什么顺序去试?
  • 能不能说明为什么 heuristic 应该被当成可验证的 working hypothesis,而不是个人感觉?

来源与参考资料