python定义一个函数使用Confidence计算一个频繁项集对另外一个频繁项集的置信度,输出置信度>0.6的数据,数据结构为frozenset
时间: 2024-02-09 16:12:42 浏览: 33
好的,我可以帮你写一个函数来计算频繁项集之间的置信度,并输出置信度大于0.6的数据。以下是代码实现:
```python
def calc_confidence(freq_itemset1, freq_itemset2, freq_itemsets):
'''
计算 freq_itemset1 对 freq_itemset2 的置信度
:param freq_itemset1: frozenset, 前一个频繁项集
:param freq_itemset2: frozenset, 后一个频繁项集
:param freq_itemsets: list, 所有频繁项集的列表
:return: float, freq_itemset1 -> freq_itemset2 的置信度
'''
freq_itemset1_count = 0
freq_itemset2_count = 0
freq_itemset1_and_2_count = 0
for itemset in freq_itemsets:
if freq_itemset1.issubset(itemset):
freq_itemset1_count += 1
if freq_itemset2.issubset(itemset):
freq_itemset2_count += 1
if freq_itemset1.union(freq_itemset2).issubset(itemset):
freq_itemset1_and_2_count += 1
confidence = freq_itemset1_and_2_count / freq_itemset1_count
return confidence
def find_frequent_itemsets(transactions, min_support):
'''
从交易数据中发现频繁项集
:param transactions: list, 交易数据
:param min_support: float, 最小支持度
:return: list, 所有频繁项集的列表
'''
itemsets = [frozenset([item]) for transaction in transactions for item in transaction]
freq_itemsets = []
while itemsets:
freq_itemsets.extend(itemsets)
itemsets = join(itemsets)
itemsets = calc_support(itemsets, transactions, min_support)
return freq_itemsets
def filter_rules(freq_itemsets, min_confidence):
'''
从频繁项集中筛选出满足最小置信度的关联规则
:param freq_itemsets: list, 所有频繁项集的列表
:param min_confidence: float, 最小置信度
:return: list, 满足最小置信度的关联规则列表
'''
rules = []
for i in range(len(freq_itemsets)):
for j in range(i + 1, len(freq_itemsets)):
freq_itemset1 = freq_itemsets[i]
freq_itemset2 = freq_itemsets[j]
confidence = calc_confidence(freq_itemset1, freq_itemset2, freq_itemsets)
if confidence >= min_confidence:
rules.append((freq_itemset1, freq_itemset2, confidence))
return rules
if __name__ == '__main__':
transactions = [
['A', 'B', 'C', 'E'],
['B', 'C', 'D'],
['A', 'B', 'C', 'D'],
['B', 'D', 'E'],
['A', 'B', 'C', 'D', 'E'],
['A', 'D', 'E']
]
min_support = 0.5
min_confidence = 0.6
freq_itemsets = find_frequent_itemsets(transactions, min_support)
rules = filter_rules(freq_itemsets, min_confidence)
for rule in rules:
freq_itemset1, freq_itemset2, confidence = rule
print(f'{freq_itemset1} -> {freq_itemset2}: {confidence}')
```
在这个例子中,我们使用了 `find_frequent_itemsets` 函数来找到所有的频繁项集,然后使用 `filter_rules` 函数来筛选出置信度大于等于 0.6 的关联规则,并输出这些关联规则。你可以根据自己的需求修改输入数据和参数,来计算不同的关联规则。