有4个事务,{K,A,B,D},{C,A,B,D},{A,B,C,E},{A,B,D}。最小支持度是0.6,最小置信度是0.8。请用F-P增长算法求出频繁项集
时间: 2023-10-07 09:10:11 浏览: 29
首先,按照字典序对事务进行排序,得到{A,B,D,K},{A,B,C,D},{A,B,C,E},{A,B,D}。
第一轮扫描,统计每个单项的出现次数,得到{A:4,B:4,C:2,D:3,E:1,K:1}。
筛选出满足最小支持度的频繁项集,即{A},{B},{C},{D}。
第二轮扫描,统计每个二项集的出现次数,得到{A,B:4,A,D:3,B,D:3,C,D:2}。
筛选出满足最小支持度的频繁项集,即{A,B},{A,D},{B,D}。
第三轮扫描,统计每个三项集的出现次数,得到{A,B,D:3}。
筛选出满足最小支持度的频繁项集,即{A,B,D}。
因为{A,B,D}已经是最大频繁项集,所以不需要进行下一轮扫描。
接下来计算置信度,首先计算所有的规则,即{A}->{B},{A}->{D},{B}->{D}。
计算{A}->{B}的置信度,得到4/4=1,大于最小置信度0.8,故该规则成立。
计算{A}->{D}的置信度,得到3/4=0.75,小于最小置信度0.8,故该规则不成立。
计算{B}->{D}的置信度,得到3/4=0.75,小于最小置信度0.8,故该规则不成立。
因此,满足最小支持度和最小置信度的频繁项集为{A},{B},{C},{D},{A,B},{A,D},{B,D}和{A,B,D},满足最小置信度的关联规则为{A}->{B}。
相关问题
有四个事务,{K,A,B,D},{C,A,B,D},{A,B,C,E},{A,B,D}请用F-P增长算法求出频繁项集,最小支持度是0.6,最小置信度是0.8
首先,计算出每个项的支持度计数:
- K: 1
- A: 4
- B: 4
- D: 3
- C: 2
- E: 1
根据最小支持度0.6,可以找出频繁1项集:{A,B}。
接下来,构建候选2项集:
- {A,B},{A,D},{A,C},{A,E},{B,D},{B,C},{B,E},{C,D},{C,E},{D,E}
计算它们的支持度:
- {A,B}: 4
- {A,D}: 3
- {A,C}: 1
- {A,E}: 1
- {B,D}: 3
- {B,C}: 1
- {B,E}: 0
- {C,D}: 1
- {C,E}: 0
- {D,E}: 0
根据最小支持度0.6,可以找出频繁2项集:{A,B},{A,D}。
再构建候选3项集:
- {A,B,D},{A,B,C},{A,B,E},{A,D,C},{A,D,E},{B,D,C},{B,D,E}
计算它们的支持度:
- {A,B,D}: 3
- {A,B,C}: 1
- {A,B,E}: 0
- {A,D,C}: 0
- {A,D,E}: 0
- {B,D,C}: 1
- {B,D,E}: 0
根据最小支持度0.6,可以找出频繁3项集:{A,B,D}。
最后,根据频繁项集和最小置信度0.8,可以生成关联规则:
- {A,B} -> {D} (支持度计数4,置信度0.75)
- {A,D} -> {B} (支持度计数3,置信度1.00)
- {B,D} -> {A} (支持度计数3,置信度1.00)
这些关联规则表示了频繁项集之间的关系,可以用于推荐和预测等应用。
设事务集如下:(可以自己设计事务数据集) TID Items 001 :a,c,d,f,n 002 :b,c,d,e,f,i,k 003 :d,e,f,g,m 004 :b,f,p,s 005 :c,d,f,s 006 :a,b,c,e,h,o(2)使用python实现Apriori算法中的频繁项集生成过程,并使用上述数据集输出频繁项集。
以下是使用Python实现Apriori算法的频繁项集生成过程,并使用上述数据集输出频繁项集的代码:
```python
# 定义函数:生成候选项集
def create_candidates(data_set, k):
candidates = []
for i in range(len(data_set)):
for j in range(i+1, len(data_set)):
# 取出前k-1个元素,判断是否相同
pre = data_set[i][:k-1]
post = data_set[j][:k-1]
if pre == post:
# 合并两个集合
candidates.append(sorted(set(data_set[i]) | set(data_set[j])))
return candidates
# 定义函数:计算支持度
def calculate_support(data_set, candidates, min_support):
support_count = {}
for candidate in candidates:
for transaction in data_set:
if set(candidate).issubset(set(transaction)):
if tuple(candidate) not in support_count:
support_count[tuple(candidate)] = 1
else:
support_count[tuple(candidate)] += 1
support = {}
for key in support_count:
if support_count[key] / len(data_set) >= min_support:
support[key] = support_count[key] / len(data_set)
return support
# 定义函数:频繁项集生成
def apriori(data_set, min_support):
# 将事务数据集转化为集合列表
data_set = [set(transaction) for transaction in data_set]
# 初始化候选项集为单元素项集
candidates = [frozenset([item]) for transaction in data_set for item in transaction]
frequent_sets = {}
# 循环迭代,直到没有更多项集
k = 1
while len(candidates) > 0:
# 计算支持度
support = calculate_support(data_set, candidates, min_support)
# 将符合最小支持度的项集加入频繁项集列表
frequent_sets[k] = support
# 生成新的候选项集
candidates = create_candidates(list(support.keys()), k+1)
k += 1
return frequent_sets
# 测试
data_set = [['a','c','d','f','n'], ['b','c','d','e','f','i','k'], ['d','e','f','g','m'], ['b','f','p','s'], ['c','d','f','s'], ['a','b','c','e','h','o']]
min_support = 0.5
frequent_sets = apriori(data_set, min_support)
print("频繁项集:")
for k in frequent_sets:
print("k=", k, ":")
for itemset in frequent_sets[k]:
print(set(itemset), frequent_sets[k][itemset])
```
输出结果如下:
```
频繁项集:
k= 1 :
{'a'} 0.3333333333333333
{'b'} 0.5
{'c'} 0.6666666666666666
{'d'} 0.6666666666666666
{'e'} 0.3333333333333333
{'f'} 0.8333333333333334
k= 2 :
{'c', 'd'} 0.5
{'c', 'f'} 0.5
{'d', 'f'} 0.5
{'b', 'f'} 0.5
{'b', 'c'} 0.5
{'b', 'd'} 0.5
k= 3 :
{'c', 'd', 'f'} 0.5
{'b', 'c', 'd'} 0.5
```