怎么理解关联规则中最小支持度和最小置信度?

怎么理解关联规则中最小支持度和最小置信度?

原作者@吴健,转自知乎

Apriori算法有支持度和置信度两个概念,都是在执行算法之前自己设定的,在每一次迭代过程后,大于支持度的项集被保留为频繁项集,最后生成的规则由最终的频繁项集组成。

一、支持度

支持度就是所有我们分析的交易中,某两种(若干种)商品同时(这里的同时,一般意味着同单或者一次独立的交易)被购买的概率(比率)。我们选择支持度的最终目的就是找出同时被购买的两个商品,可以提高我们的推荐转换率,从而增加收入。那么可以选出支持度最高的前n对(以下分析仅考虑两种商品,简称“对”)商品,我通常是选择总对数的万分之一或者是前20个。这样的数量不会很多,可以比较快的进行下一步分析,而且做推荐,要记住一点,“不能急功近利”。

根据万分之一或者前20,可以得到一个支持度,其实这个时候的支持度阀值,对本次分析已经意义不大了,主要是用于后续推荐系统的智能学习提供一个参考值。

二、置信度

置信度就是根据某一个条件,得到一个结论的可信程度、可靠程度。例子中,“购买了尿布”这个条件,可以推出“同时也会购买啤酒”这个结论的可靠程度很高,百度百科关联规则_百度百科 中分析的数据表明沃尔玛尿布到啤酒的置信度高达70%。

在分析支持度得到的前20对商品中,分别计算双向置信度(购买a同时购买b和购买b同时购买a的置信度都要算),然后筛选中前n个置信度较高的置信度,分析其对应的结论。通过有经验的业务人员,从中共同选出最合理的一对商品,来进行单向的购物车推荐。这时得到的一个置信度,可以作为今后机器学习的参考值。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是Python实现Apriori算法的代码,可以根据输入的最小支持和划分最大频繁集数目来进行数据挖掘: ```python def load_data_set(): """ 加载数据 """ data_set = [['I1', 'I2', 'I5'], ['I2', 'I4'], ['I2', 'I3'], ['I1', 'I2', 'I4'], ['I1', 'I3'], ['I2', 'I3'], ['I1', 'I3'], ['I1', 'I2', 'I3', 'I5'], ['I1', 'I2', 'I3']] return data_set def create_C1(data_set): """ 创建C1项集 """ C1 = set() for transaction in data_set: for item in transaction: item_set = frozenset([item]) C1.add(item_set) return C1 def is_apriori(Ck_item, Lk_sub1): """ 判断是否满足Apriori性质 """ for item in Ck_item: sub_Ck = Ck_item - frozenset([item]) if sub_Ck not in Lk_sub1: return False return True def create_Ck(Lk_sub1, k): """ 创建Ck项集 """ Ck = set() len_Lk_sub1 = len(Lk_sub1) list_Lk_sub1 = list(Lk_sub1) for i in range(len_Lk_sub1): for j in range(i+1, len_Lk_sub1): l1 = list(list_Lk_sub1[i]) l2 = list(list_Lk_sub1[j]) l1.sort() l2.sort() if l1[0:k-2] == l2[0:k-2]: Ck_item = list_Lk_sub1[i] | list_Lk_sub1[j] if is_apriori(Ck_item, Lk_sub1): Ck.add(Ck_item) return Ck def generate_Lk_by_Ck(data_set, Ck, min_support, support_data): """ 生成Lk项集 """ item_count = {} for transaction in data_set: for item in Ck: if item.issubset(transaction): if item not in item_count: item_count[item] = 1 else: item_count[item] += 1 num_items = float(len(data_set)) Lk = set() support_data_temp = {} for item in item_count: support = item_count[item] / num_items if support >= min_support: Lk.add(item) support_data_temp[item] = support support_data.update(support_data_temp) return Lk def generate_L(data_set, k, min_support): """ 生成所有频繁项集 """ support_data = {} C1 = create_C1(data_set) L1 = generate_Lk_by_Ck(data_set, C1, min_support, support_data) Lk_sub1 = L1.copy() L = [] L.append(Lk_sub1) for i in range(2, k+1): Ci = create_Ck(Lk_sub1, i) Li = generate_Lk_by_Ck(data_set, Ci, min_support, support_data) Lk_sub1 = Li.copy() L.append(Lk_sub1) return L, support_data def generate_rules(L, support_data, min_confidence=0.7): """ 生成关联规则 """ big_rules_list = [] for i in range(1, len(L)): for freq_set in L[i]: H1 = [frozenset([item]) for item in freq_set] if i > 1: rules_from_conseq(freq_set, H1, support_data, big_rules_list, min_confidence) else: calc_confidence(freq_set, H1, support_data, big_rules_list, min_confidence) return big_rules_list def calc_confidence(freq_set, H, support_data, big_rules_list, min_confidence): """ 计算置信度 """ pruned_H = [] for conseq in H: conf = support_data[freq_set] / support_data[freq_set - conseq] if conf >= min_confidence: print(freq_set - conseq, "-->", conseq, "conf:", conf) big_rules_list.append((freq_set - conseq, conseq, conf)) pruned_H.append(conseq) return pruned_H def rules_from_conseq(freq_set, H, support_data, big_rules_list, min_confidence): """ 从 H 生成更多的关联规则 """ m = len(H[0]) if len(freq_set) > (m + 1): Hmp1 = create_Ck(H, m+1) Hmp1 = calc_confidence(freq_set, Hmp1, support_data, big_rules_list, min_confidence) if len(Hmp1) > 1: rules_from_conseq(freq_set, Hmp1, support_data, big_rules_list, min_confidence) ``` 接下来,可以使用以下代码进行测试: ```python data_set = load_data_set() L, support_data = generate_L(data_set, k=3, min_support=0.5) rules = generate_rules(L, support_data, min_confidence=0.7) ``` 其,`load_data_set` 函数用于加载数据集,`generate_L` 函数用于生成所有频繁项集,`generate_rules` 函数用于生成关联规则。在 `generate_L` 函数,可以通过设置参数 `k` 来指定划分最大频繁集数目。在上述代码,设置 `k=3` 表示最多划分为三个频繁集。同时,还可以通过设置参数 `min_support` 来指定最小支持的阈值。在生成关联规则时,可以通过设置参数 `min_confidence` 来指定最小置信度的阈值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值