笔记分享: 西安交通大学COMP551705数据仓库与数据挖掘——02. 关联规则挖掘

文章目录

  • [1. \textbf{1. } 1. 基本概念](#1. \textbf{1. } 1. 基本概念)
  • [2. \textbf{2. } 2. 布尔关联规则](#2. \textbf{2. } 2. 布尔关联规则)
    • [2.1. \textbf{2.1. } 2.1. 一些基本概念](#2.1. \textbf{2.1. } 2.1. 一些基本概念)
    • [2.2. \textbf{2.2.} 2.2. Apriori \textbf{Apriori} Apriori算法](#2.2. \textbf{2.2.} 2.2. Apriori \textbf{Apriori} Apriori算法)
    • [2.3. \textbf{2.3.} 2.3. Apriori \textbf{Apriori} Apriori算法示例](#2.3. \textbf{2.3.} 2.3. Apriori \textbf{Apriori} Apriori算法示例)
  • [3. \textbf{3. } 3. 多层关联规则挖掘](#3. \textbf{3. } 3. 多层关联规则挖掘)
    • [3.1. \textbf{3.1. } 3.1. 算法概述](#3.1. \textbf{3.1. } 3.1. 算法概述)
    • [3.2. \textbf{3.2. } 3.2. 算法实例](#3.2. \textbf{3.2. } 3.2. 算法实例)
  • [4. \textbf{4. } 4. 多维关联规则挖掘](#4. \textbf{4. } 4. 多维关联规则挖掘)

有关 Github \text{Github} Github仓库,欢迎来 Star \text{Star} Star

1. \textbf{1. } 1. 基本概念

1️⃣关联规则挖掘

  1. 含义:从事务数据库中发现项集之间有趣的关联

  2. 定义:对于 Y ⊆ I / X ⊆ T i Y\text{⊆}I/X\text{⊆}T_i Y⊆I/X⊆Ti且 X ∩ Y = ∅ X\text{∩}Y\text{=}\varnothing X∩Y=∅, X → Y X\text{→}Y X→Y表示既然 T i T_i Ti中含 X X X则也(以一定支持/置信度)含 Y Y Y

    集合 含义 示例
    项集 I I I I = { i 1 , i 2 , ⋯   , i m } I\text{=}\left\{i_1, i_2, \cdots, i_m\right\} I={i1,i2,⋯,im} 超市中的所有商品
    事务集 D D D D = { T 1 , T 2 , ⋯   , T n } D\text{=}\left\{T_1, T_2, \cdots, T_n\right\} D={T1,T2,⋯,Tn}且 T i ⊆ I T_i\text{⊆}I Ti⊆I 所有交易( T i T_i Ti为第 i i i次交易结算商品)
    事务包含项集 X X X X ⊆ I X\text{⊆}I X⊆I且 X ⊆ T i X\text{⊆}T_i X⊆Ti 每次交易所结算的(部分)商品
  3. 表示:

    • 数学表示: A → B    S , C A\text{→}B\,\,S,C A→BS,C (当 S C SC SC都超过阈值时认为该规则强相关)
    • 可视化图:

2️⃣规则度量

  1. 客观度量:

    Item \textbf{Item} Item 公式 含义
    支持度 S ( A → B ) = P ( A ∩ B ) S(A\text{→}B)\text{=}P(A\text{∩}B) S(A→B)=P(A∩B), S ( A ) = P ( A ) S(A)\text{=}P(A) S(A)=P(A) 所有事务中,有多少事务同时含 A B AB AB/含 A A A
    置信度 C ( A → B ) = P ( A ∩ B ) P ( A ) C(A\text{→}B)\text{=}\cfrac{P(A\text{∩}B)}{P(A)} C(A→B)=P(A)P(A∩B) 在包含 A A A的事务中,有多少同时还含 B B B
    • 示例: TID Item 2000 A , B , C 1000 A , C 4000 A , D 5000 B , E , F ⇒ { P ( A ) = 3 4 P ( A ∩ B ) = 1 4 ⇒ A → B   1 4 , 1 3 \text{ \large } \begin{array}{|c|c|} \hline \text{\small TID} & \text{\small Item} \\ \hline \small 2000 & \small A, B, C \\ \hline \small 1000 & \small A, C \\ \hline \small 4000 & \small A, D \\ \hline \small 5000 & \small B, E, F \\ \hline \end{array} \text{ ⇒ } \begin{cases} P(A) = \cfrac{3}{4} \\5pt P(A \cap B) = \cfrac{1}{4} \end{cases} \text{ ⇒ } A \to B \, \left\\cfrac{1}{4}, \\cfrac{1}{3}\\right TID2000100040005000ItemA,B,CA,CA,DB,E,F ⇒ ⎩ ⎨ ⎧P(A)=43P(A∩B)=41 ⇒ A→B41,31
  2. 主观度量:个人常识/实际情况...

3️⃣关联规则/相关性/因果关系

  1. 关联规则/相关性
    • 相关性衡量: Lift ( A , B ) = P ( A ∪ A ) P ( A ) P ( B ) → { < 1 → A B 负相关 = 1 → A B 无相关 > 1 → A B 正相关 \text{Lift}(A,B)\text{=}\cfrac{P(A\text{∪}A)}{P(A)P(B)}\text{→}\begin{cases}\text{<}1\text{→}AB负相关\\\\\text{=}1\text{→}AB无相关\\\\\text{>}1\text{→}AB正相关\end{cases} Lift(A,B)=P(A)P(B)P(A∪A)→⎩ ⎨ ⎧<1→AB负相关=1→AB无相关>1→AB正相关
    • 二者关系:强关联规则\\text{≠} 正相关
  2. 关联规则/因果关系:二者无关,但相关性有助于为发现因果关系提供线索

2. \textbf{2. } 2. 布尔关联规则

2.1. \textbf{2.1. } 2.1. 一些基本概念

1️⃣频繁项集

  1. 定义: X X X频繁 ⇔ 等价于 \xLeftrightarrow{等价于} 等价于 事务集 D D D中含 X X X的 T i T_i Ti数量( X X X支持度)超过阈值 ⇔ 等价于 X \xLeftrightarrow{等价于}X 等价于 X满足最小支持度
  2. 性质:
    • 如果 X X X频繁 → X \text{→}X →X的子集也一定频繁(向下封闭)
    • 如果 X X X非频繁 → X \text{→}X →X的超集(如 { X , x n + 1 , x n + 2 , . . . } \{X,x_{n+1},x_{n+2},...\} {X,xn+1,xn+2,...})也一定非频繁

2️⃣闭合集 & \& &最大集:为解决组合爆炸( 规则数目 ∝ 2 数据集规模 规则数目\text{ ∝ }2^{数据集规模} 规则数目 ∝ 2数据集规模)问题

  1. 定义:对于事务集 D D D

    集合 含义 意义
    闭合集(模式) X X X闭合 ⇔ 等价于 X \xLeftrightarrow{等价于}X 等价于 X频繁 ∩ X \text{∩}X ∩X所有超集的支持度小于 X X X的 D D D无损压缩
    最大集(模式) X X X最大 ⇔ 等价于 X \xLeftrightarrow{等价于}X 等价于 X频繁 ∩ X \text{∩}X ∩X所有超集都非频繁 D D D有损压缩
  2. 示例: D = { A 1 = ⟨ a 1 , a 2 , ... , a 100 ⟩ , A 2 = ⟨ a 1 , a 2 , ... , a 50 ⟩ } D\text{=}\left\{A_1\text{=}\left\langle a_1, a_2, \ldots, a_{100}\right\rangle,A_2\text{=}\left\langle a_1, a_2, \ldots, a_{50}\right\rangle\right\} D={A1=⟨a1,a2,...,a100⟩,A2=⟨a1,a2,...,a50⟩},最小支持度 =1 \text{=1} =1

    集合 Item \textbf{Item} Item
    闭合模式 A 1 A_1 A1(支持度 =1 / \text{=1}/ =1/无频繁超集), A 2 A_2 A2(支持度 =2/ \text{=2/} =2/频繁超集支持度 =2 \text{=2} =2)
    最大模式 A 1 A_1 A1(支持度 =1 / \text{=1}/ =1/无频繁超集)
    所有模式 所有的频繁子集,比如 ⟨ a 1 , ... , a 49 ⟩ \left\langle a_1, \ldots, a_{49}\right\rangle ⟨a1,...,a49⟩

2.2. \textbf{2.2.} 2.2. Apriori \textbf{Apriori} Apriori算法

0️⃣总论

  1. 原有方案:原始数据 → ( 暴力 ) 生成 \xrightarrow{(暴力)生成} (暴力)生成 关联规则
  2. 现有方案:原始数据 → Apriori算法 \xrightarrow{\text{Apriori}算法} Apriori算法 频繁项集 → 生成 \xrightarrow{生成} 生成 关联规则

1️⃣算法流程:原始数据 → Apriori算法 \xrightarrow{\text{Apriori}算法} Apriori算法 频繁项集

  1. 初始化:事务 D → 清洗 D\xrightarrow{清洗} D清洗 单项 { { T 1 } , { T 2 } , . . . , { T n } } → 满足最小支持度 \small\{\{\mathrm{T_1}\}, \{\mathrm{T_2}\},..., \{\mathrm{T_n}\}\}\xrightarrow{满足最小支持度} {{T1},{T2},...,{Tn}}满足最小支持度 L 1 = { { T i 1 } , { T i 2 } , . . . , { T i m } } L_1\text{=}\small\{\{\mathrm{T_{i_1}}\}, \{\mathrm{T_{i_2}}\},..., \{\mathrm{T_{i_m}}\}\} L1={{Ti1},{Ti2},...,{Tim}}
  2. 主循环:候选集 L 1 → 执行以下操作 L_1\xrightarrow{执行以下操作} L1执行以下操作 候选集 L 2 L_2 L2 (下一轮循环)
    • 组合:本轮频繁项集 L 1 → ( 具体见例子 ) 两两组合 L_{1}\xrightarrow(具体见例子){两两组合} L1两两组合 (具体见例子)候选项集 C 2 C_2 C2
    • 剪枝:候选项集 C 2 → 去处有非频繁子集的项 C_2\xrightarrow{去处有非频繁子集的项} C2去处有非频繁子集的项 下一候频繁集 L 2 L_2 L2,以进行下轮以此循环
  3. 输出:当循环到 L α L_\alpha Lα为空集时停止循环,频繁项集 L = { L 1 ∪ L 2 ∪ . . . ∪ L α } L\text{=}\{L_1\text{∪}L_2\text{∪}...\text{∪}L_\alpha\} L={L1∪L2∪...∪Lα}

2️⃣频繁项集 → 生成 \xrightarrow{生成} 生成 关联规则

  1. 基本流程:
    • 子集:频繁项集 L L L所有非空子集 S = { S 1 , S 2 , . . . , S 2 ∣ L ∣ − 2 } S\text{=}\{S_1,S_2,...,S_{2^{|L|}-2}\} S={S1,S2,...,S2∣L∣−2},任意 S i → S j S_i\text{→}S_j Si→Sj组合满足支持度
    • 规则:对每个子集计算 S i → L \ S i S_i\text{→}L\backslash{}S_i Si→L\Si的置信度,若小于阈值则视 S i → L \ S i S_i\text{→}L\backslash{}S_i Si→L\Si强相关
  2. 效率优化:
    • 原理:对 ( X → L - X ) (X\text{→}L\text{-}X) (X→L-X)置信度不满足阈值 → X ′ ⊆ X ( X ′ → L - X ′ ) \xrightarrow{X^{\prime}\text{⊆}X}(X^{\prime}\text{→}L\text{-}X^{\prime}) X′⊆X (X′→L-X′)也不满足
    • 优化:先验证 L - X L\text{-}X L-X只有单一项的规则,若不满足则剪枝/满足则再去验证 L - X L\text{-}X L-X多项的规则

2.3. \textbf{2.3.} 2.3. Apriori \textbf{Apriori} Apriori算法示例

0️⃣基本条件:事务及其项集如下表,设定最小支持度为 2 2 2

T \small\textbf{T} T Beer \small\textbf{Beer} Beer Diap. \small\textbf{Diap.} Diap. Powd \small\textbf{Powd} Powd Bread \small\textbf{Bread} Bread Umbre. \small\textbf{Umbre.} Umbre. Milk \small\textbf{Milk} Milk Deter. \small\textbf{Deter.} Deter. Cola \small\textbf{Cola} Cola
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

1️⃣ Apriori \text{Apriori} Apriori算法:得到频繁项集

  1. 初始化: L 1 ⇐ 出现超过两次的商品 { Beer,Diap,Powd,Milk } L_1\xLeftarrow{出现超过两次的商品}\{\small\text{Beer,Diap,Powd,Milk}\} L1出现超过两次的商品 {Beer,Diap,Powd,Milk}
  2. 主循环:当前为 L 1 L_1 L1
    • 组合: L 1 → 简单两两组合 C 2 = { Beer Diap , Beer Powd , Beer Milk , Diap Powd , Diap Milk , Powd Milk } L_1 \xrightarrow{\text{简单两两组合}} C_2 \text{=} \left\{ \small {\begin{bmatrix} \text{Beer} \\ \text{Diap} \end{bmatrix}}, \cancel{\begin{bmatrix} \text{Beer} \\ \text{Powd} \end{bmatrix}}, \begin{bmatrix} \text{Beer} \\ \text{Milk} \end{bmatrix}, \begin{bmatrix} \text{Diap} \\ \text{Powd} \end{bmatrix}, \cancel{ \begin{bmatrix} \text{Diap} \\ \text{Milk} \end{bmatrix}}, \cancel{ \begin{bmatrix} \text{Powd} \\ \text{Milk} \end{bmatrix}} \right\} L1简单两两组合 C2={BeerDiap,BeerPowd ,BeerMilk,DiapPowd,DiapMilk ,PowdMilk }
    • 剪枝: C 2 → 剪掉包含非频繁子集的 L 2 = { Beer Diap , Beer Milk , Diap Powd } C_2\xrightarrow{剪掉包含非频繁子集的}L_2\text{=}\left\{ \small \begin{bmatrix} \text{Beer} \\ \text{Diap} \end{bmatrix}, \begin{bmatrix} \text{Beer} \\ \text{Milk} \end{bmatrix}, \begin{bmatrix} \text{Diap} \\ \text{Powd} \end{bmatrix} \right\} C2剪掉包含非频繁子集的 L2={BeerDiap,BeerMilk,DiapPowd}
  3. 主循环:当前为 L 2 L_2 L2
    • 组合: L 2 → 组合逻辑见下表 两两组合 C 3 = { Beer Diap Milk , Beer Diap Powd } L_2 \xrightarrow组合逻辑见下表{\text{两两组合}} C_3\text{=}\left\{ \small \cancel{ \begin{bmatrix} \text{Beer} \\ \text{Diap} \\ \text{Milk} \\ \end{bmatrix}}, \cancel{ \begin{bmatrix} \text{Beer} \\ \text{Diap} \\ \text{Powd} \end{bmatrix}}\right\} L2两两组合 组合逻辑见下表C3={BeerDiapMilk ,BeerDiapPowd }

      合并的集 条件: 二者有 k -1 k\text{-1} k-1项(此处为 1 1 1)相等 操作
      L 2 1 / L 2 2 L_21/L_22 L21/L22 共有 Beer→ \text{Beer}\text{→} Beer→满足 执行组合
      L 2 1 / L 2 3 L_21/L_23 L21/L23 共有 Diap→ \text{Diap}\text{→} Diap→满足 执行组合
      L 2 2 / L 2 3 L_22/L_23 L22/L23 不满足 不执行组合
    • 剪枝: C 2 → 剪掉包含非频繁子集的 L 3 = ∅ C_2\xrightarrow{剪掉包含非频繁子集的}L_3\text{=}\varnothing C2剪掉包含非频繁子集的 L3=∅,故终止循环

  4. 输出: L = L 1 ∪ L 2 = { Beer , Diap , Powd , Milk , Beer Diap , Beer Milk , Diap Powd } L\text{=}L_1\text{∪}L_2\text{=}\left\{ \small \text{Beer}, \text{Diap}, \text{Powd}, \text{Milk}, \begin{bmatrix} \text{Beer} \\ \text{Diap} \end{bmatrix}, \begin{bmatrix} \text{Beer} \\ \text{Milk} \end{bmatrix}, \begin{bmatrix} \text{Diap} \\ \text{Powd} \end{bmatrix} \right\} L=L1∪L2={Beer,Diap,Powd,Milk,BeerDiap,BeerMilk,DiapPowd}

2️⃣生成规则 → Item Support(A,B) Support A Confidence Beer → Diaper 60 % 80 % 75 % Beer → Milk 40 % 80 % 50 % Diaper → Powd 40 % 80 % 50 % Diaper → Beer 60 % 80 % 75 % Milk → Beer 40 % 40 % 100 % Powd → Diaper 40 % 40 % 100 % etc..... \text{→ } \small \begin{array}{|c|c|c|c|} \hline \text{Item} & \text{Support(A,B)} & \text{Support A} & \text{Confidence} \\ \hline \text{Beer} \to \text{Diaper} & 60 \% & 80 \% & 75 \% \\ \hline \text{Beer} \to \text{Milk} & 40 \% & 80 \% & 50 \% \\ \hline \text{Diaper} \to \text{Powd} & 40 \% & 80 \% & 50 \% \\ \hline \text{Diaper} \to \text{Beer} & 60 \% & 80 \% & 75 \% \\ \hline \text{Milk} \to \text{Beer} & 40 \% & 40 \% & 100 \% \\ \hline \text{Powd} \to \text{Diaper} & 40 \% & 40 \% & 100 \% \\ \hline \end{array} \text{ etc.....} → ItemBeer→DiaperBeer→MilkDiaper→PowdDiaper→BeerMilk→BeerPowd→DiaperSupport(A,B)60%40%40%60%40%40%Support A80%80%80%80%40%40%Confidence75%50%50%75%100%100% etc.....

3. \textbf{3. } 3. 多层关联规则挖掘

3.1. \textbf{3.1. } 3.1. 算法概述

1️⃣基本概念

  1. 概念分层:按层次组织的数据(一般概念 → 高层→低层 \xrightarrow{\text{高层→低层}} 高层→低层 具体概念),正符合事务数据库的存储
  2. 规则示例:高层规则 (计算机 → \text{→} →电器),低层规则 (台式机 → \text{→} →打印机)

2️⃣每层最小支持度的设定

方法 描述 特点
一致 所有曾的最小支持度一致 忽略底层(地层支持度一般较低)
递减 层次越低 → \text{→} →最小支持度越低 保留底层罕见但有意义的规则
分组 专家指重点项集 → \text{→} →由此设置每层不同最小支持度 N/A \text{N/A} N/A

3️⃣分层挖掘:

  1. 含义:在多个抽象层挖掘关联规则 → \text{→} →在不同的抽象层进行转化
  2. 性质:(支持度的传播)父节点支持度 ≥ \text{≥} ≥其子节点支持度,且根结点的支持度为 100 % 100\% 100%
  3. 策略:(自顶向下)具体步骤看例子
    • 最高层:用 Apriori \text{Apriori} Apriori寻找高层频繁项集 + + +过滤事务集
    • 向下迭代:传递过滤后事务集到下一层,继续用 Apriori \text{Apriori} Apriori寻找高层频繁项集 + + +过滤事务集
    • 终止:迭代到层次(子节点)时停下

3.2. \textbf{3.2. } 3.2. 算法实例

0️⃣基本情况:

  1. 概念分层:

    分层 表示 最大支持度
    第一层(顶层) {1**, 2**, 3**, 4**} \text{\{1**, 2**, 3**, 4**\}} {1**, 2**, 3**, 4**}等 4 4 4
    第二层(中层) {11*, 12*, 21*, 22*} \text{\{11*, 12*, 21*, 22*\}} {11*, 12*, 21*, 22*}等 3 3 3
    第三层(低层) {111, 121, 211, 713} \text{\{111, 121, 211, 713\}} {111, 121, 211, 713}等 3 3 3
  2. 事务集:第 i i i位表示在第 i i i层的分类,如 524 524 524表示在高/中/低层分属第 5 5 5/第 2 2 2/第 4 4 4类

    TID \textbf{TID} TID 底层 中层 顶层
    T1 \text{T1} T1 { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221} { 11*,12*,21*,22* } \{\text{11*,12*,21*,22*}\} {11*,12*,21*,22*} { 1**, 2** } \{\text{1**, 2**}\} {1**, 2**}
    T2 \text{T2} T2 { 111,211,222,323 } \{\text{111,211,222,323}\} {111,211,222,323} { 11*,21*,22*,32* } \{\text{11*,21*,22*,32*}\} {11*,21*,22*,32*} { 1**, 2**, 3** } \{\text{1**, 2**, 3**}\} {1**, 2**, 3**}
    T3 \text{T3} T3 { 112,122,221,411 } \{\text{112,122,221,411}\} {112,122,221,411} { 11*,12*,22*,41* } \{\text{11*,12*,22*,41*}\} {11*,12*,22*,41*} { 1**, 2**, 4** } \{\text{1**, 2**, 4**}\} {1**, 2**, 4**}
    T4 \text{T4} T4 { 111,121 } \{\text{111,121}\} {111,121} { 11*,12* } \{\text{11*,12*}\} {11*,12*} { 1** } \{\text{1**}\} {1**}
    T5 \text{T5} T5 { 111,122,211,221,413 } \{\text{111,122,211,221,413}\} {111,122,211,221,413} { 11*,12*,21*,22*,41* } \{\text{11*,12*,21*,22*,41*}\} {11*,12*,21*,22*,41*} { 1**, 2**, 4** } \{\text{1**, 2**, 4**}\} {1**, 2**, 4**}
    T6 \text{T6} T6 { 211,323,524 } \{\text{211,323,524}\} {211,323,524} { 21*,32*,52* } \{\text{21*,32*,52*}\} {21*,32*,52*} { 2**, 3**, 5** } \{\text{2**, 3**, 5**}\} {2**, 3**, 5**}
    T7 \text{T7} T7 { 323,411,524,713 } \{\text{323,411,524,713}\} {323,411,524,713} { 32*,41*,52*,71* } \{\text{32*,41*,52*,71*}\} {32*,41*,52*,71*} { 3**, 4**, 5**, 7** } \{\text{3**, 4**, 5**, 7**}\} {3**, 4**, 5**, 7**}

1️⃣顶层的 Apriori \text{Apriori} Apriori算法:最小支持度为 4 4 4

  1. 初始化:

    • 初始频繁集: L ( 1 , 1 ) = { {1**},{2**} } ⇐ 得到 L(1,1)\text{=}\{\text{\{1**\},\{2**\}}\}\xLeftarrow{得到} L(1,1)={{1**},{2**}}得到 筛选出 { i ** } \{i\text{**}\} {i**}中支持度大于 5 5 5的

    • 表过滤: L ( 1 , 1 ) L(1,1) L(1,1)中项的子节点必定以 1 / 2 1/2 1/2开头,故滤掉以其它开头的

      TID \textbf{TID} TID 当前事务表 T1 \textbf{T1} T1 滤后事务表 T2 \textbf{T2} T2
      T1 \text{T1} T1 { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221} { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221}
      T2 \text{T2} T2 { 111,211,222,323 } \{\text{111,211,222,323}\} {111,211,222,323} { 111,211,222 } \{\text{111,211,222}\} {111,211,222}
      T3 \text{T3} T3 { 112,122,221,411 } \{\text{112,122,221,411}\} {112,122,221,411} { 112,122,221 } \{\text{112,122,221}\} {112,122,221}
      T4 \text{T4} T4 { 111,121 } \{\text{111,121}\} {111,121} { 111,121 } \{\text{111,121}\} {111,121}
      T5 \text{T5} T5 { 111,122,211,221,413 } \{\text{111,122,211,221,413}\} {111,122,211,221,413} { 111,122,211,221 } \{\text{111,122,211,221}\} {111,122,211,221}
      T6 \text{T6} T6 { 211,323,524 } \{\text{211,323,524}\} {211,323,524} { 211 } \{\text{211}\} {211}
      T7 \text{T7} T7 { 323,411,524,713 } \{\text{323,411,524,713}\} {323,411,524,713} { ∅ } \{\varnothing\} {∅}
  2. 主循环:当前为 L ( 1 , 1 ) L(1,1) L(1,1)

    • 组合: L ( 1 , 1 ) → 简单两两组合 C ( 1 , 2 ) = { {1**,2** } } L(1,1) \xrightarrow{\text{简单两两组合}} C(1,2) \text{=}\{\text{\{1**,2**}\}\} L(1,1)简单两两组合 C(1,2)={{1**,2**}}
    • 剪枝: C ( 1 , 2 ) → 滤无可滤 依据T2减去包含非频繁子集的 L ( 1 , 2 ) = { {1**,2** } } C(1,2)\xrightarrow滤无可滤{依据\text{T2}减去包含非频繁子集的}L(1,2) \text{=}\{\text{\{1**,2**}\}\} C(1,2)依据T2减去包含非频繁子集的 滤无可滤L(1,2)={{1**,2**}} (不可再组合故循环结束)
  3. 输出:第一层频繁集 L ( 1 ) = { {1**},{2**} , {1**,2** } } L(1)\text{=}\{\text{\{1**\},\{2**\}},\text{\{1**,2**}\}\} L(1)={{1**},{2**},{1**,2**}};将滤后事务表 T 2 T2 T2传给下一层

2️⃣中层的 Apriori \text{Apriori} Apriori算最小支持度为 3 3 3法:

  1. 初始化:

    • 初始频繁集: L ( 2 , 1 ) = { {11*},{12*},{21*},{22*} } ⇐ 得到 L(2,1)\text{=}\{\text{\{11*\},\{12*\},\{21*\},\{22*\}}\}\xLeftarrow{得到} L(2,1)={{11*},{12*},{21*},{22*}}得到 筛出 { i j * } \{ij\text{*}\} {ij*}中支持度大于 3 3 3的

    • 事务表过滤: L ( 2 , 1 ) L(2,1) L(2,1)中项的子节点必定以 11 / 12 / 21 / 22 11/12/21/22 11/12/21/22开头,滤掉以其他开头的

      TID \textbf{TID} TID 当前事务表 T2 \textbf{T2} T2 滤后事务表 T3 \textbf{T3} T3
      T1 \text{T1} T1 { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221} { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221}
      T2 \text{T2} T2 { 111,211,222 } \{\text{111,211,222}\} {111,211,222} { 111,211,222 } \{\text{111,211,222}\} {111,211,222}
      T3 \text{T3} T3 { 112,122,221 } \{\text{112,122,221}\} {112,122,221} { 112,122,221 } \{\text{112,122,221}\} {112,122,221}
      T4 \text{T4} T4 { 111,121 } \{\text{111,121}\} {111,121} { 111,121 } \{\text{111,121}\} {111,121}
      T5 \text{T5} T5 { 111,122,211,221 } \{\text{111,122,211,221}\} {111,122,211,221} { 111,122,211,221 } \{\text{111,122,211,221}\} {111,122,211,221}
      T6 \text{T6} T6 { 211 } \{\text{211}\} {211} { 211 } \{\text{211}\} {211}
      T7 \text{T7} T7 { ∅ } \{\varnothing\} {∅} { ∅ } \{\varnothing\} {∅}
  2. 主循环:当前为 L ( 2 , 1 ) L(2,1) L(2,1)

    • 组合: L ( 2 , 1 ) → 两两组合 C ( 2 , 2 ) = { {11*,12* } , { 11*,21* } . . . . . } L(2,1) \xrightarrow\[\]{\text{两两组合}} C(2,2) \text{=}\{\text{\{11*,12*}\},\{\text{11*,21*}\}.....\} L(2,1)两两组合 C(2,2)={{11*,12*},{11*,21*}.....}
    • 剪枝: C ( 2 , 2 ) → 依据 T3 减去包含非频繁子集的 L ( 2 , 2 ) = { { 11*, 12* } { 11*, 21* } { 11*, 22* } { 12*, 22* } { 21*, 22* } } C(2,2) \xrightarrow\[\]{\text{依据 T3 减去包含非频繁子集的}} L(2,2) \text{=} \left\{ \begin{array}{l} \{\text{11*, 12*}\} \\ \{\text{11*, 21*}\} \\ \{\text{11*, 22*}\} \\ \{\text{12*, 22*}\} \\ \{\text{21*, 22*}\} \end{array} \right\} C(2,2)依据 T3 减去包含非频繁子集的 L(2,2)=⎩ ⎨ ⎧{11*, 12*}{11*, 21*}{11*, 22*}{12*, 22*}{21*, 22*}⎭ ⎬ ⎫
  3. 主循环:当前为 L ( 2 , 2 ) L(2,2) L(2,2)

    • 组合: L ( 2 , 2 ) → 两两组合 C ( 2 , 3 ) = { {11*,12*,21* } , { 11 ∗ , 12 ∗ , 22 ∗ } . . . . . } L(2,2) \xrightarrow\[\]{\text{两两组合}} C(2,3) \text{=}\{\text{\{11*,12*,21*}\},\{11*,12*,22*\}.....\} L(2,2)两两组合 C(2,3)={{11*,12*,21*},{11∗,12∗,22∗}.....}
    • 剪枝: C ( 2 , 3 ) → 依据 T3 减去包含非频繁子集的 L ( 2 , 3 ) = { { 11*,12*,22* } , { 11*,21*,22* } } C(2,3) \xrightarrow\[\]{\text{依据 T3 减去包含非频繁子集的}} L(2,3) \text{=} \left\{ \begin{array}{l} \{\text{11*,12*,22*}\} , \{\text{11*,21*,22*}\} \end{array} \right\} C(2,3)依据 T3 减去包含非频繁子集的 L(2,3)={{11*,12*,22*},{11*,21*,22*}}
  4. 主循环:当前为 L ( 2 , 3 ) L(2,3) L(2,3)

    • 组合: L ( 2 , 3 ) → 两两组合 C ( 2 , 4 ) = { {11*,12*,21*,22* } } L(2,3) \xrightarrow\[\]{\text{两两组合}} C(2,4) \text{=}\{\text{\{11*,12*,21*,22*}\}\} L(2,3)两两组合 C(2,4)={{11*,12*,21*,22*}}
    • 剪枝: C ( 2 , 4 ) → 依据 T3 减去包含非频繁子集的 L ( 2 , 4 ) = ∅ → C(2,4) \xrightarrow\[\]{\text{依据 T3 减去包含非频繁子集的}} L(2,4) \text{=}\varnothing\text{ → } C(2,4)依据 T3 减去包含非频繁子集的 L(2,4)=∅ → 停止循环
  5. 输出:第二层频繁集 L ( 2 ) = { L ( 2 , 1 ) ∪ L ( 2 , 2 ) ∪ L ( 2 , 3 ) } L(2)\text{=}\{L(2,1)\text{∪}L(2,2)\text{∪}L(2,3)\} L(2)={L(2,1)∪L(2,2)∪L(2,3)};将滤后事务表 T3 \text{T3} T3传到下一层

3️⃣底层的 Apriori \text{Apriori} Apriori算最小支持度为 3 3 3法:

  1. 初始化:

    • 初始频繁集: L ( 3 , 1 ) = { {111},{211},{221} } ⇐ 得到 L(3,1)\text{=}\{\text{\{111\},\{211\},\{221\}}\}\xLeftarrow{得到} L(3,1)={{111},{211},{221}}得到 筛选出 { i j k } \{ijk\text{}\} {ijk}中支持度大于 3 3 3的

    • 事务表过滤:接下来只考虑 { {111},{211},{221} } \{\text{\{111\},\{211\},\{221\}}\} {{111},{211},{221}}中的,故滤掉其他的

      TID \textbf{TID} TID 当前事务表 T3 \textbf{T3} T3 滤后事务表 T4 \textbf{T4} T4
      T1 \text{T1} T1 { 111,121,211,221 } \{\text{111,121,211,221}\} {111,121,211,221} { 111,,211,221 } \{\text{111,,211,221}\} {111,,211,221}
      T2 \text{T2} T2 { 111,211,222 } \{\text{111,211,222}\} {111,211,222} { 111,211 } \{\text{111,211}\} {111,211}
      T3 \text{T3} T3 { 112,122,221 } \{\text{112,122,221}\} {112,122,221} { 221 } \{\text{221}\} {221}
      T4 \text{T4} T4 { 111,121 } \{\text{111,121}\} {111,121} { 111 } \{\text{111}\} {111}
      T5 \text{T5} T5 { 111,122,211,221 } \{\text{111,122,211,221}\} {111,122,211,221} { 111,211,221 } \{\text{111,211,221}\} {111,211,221}
      T6 \text{T6} T6 { 211 } \{\text{211}\} {211} { 211 } \{\text{211}\} {211}
      T7 \text{T7} T7 { ∅ } \{\varnothing\} {∅} { ∅ } \{\varnothing\} {∅}
  2. 主循环:当前为 L ( 3 , 1 ) L(3,1) L(3,1)

    • 组合: L ( 3 , 1 ) → 两两组合 C ( 3 , 2 ) = { {111,211 } , {111,221 } , {211,221 } } L(3,1) \xrightarrow\[\]{\text{两两组合}} C(3,2) \text{=}\{\text{\{111,211}\},\text{\{111,221}\},\text{\{211,221}\}\} L(3,1)两两组合 C(3,2)={{111,211},{111,221},{211,221}}
    • 剪枝: C ( 3 , 2 ) → 依据 T4 减去包含非频繁子集的 L ( 3 , 2 ) ={111,221 } → C(3,2) \xrightarrow\[\]{\text{依据 T4 减去包含非频繁子集的}} L(3,2) \text{=}\text{\{111,221}\}\text{ → } C(3,2)依据 T4 减去包含非频繁子集的 L(3,2)={111,221} → 无法再组合(停止循环)
  3. 输出:第一层频繁集 L ( 1 ) = { {111},{211},{221} , {111,221 } } L(1)\text{=}\{\text{\{111\},\{211\},\{221\}},\text{\{111,221}\}\} L(1)={{111},{211},{221},{111,221}}

4. \textbf{4. } 4. 多维关联规则挖掘

1️⃣多维关联规则

  1. 含义:涉及两个或多个维或谓词的关联规则
  2. 示例:<Age: 30..39> and <Married: Yes> -> <NumCars: 2>
    RecordID Age Married NumCars 100 23 No 1 200 25 Yes 1 300 29 No 0 400 34 Yes 2 500 38 Yes 2 \small \begin{array}{|c|c|c|c|} \hline \text{RecordID} & \text{Age} & \text{Married} & \text{NumCars} \\ \hline 100 & 23 & \text{No} & 1 \\ \hline 200 & 25 & \text{Yes} & 1 \\ \hline 300 & 29 & \text{No} & 0 \\ \hline 400 & 34 & \text{Yes} & 2 \\ \hline 500 & 38 & \text{Yes} & 2 \\ \hline \end{array} RecordID100200300400500Age2325293438MarriedNoYesNoYesYesNumCars11022

2️⃣处理思路

  1. 处理对象:搜索频繁项集 → 转为 \xrightarrow{转为} 转为 搜索频繁谓词集
  2. 量化预处理:数值型关联规则挖掘 → 转化 \xrightarrow{转化} 转化 布尔型关联规则挖掘,如下例子
    RecordID Age Married NumCars 100 23 No 1 200 25 Yes 1 300 29 No 0 400 34 Yes 2 500 38 Yes 2 600 45 No 3 700 50 Yes 1 800 60 No 0 \small \begin{array}{|c|c|c|c|} \hline \text{RecordID} & \text{Age} & \text{Married} & \text{NumCars} \\ \hline 100 & 23 & \text{No} & 1 \\ \hline 200 & 25 & \text{Yes} & 1 \\ \hline 300 & 29 & \text{No} & 0 \\ \hline 400 & 34 & \text{Yes} & 2 \\ \hline 500 & 38 & \text{Yes} & 2 \\ \hline 600 & 45 & \text{No} & 3 \\ \hline 700 & 50 & \text{Yes} & 1 \\ \hline 800 & 60 & \text{No} & 0 \\ \hline \end{array} RecordID100200300400500600700800Age2325293438455060MarriedNoYesNoYesYesNoYesNoNumCars11022310

3️⃣处理算法: ARCS \text{ARCS} ARCS大致流程

  1. 分箱:根据数据的分布,将数值属性离散化到箱(固定区间)
  2. 搜索:找出频繁谓词集,得到一系列强关联规则(如下)
    • RuleSet = { age ( X , 35 ) ∧income ( X , 31 K ... 40 K ) ⇒buys ( X , TV ) age ( X , 34 ) ∧income ( X , 41 K ... 50 K ) ⇒buys ( X , TV ) age ( X , 35 ) ∧income ( X , 41 K ... 50 K ) ⇒buys ( X , TV ) \text{RuleSet =}\begin{cases} \text{age}(X, 35) \text{∧} \text{income}(X, 31K \ldots 40K) \text{⇒} \text{buys}(X, \text{TV}) \\\\ \text{age}(X, 34) \text{∧} \text{income}(X, 41K \ldots 50K) \text{⇒} \text{buys}(X, \text{TV}) \\\\ \text{age}(X, 35) \text{∧} \text{income}(X, 41K \ldots 50K) \text{⇒} \text{buys}(X, \text{TV}) \end{cases} RuleSet =⎩ ⎨ ⎧age(X,35)∧income(X,31K...40K)⇒buys(X,TV)age(X,34)∧income(X,41K...50K)⇒buys(X,TV)age(X,35)∧income(X,41K...50K)⇒buys(X,TV)
  3. 聚类:将所得强关联规则映射到 2 D 2D 2D栅格上,得到范围矩形
    • RuleSet→age ( X , 34 - 35 ) ∧income ( X , 31 K - 40 K ) ⇒buys ( X , TV ) \text{RuleSet}\text{→}\text{age}(X,34\text{-}35) \text{∧} \text{income}(X, 31K\text{-}40K) \text{⇒} \text{buys}(X, \text{TV}) RuleSet→age(X,34-35)∧income(X,31K-40K)⇒buys(X,TV)
相关推荐
科技每日热闻1 小时前
AI 赋能财务资金管理、风险预警、经营数据分析,合适的云上财务智能 Agent 有哪些?—— 优先采用 Amazon Quick 四链路解决方案
人工智能·ai·数据挖掘·数据分析
Chen—LSN2 小时前
C语言——数据在内存中的存储
c语言·开发语言·经验分享·笔记
147API3 小时前
蒸馏模型数据漂移怎么监控,从输入变化到回归验证
人工智能·数据挖掘·回归
bitbrowser12 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家12 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
AI云海13 小时前
天幕红尘笔记
笔记
青山是哪个青山15 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
蒸蒸yyyyzwd17 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
DeviceHub19 小时前
硬件工程师选型笔记:ALPS SKPMAPE010 与 Tonevee TS-3025 贴片轻触开关 PIN TO PIN 评估指南
笔记
nnerddboy20 小时前
LoRa自学笔记01:原理与学习路线
笔记·学习