数据挖掘应用实例(db2聚合函数)

http://blog.csdn.net/pipisorry/article/details/48894977海量数据挖掘MiningMassiveDatasets(MMDs)-JureLeskovec courses学习笔记之associationrules关联规则与频繁项集挖掘{FrequentItemsets:Oftencalled”association

大家好,又见面了,我是你们的朋友全栈君。

http://blog.csdn.net/pipisorry/article/details/48894977

海量数据挖掘Mining Massive Datasets(MMDs) -Jure Leskovec courses学习笔记之association rules关联规则与频繁项集挖掘

{Frequent Itemsets: Often called “association rules,” learn a number of techniques for finding items that appear unusually often together.  The classical story of “beer and diapers” (people who buy diapers in a supermarket are unusually likely to buy beer) is an example of this data-mining technique.}

题外话: lz真的不建议看这个视频,当你看了这个视频后,你会发现,原本一个简单的问题可以通过很优雅的方式简单地解释清楚的时候,主讲人总是偏离方向,以一种相当繁琐隐晦的形式讲到另一个地方去,而让人一下子就可以明白的解释总是讲不出来,让人看不懂(说真的,那个比较老的主讲人讲解的是相当水),并且制作的ppt中的语句完全不是最好的,总是缺点什么,总要加一点注释在下面才能更好明白那是什么意思。所以关于频繁项集挖掘以及关联规则,lz建议看看《数据挖掘概念与技术》这本书中第六章 挖掘频繁模式、关联和相关性:基本概念与方法的内容,讲的相当清晰易懂)

Frequent Itemsets频繁项集

与相似性分析的区别:相似性分析,研究的对象是集合之间的相似性关系。而频繁项集分析,研究的集合间重复性高的元素子集。

Market-Basket 模型及其应用

数据挖掘应用实例(db2聚合函数)

Note: 一个item可以看成是买的一个东西,其集合就是项集。一个basket就是买的东西的集合,也是一个项集,但一般看作是多个项集的集合。

频繁项集的应用:真实超市购物篮的分析,文档或网页的关联程序分析,文档的抄袭分析,生物标志物(疾病与某人生物生理信息的关系)

应用一:人们会同时买什么

数据挖掘应用实例(db2聚合函数)

Note:

1. Run a sale on diapers; raise price of beer.是一种营销策略,但是反过来却不是。这就要分析频繁项集的原因。

2. 当然这种营销策略只对实体店有效。超市购物篮的分析,主要是针对实体销售商,而不是在线零售商,这是因为实体销售可以找点频繁项集合后,可以采取对一种频繁项商品促销,而抬高相关的频繁项其他商品的价格来获利,因为客户一般不会去另外一家店购买其他的商品。而这种策略在在线销售时,会忽略“长尾”客户的需求。对于实体销售,商品的数量和空间资源有限,所以只能针对一些畅销商品进行关注和指定策略。而对于在线销售,没有资源限制,而且客户切换商户很方便,所以实体店销售的策略不合适在线销售,在线销售更应该关注相似客户群的分析,虽然他们的购买的产品不是最畅销、频繁的,但对客户群的偏好分析,可以很容易做到对每个客户进行定制化广告推荐,所以,相似性分析对在线销售更为重要。

应用二:抄袭plagiarism检测

数据挖掘应用实例(db2聚合函数)

Note: the basket corresponding to a sentence contains all the documents in which that sentence appears.
应用三:词关联

数据挖掘应用实例(db2聚合函数)

关联规则Association Rules、支持度与置信度

Support支持度

数据挖掘应用实例(db2聚合函数) 数据挖掘应用实例(db2聚合函数)

支持度: 包含频繁项集F的集合的数目。项集的支持度就是项集应该在所有basket中出现的数目。>=项集的支持度的项集都是频繁项集。

Confidence置信度

数据挖掘应用实例(db2聚合函数)  数据挖掘应用实例(db2聚合函数)

置信度:confidence(A=>B) = P(B|A) = support(A U B)/support(A) = support_count(A U B)/support_count(A),就是itemA存在时itemB也存在的条件概率,也是频繁项A与某项B的并集的支持度 与 频繁项集A的支持度的比值。

寻找关联规则和频繁项集

关联规则挖掘两个步骤

1. 寻找所有频繁项集(满足最小支持度的项集)

2. 由频繁项集产生关联规则(满足最小支持度和最小可信度的项集)

数据挖掘应用实例(db2聚合函数)

Note: 确定频繁项集,{i}只需要support,而{i,j}则需要support*confidence.

数据挖掘应用实例(db2聚合函数)

Note:

1. 这种寻找关联规则的方法步骤是:先找到支持度>=cs的,然后去掉其中一个item j,找到支持度>=s的,这样去掉j后的项集{i}->j的置信度>=c,{i}->j就是一个关联规则。

2. 这种解释完全没有《数据挖掘概念与技术》中的解释清晰明了。

频繁项集的计算模型

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数)

算法瓶颈

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数)

寻找频繁二项集的算法

数据挖掘应用实例(db2聚合函数)

Naive Algorithm朴素算法

数据挖掘应用实例(db2聚合函数)

关联规则的整体性能有第一步决定,给定n项,可能有2的n次方个候选项。当然这个算法不是很有效,后面会用Apriori算法代替。

频繁项对{i, j}在内存中的存放方式

{用什么数据结构来存储频繁二项集数对更有效}

数据挖掘应用实例(db2聚合函数) 

Triangular Matrix三角阵方法

{采用一个数组来存储这个三角阵中的元素,它可以节省二维数组一半的空间}

数据挖掘应用实例(db2聚合函数)

Note: translate from an items name in the data to its integer.A hash table whose key is the original name of the item in the data will do just fine.

数据挖掘应用实例(db2聚合函数)
Note: 因为pairs存放在一个一维数组中。则频繁对(i, j)存放的位置就是上面这个公式。

Tabular三元组方法

{当频繁项对的数目小于C(n, 2)的数目的1/3时,三元组的方式相对于三角阵比较有优势}

数据挖掘应用实例(db2聚合函数)

Note: 链表实现需要指针指向下一个,这样就是16p而不是12p了。

两种方法的比较和取舍

数据挖掘应用实例(db2聚合函数)

如果有大于1/3的候选二项集是频繁二项集,那么使用Triangular结构存储比较好。if more than one-third of possible pairs are present in at least one basket,you prefer the triangular matrix.

设频繁一项集数目为N,频繁二项集的数目为M,候选二项集自然就是N^2/2。则使用Triangular矩阵存储频繁二项集的空间为4*N^2/2, 使用Tabular结构存储频繁二项集的空间为12*M。当大于1/3的候选二项集是频繁二项集,也就是1/3 * N^2/2 < M,这时4*N^2/2 < 12*M,使用Triangular矩阵存储频繁二项集的空间较小。

皮皮blog

A-priori算法

{通过限制候选产生来发现频繁项集。Aprior有点类似广度优先的算法。}

频繁项集的先验性质:单调性和反单调性

数据挖掘应用实例(db2聚合函数)

Note: 寻找频繁二项集是扫描两次,频繁k项集当然是k次。if you want to go pass pairs to larger item sets,then you need k passes, define frequent items that’s of size up to K.

A-priori算法步骤

频繁二项集的挖掘

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数)  数据挖掘应用实例(db2聚合函数)

If there’s still too many counts to maintain in main memory,we need to try something else,a different algorithm,splitting the task among different processors, or even buying more memory.

A-Priori算法中使用Triangular Matrix

数据挖掘应用实例(db2聚合函数)  数据挖掘应用实例(db2聚合函数)

Note:

1. 也就是第一次扫描后,选出频繁一项集并重新编号,组成Triangular Matrix。在Triangular Matrix中再选出频繁二项集重新编号,并组成Triangular Matrix,再进行下一次Apriori算法的计算。

2. There are better ways to organize the table that save space,if the fraction of items that are frequent is small.For example, we could use a hash table in which we stored only the frequent items with the key being the old number and the associated value being the new number.(也就是Tabular?)

频繁K项集挖掘

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数) 数据挖掘应用实例(db2聚合函数)

数据挖掘概念与技术中对Apriori算法的图解

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数)

数据挖掘概念与技术中对Apriori算法的描述

数据挖掘应用实例(db2聚合函数)

数据挖掘应用实例(db2聚合函数)

是不是简单清晰得多!

Apriori算法内存需求分析

每次计算一个频繁k{k = 1-K}项集,都要扫描一次basket(transaction交易)

数据挖掘应用实例(db2聚合函数)

Apriori算法的内存的使用情况,左边为第一步时的内存情况,右图为第二步时内存的使用情况

pipi

在第一步(对所有item扫描计数,并选出频繁一项集)里,我们只需要两个表,一个用来保存项的名字到一个整数的映射,用这些整数值代表项,一个数组来计数这些整数。

皮皮blog

Reviews复习

Triangular Matrix和Tabular的选择

数据挖掘应用实例(db2聚合函数)

Note: S是N和M的函数。

从上面分析可知:如果有大于1/3的候选二项集是频繁二项集(也就是1/3 * N^2/2 < M <=> N^2 < 6M),那么使用Triangular结构存储比较好。并且使用Triangular矩阵存储频繁二项集的空间为4*N^2/2, 使用Tabular结构存储频繁二项集的空间为12*M。

N = 10,000, M=50,000,000,则N^2 = 10^8 < 6M=3*10^8,故使用Triangular矩阵来存储频繁二项集,空间为S = 4*N^2/2=2*10^8。(的确比12*M = 6*10^8小)

N = 100,000, M=40,000,000,则N^2 = 10^10 > 6M=2.4*10^8,故使用Tabular来存储频繁二项集,空间为S =12*M=4.8*10^8。(的确比4*N^2/2= 2*10^10小)

N = 100,000, M=100,000,000,则N^2 = 10^10 > 6M=6*10^8,故使用Tabular矩阵来存储频繁二项集,空间为S =12*M=12*10^8。(的确比4*N^2/2= 2*10^10小)

N = 30,000, M=100,000,000,则N^2 = 9*10^8 > 6M=6*10^8,故使用Tabular矩阵来存储频繁二项集,空间为S =12*M=18*10^8。(的确比4*N^2/2= 12*10^8小)

from:http://blog.csdn.net/pipisorry/article/details/48894977

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129344.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java线程池参数分析「建议收藏」

    Java线程池参数分析「建议收藏」线程池组成创建线程池创建线程池通过Executors的工厂方法来创建线程池实例。实际上Executors创建的线程池实例最终都是通过实例化配置不同参数的ThreadPoolExecutor对象。 publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolEx…

    2022年6月3日
    32
  • 背景图片的精灵图的使用

    背景图片的精灵图的使用&lt;!DOCTYPEhtml&gt;&lt;html&gt;&lt;head&gt;&lt;metacharset="utf-8"/&gt;&lt;metahttp-equiv="X-UA-Compatible"content="IE=edge"&gt;&lt;title&gt;背景图片的精灵图的使用&lt;

    2022年6月9日
    28
  • L3-008 喊山(堆优化dijsktra+队列bfs)「建议收藏」

    L3-008 喊山(堆优化dijsktra+队列bfs)「建议收藏」原题链接喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发

    2022年8月9日
    3
  • pycharm注释快捷键Ctrl+/「建议收藏」

    pycharm注释快捷键Ctrl+/「建议收藏」行注释/取消行注释:Ctrl+/块注释:Ctrl+Shift+/

    2022年8月25日
    5
  • 最全QQ盗号手法分析,全面防御QQ盗号[通俗易懂]

    最全QQ盗号手法分析,全面防御QQ盗号[通俗易懂]你的QQ是否被盗过号,或者你身边的朋友、同学是否有过被盗号的经历。如今的安全机制真的没有效吗?盗号真的这么简单吗?本期将彻底解决这一问题。本期是上一期的姊妹篇,建议先看上一期,这样对于攻击者的手法才有更好的理解:传送门常见的盗号手法1、诱导链接以及二维码  这种情况在QQ群里面见的多。通常是发送一些具有诱惑性的链接诱导你去点击。也可能会是一些二维码,如下图。为了做这期,能更好的了解其盗号的手段,我把凡是我看到的盗号链接都点了个遍,那些恶意二维码我也扫了个遍。这是我在了解其原理并做了相应的安全措施.

    2022年7月26日
    12
  • linux arping命令学习「建议收藏」

    linux arping命令学习「建议收藏」arping命令用来向邻近的主机发生ARPREQUEST数据包。1.arping命令可以用来测试局域网各个主机之间的连通性,不能用于测试其是否能与互联网连通,sh-#pingwww.google.comPINGwww.google.com(74.125.239.147)56(84)bytesofdata.64bytesfromnuq05s02-in-f19

    2022年5月1日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号