我有一本字典,其中键作为频繁项集,值作为该项集的支持。现在,我想生成所有可能的关联规则(X --> Y)。我怎样才能做到这一点?有没有内置的Python函数可以做到这一点?
使用生成的关联规则,我想计算强关联规则(置信度大于最小置信度的规则)。我可以做到这一点,但如何生成所有关联规则?
from itertools import combinations
def generate_association_rules(frequent_itemsets, min_confidence):
"""
Generate all possible association rules from frequent itemsets.
Args:
frequent_itemsets: dict
Dictionary with frequent itemsets as keys (frozenset) and their supports as values.
min_confidence: float
Minimum confidence threshold for strong association rules.
Returns:
strong_rules: list of tuples
List of strong association rules (X -> Y) with confidence greater than min_confidence.
Each rule is represented as a tuple (X, Y, confidence).
"""
strong_rules = []
for itemset in frequent_itemsets:
itemset_support = frequent_itemsets[itemset]
# Generate all non-empty proper subsets of the itemset
for r in range(1, len(itemset)):
for subset in combinations(itemset, r):
subset = frozenset(subset)
remaining = itemset - subset
# Calculate the confidence of the rule
subset_support = frequent_itemsets.get(subset, 0)
if subset_support > 0:
confidence = itemset_support / subset_support
if confidence >= min_confidence:
strong_rules.append((subset, remaining, confidence))
return strong_rules
# Example usage
frequent_itemsets = {
frozenset(['A']): 3,
frozenset(['B']): 2,
frozenset(['C']): 2,
frozenset(['A', 'B']): 2,
frozenset(['A', 'C']): 2,
frozenset(['B', 'C']): 1,
frozenset(['A', 'B', 'C']): 1
}
min_confidence = 0.5
strong_rules = generate_association_rules(frequent_itemsets, min_confidence)
for rule in strong_rules:
print(f"Rule: {rule[0]} -> {rule[1]}, Confidence: {rule[2]:.2f}")