资源说明:### 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`参数,可以根据实际应用场景的需求定制化地挖掘有价值的关联规则。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。
English
