如何利用频繁项集生成所有可能的关联规则?

问题描述 投票:0回答:1

我有一本字典,其中键作为频繁项集,值作为该项集的支持。现在,我想生成所有可能的关联规则(X --> Y)。我怎样才能做到这一点?有没有内置的Python函数可以做到这一点?

使用生成的关联规则,我想计算强关联规则(置信度大于最小置信度的规则)。我可以做到这一点,但如何生成所有关联规则?

python data-mining apriori association-rule-mining
1个回答
0
投票
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}")
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.