100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Apriori算法基本概念以及原理解析

Apriori算法基本概念以及原理解析

时间:2023-02-13 01:21:15

相关推荐

Apriori算法基本概念以及原理解析

Apriori算法中几个重要的概念

A—>B:

支持度: P(A^B) 表示A和B同时发生时的概率,没有先后顺序。

可信度或置信度: P(B|A) 表示A发生时,B发生的概率,有先后顺序。

P(B|A) = P(A^B)/P(A)

频繁项集:满足最小支持度阀值的事件集,如果事件里面有k个元素,就是频繁k项集。频繁项集通俗点来说,就是经常同时出现的一些元素的集合。

Apriori算法原理

AprioriApriori 的原理:如果某个项集是频繁项集,那么它所有的子集也是频繁的。

即如果 {0,1} 是频繁的,那么 {0}, {1} 也一定是频繁的。

Apriori算法步骤

发现频繁项集(循环,从a到g产生候选集后,会回到扫描元素,由产生频繁k项集到循环后产生频繁k+1项集)

a.扫描元素

b.计算支持度

c.统计筛选

d.产生频繁项集

e.自链接

f.减枝

g.产生候选集产生关联规则

Apriori算法原理(python版)

class Apriori:@classmethoddef caculate(cls, dataSet, minSupport=0.5):C1 = cls.createC1(dataSet)# 将dataSet集合化,以满足scanD的格式要求# D = map(set, dataSet)L1, supportData = cls.scanD(dataSet, C1, minSupport)L = [L1]# 最初的L1中的每个项集含有一个元素,新生成的# 项集应该含有2个元素,所以 k=2k = 2while (len(L[k - 2]) > 0):Ck = cls.aprioriGen(L[k - 2], k)Lk, supK = cls.scanD(dataSet, Ck, minSupport)# 将新的项集的支持度数据加入原来的总支持度字典中supportData.update(supK)# 将符合最小支持度要求的项集加入LL.append(Lk)# 新生成的项集中的元素个数应不断增加k += 1# 返回所有满足条件的频繁项集的列表,和所有候选项集的支持度信息return L, supportData@classmethoddef createC1(self, dataSet):'''构建初始候选项集的列表,即所有候选项集只包含一个元素,C1是大小为1的所有候选项集的集合'''C1 = []for transaction in dataSet:for item in transaction:if not [item] in C1:C1.append([item])C1.sort()return map(frozenset, C1)@classmethoddef aprioriGen(cls, Lk, k):'''由初始候选项集的集合Lk生成新的生成候选项集,k表示生成的新项集中所含有的元素个数'''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:retList.append(Lk[i] | Lk[j])return retList@classmethoddef scanD(self, D, Ck, minSupport):'''计算Ck中的项集在数据集合D(记录或者transactions)中的支持度,返回满足最小支持度的项集的集合,和所有项集支持度信息的字典。'''ssCnt = {}l_Ck = list(Ck)for tid in D:# 对于每一条transactionfor can in l_Ck:# 对于每一个候选项集can,检查是否是transaction的一部分# 即该候选can是否得到transaction的支持if can.issubset(tid):if ssCnt.get(can) == None: ssCnt[can] = 1else: ssCnt[can] += 1numItems = float(len(D))retList = []supportData = {}for key in ssCnt:# 每个项集的支持度support = ssCnt[key]/numItems# 将满足最小支持度的项集,加入retListif support >= minSupport:retList.insert(0, key)else:#print(str(key) + "支持度:" + str(support)+ ",小于最小支持度:" + str(minSupport))pass# 汇总支持度数据supportData[key] = supportreturn retList, supportData

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。