python使用Apriori算法进行关联性解析
文件大小: 55k
源码售价: 10 个金币 积分规则     积分充值
资源说明:### Python使用Apriori算法进行关联性解析 #### 关联分析概述 关联分析(Association Analysis)是一种用于发现大型数据集中项目之间潜在联系的数据挖掘技术。它通常应用于市场篮子分析、用户行为分析等领域,帮助商家识别商品之间的购买模式或者推荐系统中的用户偏好。 #### Apriori算法原理 Apriori算法是一种广泛使用的关联规则学习算法,主要用于发现频繁项集(Frequent Itemsets)。算法基于以下关键原理: - **频繁项集**:指在数据集中频繁出现的物品集合。例如,在超市销售数据中,“面包”和“牛奶”可能经常一起被购买,这两个商品就构成了一个频繁项集。 - **关联规则**:是一种暗示两个或多个物品之间存在强相关性的规则。如“买面包的人往往会买牛奶”,这里的规则就是{面包} -> {牛奶}。 Apriori算法的核心步骤包括: 1. **频繁项集的提取**:找出所有频繁项集的过程,即那些支持度不低于预设阈值的项集。 2. **关联规则的生成**:从已经找到的频繁项集中提取出有意义的关联规则。 #### 支持度与可信度 - **支持度(Support)**:衡量项集在数据集中出现频率的一个指标。支持度越高,表明这个项集出现的次数越多。 - 定义为数据集中包含该项集的交易记录所占的比例。 - 例如,在一个包含1000个交易记录的数据集中,如果“面包”和“牛奶”同时出现的次数为100次,则支持度为10%。 - **可信度(Confidence)**:衡量一条关联规则强度的指标,定义为支持度({A, B})/ 支持度({A}),表示在购买A的同时也购买B的概率。 - 例如,规则“{面包} -> {牛奶}”的可信度为支持度({面包, 牛奶}) / 支持度({面包})。 #### Apriori算法详解 1. **频繁1-项集的生成**:从原始数据集中扫描一次,找出所有频繁出现的单一物品(即支持度不低于设定阈值的物品)。 2. **频繁k-项集的生成**:利用频繁k-1项集来生成候选k-项集,再扫描数据集以确定哪些候选项集是频繁的。 3. **频繁项集的提取**:重复上述步骤,直至无法生成更长的频繁项集为止。 #### Apriori算法步骤 1. **初始化**:生成所有的1-项集,并计算其支持度。 2. **迭代**: - 基于当前的频繁项集生成候选项集。 - 对每个候选项集进行支持度计数。 - 选择支持度大于最小支持度阈值的项集作为新的频繁项集。 3. **结束条件**:当无法生成新的频繁项集时,算法结束。 #### Python实现Apriori算法 ```python import numpy as np 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 list(map(frozenset, c1)) def scanData(data, candidates, minSupport): ssCnt = {} for tid in data: for can in candidates: if can.issubset(tid): if can not in ssCnt.keys(): ssCnt[can] = 0 ssCnt[can] += 1 numItems = len(data) retList = [] supportData = {} for key in ssCnt.keys(): support = ssCnt[key] / numItems if support >= minSupport: retList.append(key) supportData[key] = support return retList, supportData def aprioriGen(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 def apriori(dataSet, minSupport=0.5): c1 = createC1(dataSet) D = list(map(set, dataSet)) l1, supportData = scanData(D, c1, minSupport) L = [l1] k = 2 while (len(L[k-2]) > 0): ck = aprioriGen(L[k-2], k) lk, supk = scanData(D, ck, minSupport) k += 1 L.append(lk) supportData.update(supk) return L, supportData def generateRules(L, supportData, minConf=0.7): bigRuleList = [] for i in range(1, len(L)): for freqSet in L[i]: H1 = [frozenset([item]) for item in freqSet] if (i > 1): rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf) else: calcConf(freqSet, H1, supportData, bigRuleList, minConf) return bigRuleList ``` 以上Python代码实现了Apriori算法的基本流程,包括数据加载、频繁项集生成以及关联规则的提取等核心功能。通过调整`minSupport`和`minConf`参数,可以根据实际应用场景的需求定制化地挖掘有价值的关联规则。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。