You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关联规则算法疑问:R语言Apriori结果与教材结论不符

问题根源分析与解决方案

首先得说,你这里大概率是混淆了频繁项集和关联规则的概念,再加上代码参数的默认设置,才导致和预期结果不一样。咱们一步步捋:

1. 先理清核心概念

你提到的《数据挖掘:概念与技术》里说的{I1, I2, I3}和{I1, I2, I5},其实是频繁项集——也就是满足最小支持度的项的集合,没有前提和结论之分。而关联规则是形如X→Y的蕴含式,必须同时满足最小支持度和最小置信度,X是前提项集,Y是结论项集,两者不相交。

2. 你的R代码问题在哪

你用的apriori()函数,默认的target参数是"rules",也就是生成关联规则,而不是频繁项集。你的代码只指定了support=0.02和minlen=3,但confidence默认是0.8,所以代码在找满足这三个条件的关联规则,而不是你想要的频繁项集。

咱们拿你的交易数据算一下:

  • 总共有9条交易,{I1,I2,I3}出现2次,支持度≈0.222;{I1,I2,I5}也出现2次,支持度≈0.222,都远高于0.02。
  • 但如果要生成关联规则,比如{I1,I2}→{I3},它的置信度是支持度({I1,I2,I3})/支持度({I1,I2}) = (2/9)/(4/9)=0.5,远低于0.8的阈值,所以这个规则不会被筛选出来;同理{I1,I2}→{I5}的置信度也是0.5,同样不满足条件。你看到的{I1,I2,I5}应该是规则里的完整项集展示,而非真正的规则形式。

3. 修正代码得到预期结果

如果你想验证书里的频繁项集,只需要修改代码,指定生成频繁项集即可:

transactions <- read.transactions("file.csv", sep=",")
# 指定target为"frequent itemsets",生成频繁项集
m1 <- apriori(transactions, parameter = list(support=0.02, minlen=3, target="frequent itemsets"))
inspect(sort(m1, by="support"))

运行这段代码后,你就能看到{I1,I2,I3}和{I1,I2,I5}这两个频繁项集了,完全符合书里的描述。

如果你的目标确实是生成关联规则,那得接受:在你的交易数据里,没有置信度≥0.8且包含这两个项集的规则——毕竟置信度的计算要求前提项集出现时,结论项集必须大概率出现,而你的数据里I1,I2同时出现时,I3或I5只占一半的情况,达不到0.8的要求。

内容的提问来源于stack exchange,提问作者zb111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:00:36