数据挖掘-关联规则学习-Apriori算法原理

这篇具有很好参考价值的文章主要介绍了数据挖掘-关联规则学习-Apriori算法原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言:

比如你女朋友,低头玩手指+沉默,那大概率生气了,那这就是你总结出来的规则。啤酒与尿布的例子相信很多人都听说过吧,故事是这样的:在一家超市中,人们发现了一个特别有趣的现象,尿布与啤酒这两种风马牛不相及的商品居然摆在一起,但这一奇怪的举措居然使尿布和啤酒的销量大幅增加了。为什么有这么奇怪现象呢?是因为美国妇女在丈夫回家前买尿布,然后丈夫顺手买了自己喜欢的啤酒,所以发生了这么有趣的事情。
很多人只记住了啤酒尿不湿,很少深入思考,我们稍微转换下,日常的事情,也存在非常多的关联规则?
此段引言来自这个链接

一、关联分析是什么?

关联分析亦称为关联规则学习。
关联分析就是从大规模数据中,发现对象之间隐含关系与规律的过程。
通常,关联关系表现为某些物品在一起出现的频率大小

二、基本概念

1. 项

项,指的是数据集中的一个对象
苹果,可以称之为项。
汽车,可以称之为项。
1(数字一),可以称之为项。

2. 项集

项集就是若干项构成的集合。
{苹果},可以称之为项集。{苹果,香蕉},可以称之为项集。{1,2,3},可以称之为项集。

关联规则有三个核心概念需要理解:支持度、置信度、提升度

3. 支持度

支持度为某项集在数据集中出现的频率。即项集在数据集中出现的次数除以数据集中所有记录的数量.
s u p p o r t ( A ) = c o u n t ( A ) c o u n t ( D a t a B a s e ) = P ( A ) support(A)=\frac{count(A)}{count(DataBase)}=P(A) support(A)=count(DataBase)count(A)=P(A)
也就是说,支持度指某个 “ 物品 ” 集合在所有集合中出现的概率
支持度体现的是某项集的频繁程度,只有某项集的支持度达到一定程度,我们才有研究分析该项集的必要。

4. 置信度

关联规则{ A -> B }中,置信度为A与B同时出现的次数,除以A出现的次数。
C o n f i d e n c e ( A − > B ) = c o u n t ( A B ) c o u n t ( A ) = c o u n t ( A B ) c o u n t ( D a t a B a s e ) c o u n t ( A ) c o u n t ( D a t a B a s e ) = P ( A B ) P ( A ) = P ( B ∣ A ) Confidence( A -> B )=\frac{count(AB)}{count(A)} =\frac{\frac{count(AB)}{count(DataBase)}}{\frac{count(A)}{count(DataBase)}}=\frac{P(AB)}{P(A)}=P(B|A) Confidence(A>B)=count(A)count(AB)=count(DataBase)count(A)count(DataBase)count(AB)=P(A)P(AB)=P(BA)
也就是说,“置信度指在包含某个物品集合的交易中,同时包含另一个物品集合的概率”。
置信度体现的是关联规则的可靠程度,如果关联规则的{ A -> B }的置信度较高,则说明当A发生时,B有很大概率也会发生,这样就有可能带来研究价值。

5. 提升度

关联规则{ A -> B }中,提升度为{ A -> B }的置信度除以B的支持度。
l i f t ( A − > B ) = C o n d i d e n c e ( A − > B ) s u p p o r t ( B ) = P ( B ∣ A ) P ( B ) = P ( A B ) P ( A ) P ( B ) lift( A -> B )=\frac{Condidence( A->B )}{support(B)}=\frac{P(B|A)}{P(B)}=\frac{P(AB)}{P(A)P(B)} lift(A>B)=support(B)Condidence(A>B)=P(B)P(BA)=P(A)P(B)P(AB)
也就是说,“提升度是在知道 A 的条件下,同时包含 B 的概率与预期同时包含 B 的概率之比
提升度体现的是组合(应用关联规则)相对于不组合(不应用关联规则)的比值。
如果提升度大于1,则说明应用该关联规则是有价值的。
如果提升度小于1,则说明应用该关联规则起到了反方向的影响。

考虑到大部分的应用场景,应该尽可能让关联规则的提升度大于1,提升度越大,则应用该关联规则的效果越好。

6. 频繁项集

通常情况下,我们只会对频繁出现的项集进行研究。
因此,我们会设置一个支持度阈值,如果一个项集的支持度达到(大于等于)该阈值,则该项集就成为频繁项集。
特别的,如果频繁项集中含有 k 个项,我们称之为频繁 k 项集。

三、关联分析过程

  1. 从数据集中寻找频繁项集
  2. 从频繁项集中生成关联规则

寻找频繁项集,我们当然可以利用暴力搜索的方式,逐个寻找不同种组合的是否为频繁项集。
我们可以计算一下暴力搜索的次数,一项集、二项集、三项集等等,直至N项集。
C N 0 + C N 1 + C N 2 + . . . + C N N = 2 N C_{N}^{0}+C_{N}^{1}+C_{N}^{2}+ ... +C_{N}^{N}=2^{N} CN0+CN1+CN2+...+CNN=2N
当然,0项集在分析中是没有意义的。
故, C N 1 + C N 2 + . . . + C N N = 2 N − 1 C_{N}^{1}+C_{N}^{2}+ ... +C_{N}^{N}=2^{N}-1 CN1+CN2+...+CNN=2N1
在大数据的背景下, 2 N − 1 2^{N}-1 2N1会消耗大量的计算资源。
因此,暴力搜索的方法,理论可行,实际不可用
那么,是否存在一种方法能够减少计算,优化效率?

四、Apriori算法原理

为了降低运算量,使用Apriori算法进行优化。
算法有两个性质:

  • 如果一个项集是频繁项集,则其所有子集(非空)也是频繁项集。
  • 如果一个项集(非空)是非频繁项集,则其所有超集也是非频繁项集。

证明:
频繁项集的区分以支持度为标准,即频率(概率),记为 P P P。运算过程满足概率论的基本原理。
P ( A ) ≥ P ( A B ) ≥ 支持度阈值 P(A)≥P(AB)≥支持度阈值 P(A)P(AB)支持度阈值
频繁项集{ A,B}的支持度大于阈值,项集{A}的支持度当然大于阈值,因此项集{A}也为频繁项集。
同理,
项集{C}为非频繁项集,其支持度 P ( C ) P(C) P(C)小于阈值。
P ( C D ) ≤ P ( C ) ≤ 支持度阈值 P(CD)≤P(C)≤支持度阈值 P(CD)P(C)支持度阈值
非频繁项集{ C }的支持度小于阈值,项集{CD}的支持度当然小于阈值,因此项集{CD}也为非频繁项集。

算法流程:

  1. 扫描数据集,从数据集中生成候选k项集 C k C_k Ck(k从1开始)。
  2. 计算 C k C_k Ck中,每一个项集的支持度,删除低于阈值的项集,构成频繁项集 L k L_k Lk
  3. 将频繁项集 L k L_k Lk中的元素进行组合,生成候选k+1项集 C k + 1 C_{k+1} Ck+1
  4. 重复步骤②③,直到满足以下两个条件之一时,算法结束。
    • 频繁k项集无法组合合成候选k+1项集。
    • 所有候选k项集支持度都低于指定的阈值(最小支持度),无法生成频繁k+1项集。

五、程序实现

可以使用Python中的efficient-apriori库帮助我们快速实现上述算法。文章来源地址https://www.toymoban.com/news/detail-678810.html

apriori(transactions: typing.Iterable[typing.Union[set, tuple, list]], 
        min_support: float=0.5, 
        min_confidence: float=0.5, 
        max_length: int=8, 
        verbosity: int=0, 
        output_transaction_ids: bool=False)
上面就是这个函数的参数
min_support:最小支持度
min_confidence:最小置信度
max_length:项集长度

#包安装 我们使用efficient-apriori,python中也可以利用apyori库和mlxtend库
pip install efficient-apriori

#加载包
from efficient_apriori import apriori

# 构造数据集
data = [('牛奶','面包','尿不湿','啤酒','榴莲'),
        ('可乐','面包','尿不湿','啤酒','牛仔裤'),
        ('牛奶','尿不湿','啤酒','鸡蛋','咖啡'),
        ('面包','牛奶','尿不湿','啤酒','睡衣'),
        ('面包','牛奶','尿不湿','可乐','鸡翅')]
#挖掘频繁项集和频繁规则
itemsets, rules = apriori(data, min_support=0.6,  min_confidence=1)
#频繁项集
print(itemsets)

itemsets[1] #满足条件的一元组合

itemsets[2]#满足条件的二元组合

itemsets[3]#满足条件的三元组合

#频繁规则
print(rules)
#我们把max_length=2这个参数加进去看看
itemsets, rules = apriori(data, min_support=0.6,
min_confidence=0.5,
max_length=2)
#频繁项集
print(itemsets)

到了这里,关于数据挖掘-关联规则学习-Apriori算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据挖掘|关联分析与Apriori算法详解

    关联规则分析(Association-rules Analysis)是数据挖掘领域的一个重要方法,它是以某种方式分析数据源,从数据样本集中发现一些潜在有用的信息和不同数据样本之间关系的过程。 关联是指在两个或多个变量之间存在某种规律性,但关联并不一定意味着因果关系。 关联规则是寻

    2024年04月10日
    浏览(54)
  • 数据挖掘(一)使用 Apriori 算法进行关联分析

    关联分析是一种在大规模数据集中寻找有趣关系的任务。 这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合。 关联规则(associational rules): 暗示两种物品之间可能存在很强的关系。 关联分析(关联规则学习): 从大规模数据集中寻找物品间的

    2024年02月09日
    浏览(53)
  • 关联规则挖掘(上):数据分析 | 数据挖掘 | 十大算法之一

    ⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者: 秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们 点赞👍🏻、收藏

    2024年02月07日
    浏览(56)
  • 关联规则挖掘算法--Apriori算法

    关联规则分析是数据挖掘中最活跃的研究方法之一,目的是在一个数据集中找到各项之间的关联关系,而这种关系并没有在数据中直接体现出来。Apriori算法 关联规则 学习的经典算法之一,是R.Agrawal和R.Srikartt于1944年提出的一种具有影响力的挖掘布尔关联规则挖掘频繁项集的

    2024年02月04日
    浏览(54)
  • Apriori关联规则挖掘算法函数

    假设有以下《超市商品购买.txt》数据集,每行代表一个顾客在超市的购买记录: I1: 西红柿、排骨、鸡蛋、毛巾、水果刀 I2: 西红柿、茄子、水果刀、香蕉 I3: 鸡蛋、袜子、毛巾、肥皂、水果刀 I4: 西红柿、排骨、茄子、毛巾、水果刀 I5: 西红柿、排骨、酸奶 I6: 鸡蛋、茄子、酸

    2024年02月09日
    浏览(116)
  • 【商业挖掘】关联规则——Apriori算法(最全~)

    一、关联规则挖掘 二、Apriori-关联规则算法 三、Apriori算法分解—Python大白话式实现 步骤1: 外部库调用❀  步骤2: 数据导入❀ 步骤3: 数据处理❀   步骤4:输出所有Goodlist❀ 步骤5:项集重组❀ 步骤6:支持度扫描与输出 ❀ 步骤7:根据最小支持度阈值进行减枝叶❀ 步骤

    2024年01月25日
    浏览(60)
  • 关联规则挖掘:Apriori算法的深度探讨

    在本文中,我们深入探讨了Apriori算法的理论基础、核心概念及其在实际问题中的应用。文章不仅全面解析了算法的工作机制,还通过Python代码段展示了具体的实战应用。此外,我们还针对算法在大数据环境下的性能局限提出了优化方案和扩展方法,最终以独到的技术洞见进行

    2024年02月05日
    浏览(68)
  • 大数据的常用算法(分类、回归分析、聚类、关联规则、神经网络方法、web数据挖掘)

    在大数据时代,数据挖掘是最关键的工作。大数据的挖掘是从海量、不完全的、有噪声的、模糊的、随机的大型数据库中发现隐含在其中有价值的、潜在有用的信息和知识的过程,也是一种决策支持过程。其主要基于人工智能,机器学习,模式学习,统计学等。通过对大数据

    2024年02月09日
    浏览(63)
  • 《数据挖掘基础》实验:Weka平台实现关联规则挖掘

    进一步理解关联规则算法(Apriori算法、FP-tree算法),利用weka实现数据集的挖掘处理,学会调整模型参数,读懂挖掘规则,解释规则的含义 (1)随机选取数据集为对象,完成以下内容:(用两种方法:Apriori算法、FP-tree算法) 文件导入与编辑; 参数设置说明; 结果截图;

    2024年02月02日
    浏览(58)
  • 数据挖掘十大算法之Apriori算法

    国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法: C4.5 , k-Means , SVM , Apriori , EM , PageRank , AdaBoost , kNN , Naive Bayes , CART 这十个算法涵盖了分类、聚类、统计学习、关联分析和链接分析等重要的数据挖掘研究和发展主题

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包