Apriori 处理ALLElectronics事务数据

通过Apriori算法挖掘以下事务集合的频繁项集:

流程图

代码
# 导入必要的库
from itertools import combinations

# 定义Apriori算法函数
def apriori(transactions, min_support, min_confidence):
    # 遍历数据,统计每个项的支持度 
    item_support = {}
    for transaction in transactions:
        for item in transaction:
            if item not in item_support:
                item_support[item] = 0
            item_support[item] += 1

    # 计算总事务数
    total_transactions = len(transactions)
    # 计算频繁项集
    frequent_itemsets = {}
    for item, support in item_support.items():
        if support / total_transactions >= min_support: # 即该项集在事务数据库中出现的次数除以总数
            frequent_itemsets[(item,)] = support / total_transactions

    # 生成候选项集并迭代生成频繁项集
    k = 2
    while True:
        candidates = set() # 存储所有可能的项集
        for itemset in frequent_itemsets.keys():
            for item in itemset:
                candidates.add(item)
        # 生成候选项集
        candidates = list(combinations(candidates, k)) # 生成所有可能的k项集
        # 统计候选项集的支持度
        candidate_support = {}
        for transaction in transactions:
            for candidate in candidates:
                if set(candidate).issubset(set(transaction)):
                    if candidate not in candidate_support:
                        candidate_support[candidate] = 0
                    candidate_support[candidate] += 1

        # 更新频繁项集
        frequent_itemsets_k = {}
        for candidate, support in candidate_support.items():
            if support / total_transactions >= min_support:
                frequent_itemsets_k[candidate] = support / total_transactions
        # 如果没有频繁项集则停止迭代
        if not frequent_itemsets_k:
            break

        frequent_itemsets.update(frequent_itemsets_k)
        k += 1

    # 生成关联规则
    rules = []
    for itemset in frequent_itemsets.keys():
        if len(itemset) >= 2:
            for i in range(1, len(itemset)):
                for combination in combinations(itemset, i):
                    X = combination
                    Y = tuple(set(itemset) - set(combination))
                    confidence = frequent_itemsets[itemset] / frequent_itemsets[X]
                    if confidence >= min_confidence:
                        rules.append((X, Y, frequent_itemsets[itemset], confidence))

    # frequent_itemsets (dict): 频繁项集和对应的支持度,键为项集的元组,值为支持度
    # rules (list): 关联规则,每一条规则表示为一个元组 (X, Y),其中X为前项集合,Y为后项集合
    return frequent_itemsets, rules


# 示例数据集
transactions = [    
    ['I1', 'I2', 'I5'],
    ['I2', 'I4'],
    ['I2', 'I3'],
    ['I1', 'I2', 'I4'],
    ['I1', 'I3'],
    ['I2', 'I3'],
    ['I1', 'I3'],
    ['I1', 'I2', 'I3', 'I5'],
    ['I1', 'I2', 'I3']
]
# 设置最小支持度和最小置信度阈值
min_support = 0.3
min_confidence = 0.6
# 调用Apriori算法函数
frequent_itemsets, rules = apriori(transactions, min_support, min_confidence)
print("频繁项集和对应的支持度:")
for itemset, support in frequent_itemsets.items():
    print("{}: Support = {:.2f}".format(itemset, support))
# 输出关联规则和置信度
print("\n关联规则和置信度:")
for X, Y, support, confidence in rules:
    print("{} => {}: Support = {:.2f}, Confidence = {:.2f}".format(X, Y, support, confidence))

  • 输出结果截图

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值