文章目录

  • 0. 前言
  • 1. Apriori算法
    • 1.1. 寻找频繁项集
    • 1.2. 挖掘关联规则
  • 2. FP-growth算法
    • 2.1. 构建FP树
    • 2.2. 寻找频繁项集

如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

0. 前言

关联分析:从大规模的数据集中,寻找不同特征或者物品之间的隐含关系

关联分析通常由两步组成,从数据中寻找频繁项集,然后从频繁项集中挖掘关联规则

给出以下例子:

交易号码 商品
0 豆奶、莴苣
1 莴苣、尿布、葡萄酒、甜菜
2 豆奶、尿布、葡萄酒、橙汁
3 莴苣、豆奶、尿布、葡萄酒
4 莴苣、豆奶、尿布、橙汁
  • 频繁项集:经常出现在一块的物品的集合,例如{豆奶、尿布}
  • 关联规则:暗示两种物品之间可能存在很强的关系,例如由{尿布}可以推断出可能含有{葡萄酒}
  • 支持度:定义为数据集中包含该项集的记录所占的比例,例如{豆奶、尿布}支持度为35\frac{3}{5}53​,用最小支持度划分频繁项集
  • 置信度:针对一条关联规则P→HP\rightarrow HP→H,P称为前件,H称为后件,置信度定义为support(PH)support(P)\frac{support(PH)}{support(P)}support(P)support(PH)​,例如尿布→\rightarrow→葡萄酒的置信度为34\frac{3}{4}43​,用最小置信度划分关联规则

1. Apriori算法

1.1. 寻找频繁项集

例如一个数据集中,共有4种物品,则可能组成的频繁项集,如下图所示(图源:机器学习实战):

如果某个项是频繁的,那么这个项的所有子集也是频繁的。

逆否命题:如果某个项是非频繁的,那么这个项的所有超集也是非频繁的。例如,如果{23}\{23\}{23}是非频繁的,那么{023}{123}{0123}\{023\}\ \{123\}\ \{0123\}{023} {123} {0123}都是非频繁的,可以降低计算量。

Apriori算法寻找频繁项集的流程:

  1. 生成只包含单个物品的集合C1C_1C1​
  2. 去掉不满足最小支持度的项,剩余的项组成集合L1L_1L1​,将满足的项加入频繁项集
  3. 从L1L_1L1​中进行组合,生成项长度为2的集合C2C_2C2​
  4. 去掉不满足最小支持度的项,剩余的项组成集合L2L_2L2​,将满足的项加入频繁项集
  5. 从L2L_2L2​中进行组合,生成项长度为3的集合C3C_3C3​
  6. 如此循环迭代,直到只有一个项集无法进行组合,或者没有满足最小支持度的项集为止

1.2. 挖掘关联规则

对于每一个频繁项,都可挖掘出许多对关联规则,例如{0123}\{0123\}{0123},如下图所示(图源:机器学习实战):

如果某条规则不满足最小可信度的要求,则该规则的子集都不满足最小可信度的要求,即包含该后件的规则,都不满足最小可信度要求。例如规则{012}→{3}\{012\}\rightarrow \{3\}{012}→{3}不满足最小可信度,则后件中包含{3}\{3\}{3}的均不满足最小可信度要求,可以降低计算量。

Apriori算法挖掘关联规则的流程:

  1. 遍历频繁项集中所有频繁项
  2. 对于每一个频繁项,创建一个后件只包含1个元素的规则列表
  3. 去掉不满足最小可信度的规则,记录满足规则的后件
  4. 从满足规则的后件中进行组合,组成后件包含2个元素的规则列表
  5. 去掉不满足最小可信度的规则,记录满足规则的后件
  6. 从满足规则的后件中进行组合,组成后件包含3个元素的规则列表
  7. 如此迭代循环,直到前件只包含1个元素,或者没有满足最小可信度的后件为止

2. FP-growth算法

在Apriori算法中,寻找频繁项集,需要对每一个可能的频繁项扫描一遍数据集计算支持度,计算量庞大。

在FP-growth算法中,寻找频繁项集,只需要扫描两遍数据集,将数据存储在FP树的结构上,然后在FP树上挖掘频繁项集。

给出如下例子:

事务ID 事务中的元素项
001 r, z, h, j, p
002 z, y, x, w, v, u, t, s
003 z
004 r, x, n, o, s
005 y, r, x, z, q, t, p
006 y, z, x, e, q, s, t, m

FP树如下图所示(图源:机器学习实战):

  • FP:代表频繁模式(Frequent Pattern),一个元素项可以在一颗FP树上出现多次
  • 树上每个节点:表示当前路径出现的次数,例如{z:5}表示元素{z}在数据集中出现了5次;{y:3}表示路径{y, x, z}在数据集中出现了3次
  • 头指针表:给出了每个元素在数据集中出现的次数。部分元素因为不满足最小支持度的要求,所以不储存在FP树中

在FP-growth算法中,同样采用了Apriori算法的思想,如果某个项是非频繁的,那么这个项的所有超集也是非频繁的

2.1. 构建FP树

构建FP树的过程:

  1. 计算每个单个元素的频率,并根据最小支持度,滤除不满足的元素
  2. 对数据集进行处理,按照元素的绝对出现频率排序,滤除不满足最小支持度的元素
  3. 遍历数据集,从根节点开始递归添加路径,存在则将数值增加,不存在则创建新的节点

例如根据上述的头指针表,元素排序为{z:5, x:4, y:3, s:3, r:3, t:3},所以处理后的数据为:

事务ID 事务中的元素项 过滤及排序后的元素
001 r, z, h, j, p z, r
002 z, y, x, w, v, u, t, s z, x, y, s, t
003 z z
004 r, x, n, o, s x, s, r
005 y, r, x, z, q, t, p z, x, y, r, t
006 y, z, x, e, q, s, t, m z, x, y, s, t

例如下图所示(图源:机器学习实战),对于第一条数据,根节点不存在子节点{z},所以创建新的子节点{z},递归节点{z},因不存在子节点{r},所以创建新的子节点{r},对于第二条数据,根节点存在子节点{z},所以数值增加,递归节点{z},因不存在子节点{x},所以创建新的子节点{x},递归节点{x}…。

2.2. 寻找频繁项集

  • 条件模式基(conditional pattern base):这个元素所有前缀路径(prefix path)的集合
  • 前缀路径(prefix path):当前元素到根节点之间的路径(不包括当前元素和根节点)

利用FP树寻找频繁项集的过程:

  1. 对于头指针表中的每一个元素,获取其条件模式基(所有前缀路径的集合)
  2. 将条件模式基中每一条前缀路径作为一条数据,构建新数据集,在这个数据集上构建条件FP树
  3. 取头指针表中的每一个元素,与上一轮递归的频繁项集构成新的频繁项集(上一轮的FP树头指针表单个元素一定满足最小支持度,这轮FP树头指针表单个元素也一定满足最小支持度,这轮FP树的数据是由上轮单个元素的前缀路径组成,所以这两个满足最小支持度的元素在原始数据集中一定有满足最小支持度的组合)
  4. 继续对于条件FP树的头指针表中的每一个元素,获取其条件模式基,构建条件FP树
  5. 如此递归过程,直到无法构建出FP树为止

举个例子:首先构建了一棵FP树,此时FP树中的单个元素均满足最小支持度(假设有{a}, {b}, {c}, {d}, {e}5个元素),遍历其中的每一个元素(假设此时遍历{a}),先将元素{a}加入总的频繁项集(能构建FP树,说明单个元素满足最小支持度),再寻找条件模式基,根据这些前缀路径递归构建一棵条件FP树(假设条件FP树中有{b}, {c}, {d}3个元素,{e}不满足最小支持度)复制上一层递归的频繁项集{a},将当前遍历元素{b}加入复制的频繁项集中构成{a, b},然后再将{a, b}加入总的频繁项集(因为{a}{b}均能构建FP树,且{b}的FP树是由{a}的前缀路径作为数据,所以{a,b}也一定满足最小支持度)继续递归遍历头指针表中每一个元素的条件模式基,构建条件FP树,此时复制的频繁项集为{a,b}…。


如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

西瓜书+实战+吴恩达机器学习(十五)无监督学习之关联分析(Apriori, FP-growth)相关推荐

  1. 西瓜书+实战+吴恩达机器学习(五)监督学习之线性判别分析 Linear Discriminant Analysis

    文章目录 0. 前言 1. 线性判别分析参数求解方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 线性判别分析LDA的思想非常朴素:给定数据集,设法将样例投影 ...

  2. 西瓜书+实战+吴恩达机器学习(十一)监督学习之集成学习

    文章目录 0. 前言 1. 集成方法 2. 结合策略 2.1. 平均法 2.2. 投票法 2.3. 学习法 3. 多样性度量 4. 多样性增强 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔, ...

  3. 西瓜书+实战+吴恩达机器学习(八)监督学习之朴素贝叶斯 Naive Bayes

    文章目录 0. 前言 1. 朴素贝叶斯算法 2. 半朴素贝叶斯算法 2.1. ODE 2.2. SPODE 2.3. TAN 2.4. AODE 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔 ...

  4. 西瓜书+实战+吴恩达机器学习(七)监督学习之决策树 Decision Tree

    文章目录 0. 前言 1. 划分选择 1.1. ID3决策树 1.2. C4.5决策树 1.3. CART决策树 2. 剪枝 3. 连续值处理 4. 缺失值处理 如果这篇文章对你有一点小小的帮助,请给 ...

  5. 西瓜书+实战+吴恩达机器学习(六)监督学习之逻辑回归 Logistic Regression

    文章目录 0. 前言 1. 逻辑回归参数求解方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 逻辑回归,根据数据对分类边界进行回归,以此分类. y=σ(wTx ...

  6. 西瓜书+实战+吴恩达机器学习(十三)监督学习之随机森林 Random Forest

    文章目录 0. 前言 1. 随机森林算法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 Bagging:对数据集进行有放回采样,采mmm次构成一个新的数据集,基 ...

  7. 西瓜书+实战+吴恩达机器学习(九)监督学习之k近邻 K-Nearest Neighbor

    文章目录 0. 前言 1. knn算法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 k近邻的思想就是每个样本都可以用它最接近的k个邻居来代表. 缺点是必须保存 ...

  8. 西瓜书+实战+吴恩达机器学习(四)监督学习之线性回归 Linear Regression

    文章目录 0. 前言 1. 线性回归参数求解方法 2. 线性回归正则化 2.1. 岭回归 2.2. LASSO 3. 局部加权线性回归 4. 广义线性模型 如果这篇文章对你有一点小小的帮助,请给个关注 ...

  9. 西瓜书+实战+吴恩达机器学习(二)机器学习基础(偏差、方差、调试模型技巧)

    文章目录 0. 前言 1. 偏差方差的解决方法 2. 高偏差高方差的学习曲线 3. 调试模型技巧 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 泛化误差可分解为 ...

最新文章

  1. 人群距离监测 DeepSOCIAL 最全汉化论文+源码导读
  2. fedora如何隐藏顶部状态栏_如何使用PDF Arranger来对PDF文件进行排版和修改
  3. 微信聊天和朋友圈可以拍摄和分享大视频?
  4. matlab 腐蚀 结构元素,图像的腐蚀
  5. 安卓Dialog对话框多次显示而闪退的解决办法
  6. 如何运用DDD - 实体
  7. java 邮件 超链接_将Excel范围中的超链接传输到Outlook电子邮件
  8. (转)ASP.NET MVC3默认提供了11种ActionResult的实现
  9. 独家下载 |《领军行业大数据及AI实战》解锁九大行业领军企业云上大数据及AI实战
  10. qnap威联通作文件服务器,NAS私有云老司机折腾体验记 篇二:QNAP 威联通 QTS系统简介及主要套件使用经验分享...
  11. 计算机二十四点游戏怎么玩,扑克牌二十四点怎么玩?扑克牌二十四点游戏规则介绍...
  12. 三丰三坐标编程基本步骤_贴片机编程教程,编程步骤,编程怎么编
  13. 在线ICO转换器--网站专用
  14. 数据分析之大数据分析
  15. 【毕业设计】基于单片机的宠物自动喂食系统 - 物联网 嵌入式 单片机 宠物喂食系统 宠物投食系统
  16. 微信小程序 之 发布流程
  17. Hibernate入门4.核心技能
  18. ST-Link SWD接口接线
  19. 协程大批量爬取是要被封IP的,最优秀的方法就是在被封IP时候立马切换IP
  20. 诺基亚计划接入鸿蒙系统!官方回应,反转来了?

热门文章

  1. 单链表的尾插,头插,遍历,查找和插入
  2. 【高并发解决方案】1、高并发解决方案汇总
  3. windows查看进程
  4. poj2485poj2395 kruskal
  5. C# 生成pdf文件客户端下载
  6. 开发smartphone应用,无法生成cab文件?
  7. 关于遍历字典的二三事
  8. kill apache
  9. Webpack 配置摘要
  10. java 格式化日期(DateFormat)