• Apriori算法zz


    Apriori算法是我的第一个数据挖掘算法,算处女作吧,哈哈哈。在这之前我对数据挖掘 算法恐惧,觉得太难了,只是大致看了下原理,然后在clementine上拖几个控件跑下demo,运行的结果很好但是总觉得技术含量不高,我不知道为什 么要这么做,为什么那些参数要那么设置,更糟糕的是发现那些算法过一段时间都忘记了。没办法,不入虎穴焉得虎子,我逼迫自己根据书上提供的讲解和伪码,琢 磨着用什么数据结构保存数据?怎么把算法用程序实现?。。。。。。。万事开头难,好在我还是把这个算法写出来了,我获得了自信,使得我真正喜欢上了数据挖 掘,现在看看自己写的那个算法,觉得有好多地方不成熟,哈哈哈。

        Apriori算法属于关联分析,是Agrawal在1993提出来的。它的功能是找出频繁项集,例如:超市购物中,那些商品总是同时被购买,如啤酒和尿不湿总是被同时购买,这时商家就可以把他们放在一起使得啤酒和尿不湿的销量更多,哈哈哈。其核心是:先找频繁项集是1的元素,在这基础上找频繁项集时2的元素,,,,,,,在频繁项集是K的元素中找频繁项集是K+1的元素。如有如下数据:

    Apriori算法
    每一行表示一条交易,共有9行,既9笔交易,左边表示交易ID,右边表示商品名称。最小支持度是22%,那么每件商品至少要出现9*22%=2次才算频繁。第一次扫描数据库,使得在每条交易中,按商品名称递增排序。第二次扫描数据,找频繁项集为1的元素有:

    Apriori算法

    左边表示商品名称,右边表示出现的次数,都大于阈值2。在此基础上找频繁项集是2的元素,方法是两两任意组合,第三次扫描数据得到它们出现的次数:

    Apriori算法
    这里{I1,I4},{I3,I4},{I3,I5},{I4,I5}出现的次数都小于2,过滤掉,实际频繁项集为2的元素有:

    Apriori算法
    在这基础上找频繁项集为3的元素,此时就有规律性了,在频繁项集为K的元素上找频繁项集为 K+1的元素的方法是:在频繁项集为K的项目(每行记录)中,假如共有N行,两两组合,满足两两中前K-1个元素相同,只后一个元素要求前一条记录的商品 名称小于后一条记录的商品名称,这样是为了避免重复组合,求它们的并集得到长度为K+1的准频繁项集,那么最多共有Apriori算法种可能的组合,有:Apriori算法
    想想如果N很大的话,Apriori算法是一个多么庞大的数字,这时就要用到Apriori的核心了:如果K+1个元素构成频繁项集,那么它的任意K个元素的子集也是频繁项集。然后将每组K+1个元素的所有长度为K的子集,有Apriori算法中组合,在频繁项集为K的项集中匹配,没有找到则删除,用第一条记录{I1,I2,I3}它的长度为2的频繁项集有:Apriori算法分别是:{I1,I2},{I1,I3},{I2,I3}种情况,幸好这三种情况在频繁项集为2的项集中都找到了。通过这步过滤,得到的依旧是准频繁项集,它们是:Apriori算法,此时第四次扫描数据库,得到真正长度为3的频繁项集是
    Apriori算法 因为{I1,I2,I4}只出现了1次,小于最小支持度2,删除。就这个例子而言,它的最大频繁项集只有3,就是{I1,I2,I3}和{I1,I2,I5},我想不用我多说大家都明白了。
        可见Apriori算法有个最大的问题就是要产生大量准频繁项集或者说候选集,效率不高,并且要多次扫描数据库,在后面的PF_growth算法将避免了这两个个问题。


    来源:http://blog.sina.com.cn/s/blog_6e85bf420100ogn2.html

  • 相关阅读:
    hdu 1518 Square 深搜,,,,花样剪枝啊!!!
    3D拾取技术
    cocos2dx 使用spine制作骨骼动画
    poj3080Blue Jeans
    G4Studio+extjs+highcharts 下在ext4j的panel中放入hightCharts图表
    快的打车架构实践
    电源管理ACPI、及APM、GNU/Linux系统下的相应命令使用
    ------银行系统------
    ARM+llinux系统移植3G拨号上网收发短信(一)【转】
    在ARM-linux上实现4G模块PPP拨号上网【转】
  • 原文地址:https://www.cnblogs.com/end/p/2670922.html
Copyright © 2020-2023  润新知