「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」
实验名称
关联规则挖掘Apriori算法的实现
实验目的
1.掌握频繁项目集的生成原理
2.掌握关联规则挖掘的原理
3.掌握在weka中进行关联规则挖掘的具体流程。
实验内容
1.根据给定的事务数据库,支持数阈值2和置信度阈值0.7,编写代码生成频繁项目集及对应的关联规则。
2.利用weka工具对天气数据、美国国会议员投票信息、超市购物篮数据进行关联规则挖掘,并分析挖掘结果
实验步骤及结果
一.根据给定的事务数据库,支持数阈值2和置信度阈值0.7,编写代码生成频繁项目集及对应的关联规则。
新建java项目 Apriori.java
1.事务数据库、支持数、置信度的定义
1 | java复制代码package rule; |
2.频繁项目集的生成过程,其中调用了方法getItem1FC( ),生成L1,递归调用getCandidateCollection()进行连接、剪枝生成C2、C3……,最后生成L2,L3……
1 | java复制代码// 生成频繁项目集 |
3.根据Lk 进行连接、剪枝生成Ck+1(剪枝指对连接生成的c,判断它的k-子集是否属于Lk,不属于则剪枝去掉该c)
1 | java复制代码private Map<String, Integer> getCandidateCollection(Map<String, Integer> itemkFcMap) { |
4.L1的生成过程
1 | java复制代码private Map<String, Integer> getItem1FC() { |
5. 生成关联规则的过程
1 | java复制代码public Map<String, Double> getRelationRules(Map<String, Integer> frequentCollectionMap) { |
6.对频繁项目集的所有子集生成关联规则
1 | java复制代码private void buildSubSet(List<String> sourceSet, List<List<String>> result) { |
7.主函数,调用getFC()输出频繁项目集,调用getCandidateCollection()生成存在强关联规则的项目
1 | java复制代码public static void main(String[] args) { |
运行结果:
二.利用weka工具对天气数据、美国国会议员投票信息、超市购物篮数据进行关联规则挖掘,并分析挖掘结果
<1>
选择Apriori
设置好各项参数
设置完成后点击start运行
Run information //实验运行信息
Scheme: weka.associations.Apriori //所选的关联规则挖掘方案:Apriori算法
-N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0. 1 -S -1.0 -c -1
//各参数依次表示:
I - 输出项集,若设为false则该值缺省;
N 10 - 规则数为10;
T 0 – 度量单位选为置信度,(T1-提升度,T2杠杆率,T3确信度);
C 0.9 – 度量的最小值为0.9;
D 0.05 - 递减迭代值为0.05;
U 1.0 - 最小支持度上界为1.0;
M 0.1 - 最小支持度下届设为0.1;
S -1.0 - 重要程度为-1.0;
c -1 - 类索引为-1输出项集设为真
Relation:weather.symbolic //数据的名称weather.symbolic
Instances: 14 //数据的记录数 14
Attributes:5 //属性数目 5以及各属性名称
Apriori // Apriori算法运行结果
Minimum support: 0. 1 5 (2 instances) //最小支持度0.15,即最少需要2个实例
Minimum metric : 0.9 //最小度量<置信度>: 0.9
Number of cycles performed: 1 7 //进行了17轮搜索
Generated sets of large itemsets: //生成的频繁项集
Size of set of large itemsets L(1): 12 //频繁1项集:12个
Size of set of large itemsets L( 2 ): 47 //频繁2项集:47个
Size of set of large itemsets L( 3 ): 39 //频繁3项集:39个
Size of set of large itemsets L( 4 ): 6 //频繁4项集:6个
Best rules found: //最佳关联规则
1. outlook=overcast 4 ==> play=yes 4 conf:(1) lift:(1.56) lev:(0.1) [1] conv:(1.43)
//规则采用“前件 num.1 ==>结论 num.2”的形式表示,前件后面的数字表示有多少个实例满足前件,结论后的数字表示有多少个实例满足整个规则,这就是规则的”支持度“。
conf:置信度 lift:提升度 lev:杠杠率 conv:确信度
设置参数 outputItemSets 为 true,再次运行 Apriori 算法,会生成各频繁项目集及他们的支
持数如下:
<2>加载 vote.arff 数据集,该数据集中各属性含义如下:
切换至 Associate 标签页,选择 Apriori 算法,保持默认选项,单击 start 按钮,
结果如下:
参数解释如<1>一致
<3>加载 supermarket.arff 数据集
运行 Apriori 算法,结果如下:
解析如下:
第一条规则:饼干+冷冻食品+水果+高总额 ==> 面包和蛋糕
第二条规则:烘烤所需+饼干+水果+高总额 ==> 面包和蛋糕
第三条规则:烘烤所需+冷冻食品+水果+高总额 ==> 面包和蛋糕
第四条规则:饼干+水果+蔬菜+高总额 ==> 面包和蛋糕
第五条规则:聚会零食+水果+高总额 ==> 面包和蛋糕
第六条规则:饼干+冷冻食品+蔬菜+高总额 ==> 面包和蛋糕
第七条规则:烘烤所需+饼干+蔬菜+高总额 ==> 面包和蛋糕
第八条规则:饼干+水果+高总额 ==> 面包和蛋糕
第九条规则:冷冻食品+水果+蔬菜+高总额 ==> 面包和蛋糕
第十条规则:冷冻食品+水果+高总额 ==> 面包和蛋糕
可以发现
- 购买饼干或冷冻食品 ,会购买水果或蔬菜 (水果 8 条规则,蔬菜 4条规则)
- 购买饼干、冷冻食品 、水果、蔬菜,会购买面包、蛋糕(多条)
- 购买上述食品的,采购量会很大(金额高)(9条)
- 采购量会很大(金额高)的,一般会购买面包、蛋糕(10条规则都包含这两项)
总结:
Apriori算法需要完全的标称型数据,如果有数值型属性,必须先进行离散化。关联规则挖掘发现大量数据中项集之间有趣的关联或者相互联系。关联规则挖掘的一个典型例子就是购物篮分析,该过程通过发现顾客放入其购物篮中不同商品之间的联系,分析出顾客的购买习惯,通过了解哪些商品频繁地被顾客同时买入,能够帮助零售商制定合理的营销策略。其可以揭示数据中隐藏的关联模式,帮助人们进行市场运作,决策支持等。
本文转载自: 掘金