如何用Weka中的Apriori算法挖掘生产数据仅涉及1的工序关联规则
解决方案
你遇到的问题根源是Apriori默认会将所有属性的所有取值都作为候选项计算,只要把0值从挖掘的候选集中排除即可,针对Weka工具提供两种可落地的操作方案:
方案1:转换为事务数据集(最推荐,无额外参数适配成本)
事务数据集每条记录仅保留取值为1的工序名,0值完全不进入输入数据,从根源上避免生成无效规则,操作步骤:
- 对原宽表数据做转换:逐行遍历,只保留值为1的对应工序名,每行输出为逗号分隔的工序名称集合。比如你的示例数据转换后结果如下:
A,C B D C,E A F G A,C
- 将转换后的内容保存为无表头的CSV文件
- 打开Weka的
Associate面板加载该CSV,Weka会自动识别为事务型数据,直接运行Apriori即可,输出的规则天然都是工序共同执行的关联关系,不会出现任何0值相关内容
方案2:不修改原数据,通过Weka过滤器+参数调整实现
如果不想改动原始数据集,可以通过Weka自带的过滤器将0值标记为缺失,让Apriori自动忽略:
- 预处理阶段:加载原数据集后,对所有工序列先执行
NumericToNominal过滤器,将0/1数值转为标称类型;再执行ModifyValues过滤器,将所有列的0值替换为缺失值 - 关联挖掘阶段:选择Apriori算法,保持默认参数即可,算法会自动忽略缺失值,仅把取值为1的工序作为有效候选项计算
规则优化建议
你可以根据实际数据量调整Apriori的核心参数过滤无效规则:
- 调整
lowerBoundMinSupport参数:设置最小支持度阈值,过滤出现频率过低的工序组合 - 调整
minMetric参数:设置最小置信度阈值,过滤关联强度过低的规则
内容的提问来源于stack exchange,提问作者Ziemway
相关产品推荐
相关产品推荐

