关联分析---Aprior

关联分析是一种在大规模数据集中寻找有趣关系的任务,这些关系有两种形式:频繁项集关联规则。频繁项集是经常出现在一起的物品的集合,关联规则暗示两种物品之间可能存在的很强的关系。

如何寻找数据集中的频繁或关联关系呢?主要是通过支持度和可信度。

一个项集的支持度被定义为数据集中包含该项集的记录所占的比例。

可信度是针对关联规则来定义的,比如规则A->B的可信度为:支持度{A,B} / 支持度{A}

支持度和可信度是用来量化关联分析是否成功的方法。

Apriori原理:

要计算某个项集在数据集的支持度,需要大量的计算。一个有N个数据的集合共有2N-1种项集的组合,即N=100的数据集可能有2100-1中项集的组合,对于普通的计算机而言,需要很长的时间才能完成运算。

为了降低所需的计算时间,通常采用采用Apriori原理,来减少可能感兴趣的项集。

Apriori在拉丁语中指“来自以前”, Apriori原理:如果某个项集是频繁的,那么它的所有子集也是频繁的;如果一个项集是非频繁集,那么它的所有超集也是非频繁的。

比如,一旦计算出{2,3}的支持度,知道它是非频繁的项集,则可推出{1,2,3},{0,2,3}等包含{2,3}的项集也是非频繁的,就不需要再进行计算支持度了。

使用该原理就可以避免项集数据的指数增长,从而在合理的时间内计算出频繁项集。

使用Apriori算法来发现频繁集

def loadDataSet():
    return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]

def createC1(dataSet):
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item])

    C1.sort()
    return map(frozenset, C1)#use frozen set so we
                            #can use it as a key in a dict    

def scanD(D, Ck, minSupport):
    ssCnt = {}
    for tid in D:
        for can in Ck:
            if can.issubset(tid):
                if not ssCnt.has_key(can): ssCnt[can]=1
                else: ssCnt[can] += 1
    numItems = float(len(D))
    retList = []
    supportData = {}
    for key in ssCnt:
        support = ssCnt[key]/numItems
        if support >= minSupport:
            retList.insert(0,key)
        supportData[key] = support
    return retList, supportData

def aprioriGen(Lk, k): #creates Ck
    retList = []
    lenLk = len(Lk)
    for i in range(lenLk):
        for j in range(i+1, lenLk):
            L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2]
            L1.sort(); L2.sort()
            if L1==L2: #if first k-2 elements are equal
                retList.append(Lk[i] | Lk[j]) #set union
    return retList

def apriori(dataSet, minSupport = 0.5):
    C1 = createC1(dataSet)
    D = map(set, dataSet)
    L1, supportData = scanD(D, C1, minSupport)
    L = [L1]
    k = 2
    while (len(L[k-2]) > 0):
        Ck = aprioriGen(L[k-2], k)
        Lk, supK = scanD(D, Ck, minSupport)#scan DB to get Lk
        supportData.update(supK)
        L.append(Lk)
        k += 1
    return L, supportData
时间: 2024-10-07 13:51:19

关联分析---Aprior的相关文章

使用Apriori算法和FP-growth算法进行关联分析(Python版)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

使用Apriori进行关联分析(二)

书接上文(使用Apriori进行关联分析(一)),介绍如何挖掘关联规则. 发现关联规则 我们的目标是通过频繁项集挖掘到隐藏的关联规则,换句话说就是关联规则. 所谓关联规则,指通过某个元素集推导出另一个元素集.比如有一个频繁项集{底板,胶皮,胶水},那么一个可能的关联规则是{底板,胶皮}→{胶水},即如果客户购买了底板和胶皮,则该客户有较大概率购买胶水.这个频繁项集可以推导出6个关联规则: {底板,胶水}→{胶皮}, {底板,胶皮}→{胶水}, {胶皮,胶水}→{底板}, {底板}→{胶水, 胶皮

【数据挖掘】关联分析之Apriori

1.Apriori算法 如果一个事务中有X,则该事务中则很有可能有Y,写成关联规则 {X}→{Y} 将这种找出项目之间联系的方法叫做关联分析.关联分析中最有名的问题是购物蓝问题,在超市购物时,有一个奇特的现象--顾客在买完尿布之后通常会买啤酒,即{尿布}→{啤酒}.原来,妻子嘱咐丈夫回家的时候记得给孩子买尿布,丈夫买完尿布后通常会买自己喜欢的啤酒. 考虑到规则的合理性,引入了两个度量:支持度(support).置信度(confidence),定义如下 支持度保证项集(X, Y)在数据集出现的频繁

使用Apriori进行关联分析(一)

大型超市有海量交易数据,我们可以通过聚类算法寻找购买相似物品的人群,从而为特定人群提供更具个性化的服务.但是对于超市来讲,更有价值的是如何找出商品的隐藏关联,从而打包促销,以增加营业收入.其中最经典的案例就是关于尿不湿和啤酒的故事.怎样在繁杂的数据中寻找到数据之间的隐藏关系?当然可以使用穷举法,但代价高昂,所以需要使用更加智能的方法在合理时间内找到答案.Apriori就是其中的一种关联分析算法. 基本概念 关联分析是一种在大规模数据集中寻找有趣关系的非监督学习算法.这些关系可以有两种形式:频繁项

机器学习day16 机器学习实战Apriori算法进行关联分析

上一章学习了非监督学习的聚类,聚类算法可以将不同性质的分类分开.这两天学习了apriori算法进行关联分析,感觉是目前最难理解的一章了,并且书中还有个很坑爹的错误,作者存在很大的疏忽. Apriori算法关联分析:从大规模数据集中寻找物品间的隐含关系被称作关联分析或者关联规则学习. 关联分析应用1:我们以前学习的是根据特性进行分类或者回归预测,并没有挖掘特性之间的关系,关联分析可以用于分析数据集中特性之间的关系,可以得到哪些特性频繁的共同出现或者特性之间的关系(比如出现特性A就会很大几率出现特性

使用Apriori算法和FP-growth算法进行关联分析

系列文章:<机器学习>学习笔记 最近看了<机器学习实战>中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集).正如章节标题所示,这两章讲了无监督机器学习方法中的关联分析问题.关联分析可以用于回答"哪些商品经常被同时购买?"之类的问题.书中举了一些关联分析的例子: 通过查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为.这种从数据海洋中抽取的知识可以用于商品定价.市场促销.存活管理等环节. 在美国国会

关联分析简要介绍

关联分析 概念: 关联分析该方法是以长期重组后保留下来的基因(位点)间连锁不平衡(LD)为基础,在获得群体表型数据和基因型数据之后,采用统计方法检测遗传多态性和性状可遗传变异之间的关联,目标是寻找性状变异的基因组功能型变异(基因位点和标记位点) 关联分析是基于无亲缘关系的病例组和对照组在某一个遗传位点上会出现不同频率而设计的. 关联分析的基础----连锁不平衡 某一群体,不同基因座的的两个基因同时遗传的频率高于预期随机频率的现象. 当位于某一座位上的某个特定基因与另一个座位上的某个基因同时遗传的

全基因组关联分析(Genome-Wide Association Study,GWAS)流程

全基因组关联分析流程: 一.准备plink文件 1.准备PED文件 PED文件有六列,六列内容如下: Family ID Individual ID Paternal ID Maternal ID Sex (1=male; 2=female; other=unknown) Phenotype PED文件是空格(空格或制表符)分隔的文件. PED文件长这个样: 2.准备MAP文件 MAP文件有四列,四列内容如下: chromosome (1-22, X, Y or 0 if unplaced) r

商品关联分析

商品关联分析 关联 relevance: 主要用在互联网的内容和文档上,比如搜索引擎算法文档中之间的关联性. association: 用在实际的事物之上,比如电子商务网站上的商品之间的关联度. 支持度(support):数据集中包含某几个特定项的概率. 比如在1000次的商品交易中同时出现了啤酒和尿布的次数是50次,那么此关联的支持度为5%. 置信度(Confidence):在数据集中已经出现A时,B发生的概率,置信度的计算公式是 :A与B同时出现的概率/A出现的概率. 假设有10000个人购