热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

apriori算法用于mysql_【十大经典数据挖掘算法】Apriori

【十大经典数据挖掘算法】系列1.关联分析关联分析是一类非常有用的数据挖掘方法,能从数据中挖掘出潜在的关联关系。比如,在著名的购物篮事务(marketba

【十大经典数据挖掘算法】系列

1. 关联分析

关联分析是一类非常有用的数据挖掘方法,能从数据中挖掘出潜在的关联关系。比如,在著名的购物篮事务(market basket transactions)问题中,

TID

Iterms

1

{Bread, Milk}

2

{Bread, Diapers, Beer, Eggs}

3

{Milk, Diapers, Beer, Cola}

4

{Bread, Milk, Diapers, Beer}

5

{Bread, Milk, Beer, Cola}

关联分析则被用来找出此类规则:顾客在买了某种商品时也会买另一种商品。在上述例子中,大部分都知道关联规则:{Diapers} → {Beer};即顾客在买完尿布之后通常会买啤酒。后来通过调查分析,原来妻子嘱咐丈夫给孩子买尿布时,丈夫在买完尿布后通常会买自己喜欢的啤酒。但是,如何衡量这种关联规则是否靠谱呢?下面给出了度量标准。

支持度与置信度

关联规则可以描述成:项集 → 项集。项集\(X\)出现的事务次数(亦称为support count)定义为:

\[\sigma (X) = |t_i|X \subseteq t_i, t_i \in T|

\]

其中,\(t_i\)表示某个事务(TID),\(T\)表示事务的集合。关联规则\(X \longrightarrow Y\)的支持度(support):

\[s(X \longrightarrow Y) = \frac{\sigma (X \cup Y)}{|T|}

\]

支持度刻画了项集\(X \cup Y\)的出现频次。置信度(confidence)定义如下:

\[s(X \longrightarrow Y) = \frac{\sigma (X \cup Y)}{\sigma (X)}

\]

对概率论稍有了解的人,应该看出来:置信度可理解为条件概率\(p(Y|X)\),度量在已知事务中包含了\(X\)时包含\(Y\)的概率。

对于靠谱的关联规则,其支持度与置信度均应大于设定的阈值。那么,关联分析问题即等价于:对给定的支持度阈值min_sup、置信度阈值min_conf,找出所有的满足下列条件的关联规则:

\begin{aligned}

& 支持度 >= min\_sup \cr

& 置信度 >= min\_conf \cr

\end{aligned}

把支持度大于阈值的项集称为频繁项集(frequent itemset)。因此,关联规则分析可分为下列两个步骤:

生成频繁项集\(F=X \cup Y\);

在频繁项集\(F\)中,找出所有置信度大于最小置信度的关联规则\(X \longrightarrow Y\)。

暴力方法

若(对于所有事务集合)项的个数为\(d\),则所有关联规则的数量:

\[\begin{aligned}

& \sum_{i}^d C_d^i \sum_{j}^{d-i} C_{d-i}^j \cr

= & \sum_{i}^d C_d^i ( 2^{d-i} -1) \cr

= & \sum_{i}^d C_d^i * 2^{d-i} - 2^d + 1 \cr

= & (3^d - 2^d) - 2^d +1 \cr

= & 3^d - 2^{d+1} + 1

\end{aligned}

\]

如果采用暴力方法,穷举所有的关联规则,找出符合要求的规则,其时间复杂度将达到指数级。因此,我们需要找出复杂度更低的算法用于关联分析。

2. Apriori算法

Agrawal与Srikant提出Apriori算法,用于做快速的关联规则分析。

频繁项集生成

根据支持度的定义,得到如下的先验定理:

定理1:如果一个项集是频繁的,那么其所有的子集(subsets)也一定是频繁的。

这个比较容易证明,因为某项集的子集的支持度一定不小于该项集。

定理2:如果一个项集是非频繁的,那么其所有的超集(supersets)也一定是非频繁的。

定理2是上一条定理的逆反定理。根据定理2,可以对项集树进行如下剪枝:

31890828f1e1d936a3d9b2d483eb314b.png

项集树共有项集数:\(\sum_{k=1}^d k \times C_{d}^k = d \cdot 2^{d-1}\)。显然,用穷举的办法会导致计算复杂度太高。对于大小为\(k-1\)的频繁项集\(F_{k-1}\),如何计算大小为\(k\)的频繁项集\(F_k\)呢?Apriori算法给出了两种策略:

\(F_k = F_{k-1} \times F_1\)方法。之所以没有选择\(F_{k-1}\)与(所有)1项集生成\(F_k\),是因为为了满足定理2。下图给出由频繁项集\(F_2\)与\(F_1\)生成候选项集\(C_3\):

8a36aeea37248175de8f9e0cbed2f519.png

\(F_k = F_{k-1} \times F_{k-1}\)方法。选择前\(k-2\)项均相同的\(f_{k-1}\)进行合并,生成\(F_{k-1}\)。当然,\(F_{k-1}\)的所有\(f_{k-1}\)都是有序排列的。之所以要求前\(k-2\)项均相同,是因为为了确保\(F_k\)的\(k-2\)项都是频繁的。下图给出由两个频繁项集\(F_2\)生成候选项集\(C_3\):

c5ca4e120f64f9d9fa23efff67aa7758.png

生成频繁项集\(F_k\)的算法如下:

3100877e0b08c5d45f4acff072fe3d3e.png

关联规则生成

关联规则是由频繁项集生成的,即对于\(F_k\),找出项集\(h_m\),使得规则\(f_k-h_m \longrightarrow h_m\)的置信度大于置信度阈值。同样地,根据置信度定义得到如下定理:

定理3:如果规则\(X \longrightarrow Y-X\)不满足置信度阈值,则对于\(X\)的子集\(X'\),规则\(X' \longrightarrow Y-X'\)也不满足置信度阈值。

根据定理3,可对规则树进行如下剪枝:

f4ee3e68305c85f136ded994e61e8894.png

关联规则的生成算法如下:

6efc1addf25470eac9d6f6758899f199.png

3. 参考资料

[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.



推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 这篇文章主要讲解了“怎么用Python写一个电信客户流失预测模型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入, ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Spark面试题汇总大全
    1RDD简介RDD是Spark最基本也是最根本的数据抽象,它具备像MapReduce等数据流模型的容错性,并且允许开发人员在大型集群上执行基于内存的计 ... [详细]
  • 转载请注明原文地址:http:www.cnblogs.comygj0930p6409067.html1:HammingdistanceTheHammin ... [详细]
author-avatar
phpfinder
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有