algorithm - 先验算法

标签 algorithm apriori

我以前多次听说过 Apriori 算法,但一直没有时间或机会深入研究它,谁能用简单的方式向我解释一下这个算法的工作原理?另外,一个基本的例子会让我更容易理解。

最佳答案

先验算法

这是一种用于数据集中频繁模式挖掘的候选生成和测试方法。您必须记住两件事。

Apriori 剪枝原则 -如果任何项集不频繁,则不应生成/测试其超集。

Apriori Property - 一个给定的 (k+1)-itemset 是一个候选 (k+1)-itemset 只有当每个人它的 k-itemset 子集是频繁的。

现在,这是分 4 个步骤的先验算法。

  1. 最初,扫描数据库/数据集一次以获得频繁的1-itemset
  2. 从长度为 k 的频繁项集中生成 长度为 k+1候选 项集。
  3. 根据数据库/数据集测试候选人。
  4. 当无法生成频繁集或候选集时终止。

解决的例子

假设有一个交易数据库如下,有4笔交易,包括他们的交易ID和购买的元素。假设最小支持度 - min_sup2。术语支持​​度是存在/包含某个项集的事务的数量。

事务数据库

tid  | items
-------------
10   | A,C,D
20   | B,C,E
30   | A,B,C,E
40   | B,E

现在,让我们通过第一次扫描数据库来创建候选 1-itemsets。简称为C_1的集合,如下所示。

itemset | sup
-------------
  {A}   |  2
  {B}   |  3
  {C}   |  3
  {D}   |  1
  {E}   |  3

如果我们用 min_sup 测试它,我们可以看到 {D} 不满足 2min_sup >。因此,它不会包含在频繁1-itemset中,我们简称为L_1的集合,如下所示。

itemset | sup
-------------
  {A}   |  2
  {B}   |  3
  {C}   |  3
  {E}   |  3

现在,让我们第二次扫描数据库,并生成候选2-itemsets,我们简称为C_2的集合,如下所示。

itemset | sup
-------------
  {A,B} |  1
  {A,C} |  2
  {A,E} |  1
  {B,C} |  2
  {B,E} |  3
  {C,E} |  2

如您所见,{A,B}{A,E} 项集不满足 min_sup 2 因此它们不会包含在频繁的2-itemset, L_2

itemset | sup
-------------
  {A,C} |  2
  {B,C} |  2
  {B,E} |  3
  {C,E} |  2

现在让我们对数据库进行第 3 次扫描并获取候选 3-itemsetsC_3,如下所示。

itemset  | sup
-------------
 {A,B,C} |  1
 {A,B,E} |  1
 {A,C,E} |  1
 {B,C,E} |  2

你可以看到,{A,B,C}, {A,B,E} and {A,C,E} code> 不满足 2min_sup。因此它们不会被包含在频繁的3-itemset中,L_3如下。

itemset  | sup
-------------
 {B,C,E} |  2

现在,最后,我们可以计算出关联/关联规则可以由项集{B,C,E}生成,如下所示。

         Rule       | supp  |  conf   |  lift
    -------------------------------------------
     B ->  C & E    |  50%  |  66.67% |  1.33
     E ->  B & C    |  50%  |  66.67% |  1.33
     C ->  E & B    |  50%  |  66.67% |  1.77
     B & C ->  E    |  50%  |  100%   |  1.33
     E & B ->  C    |  50%  |  66.67% |  1.77
     C & E ->  B    |  50%  |  100%   |  1.33

关于algorithm - 先验算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1248373/

相关文章:

c# - 是否有一种标准方法可以从字符串 [] 创建 CSV 值?

java - 验证下一个字符是否与第一个字符相同

algorithm - 部分子树匹配算法

machine-learning - 即使对于少量数据,将 apriori 对象转换为列表也会花费更多时间

algorithm - 从 Vec<String> 构建 UrlTree

algorithm - 排序双链表的搜索算法

r - 将类规则对象转换为 R 中的数据框

python : DIY generalize this "all_subsets" function to any size subsets

r - R (arulesSequences) 中的 cSPADE 带大数据的奇怪结果。我可以强制 numpart 为 1 吗?有风险吗?

mysql - 是否可以在mysql语句中运行先验关联规则?