Apriori 原理:快速筛选频繁出现的症状组合
先明确一个前提:什么是 “频繁项集”?
比如医生想找 “经常一起出现的症状”,假设我们规定 “至少在 2 个病人身上出现才算频繁”(这就是 “最小支持度”)。
- 单个症状 “发烧” 在 3 个病人身上出现 → 算 “频繁 1 项集”;
- 症状组合 “发烧 + 咳嗽” 在 2 个病人身上出现 → 算 “频繁 2 项集”;
- 如果 “发烧 + 咳嗽 + 腹泻” 只在 1 个病人身上出现 → 不算频繁。
Apriori 原理:用 “小规则” 排除 “大麻烦”
Apriori 原理就一句话:
“如果一个组合不频繁,那么包含它的所有更大组合也一定不频繁”。
咱们拆成两句大白话理解:
1. 先看 “反例”:不频繁的组合,它的 “放大版” 也不频繁
比如我们发现 “咳嗽 + 腹泻” 这个组合只在 1 个病人身上出现(不频繁),那么:
- 包含它的 “发烧 + 咳嗽 + 腹泻” → 肯定也不频繁(因为 “咳嗽 + 腹泻” 本身就少,再加上 “发烧” 只会更少);
- 包含它的 “咳嗽 + 腹泻 + 头痛” → 也一定不频繁。
作用:遇到 “咳嗽 + 腹泻” 这种不频繁的组合,直接把所有包含它的更大组合(3 个症状、4 个症状...)全部排除,不用再计算它们的支持度,省了很多功夫。
2. 再看 “正例”:频繁的组合,它的 “缩小版” 也一定频繁
反过来,如果 “发烧 + 咳嗽” 是频繁组合(在 2 个病人身上出现),那么它的所有 “小组合”:
- “发烧”(单个症状) → 一定频繁;
- “咳嗽”(单个症状) → 一定频繁。
作用:如果一个组合是频繁的,那它拆分后的小组合肯定也频繁,不用怀疑。
举个例子:用 Apriori 原理快速筛选项集
假设我们有 5 个症状:发烧(A)、咳嗽(B)、嗓子痛(C)、头痛(D)、腹泻(E),最小支持度是 2 次。
- 先找 “频繁 1 项集”:
算出单个症状的出现次数,发现 “腹泻(E)” 只出现 1 次(不频繁)→ 排除。
剩下的频繁 1 项集:{A, B, C, D}。
- 再找 “频繁 2 项集”:
只需要用剩下的 A、B、C、D 两两组合(比如 A+B、A+C...),计算它们的出现次数。
假设发现 “B+D”(咳嗽 + 头痛)只出现 1 次(不频繁)→ 根据 Apriori 原理,所有包含 “B+D” 的 3 项集(比如 A+B+D、B+C+D)都可以直接排除,不用计算。
- 继续找 “频繁 3 项集”:
只用上一步筛选出的频繁 2 项集(比如 A+B、A+C)来组合,那些包含 “不频繁 2 项集” 的 3 项集,早就被排除了,计算量大大减少。
为什么要学这个原理?
因为它能帮我们 “少做无用功”。如果没有 Apriori 原理,我们可能要计算所有可能的组合(比如 5 个症状有 31 种组合),但用这个原理,能提前排除掉大部分肯定不频繁的组合,让计算效率翻倍。
这就是 Apriori 算法的核心秘密 —— 靠这个原理 “剪枝”,从海量数据中快速挖出频繁项集,再生成有用的关联规则(比如 “发烧 + 咳嗽→感冒”)。