一、Apriori算法参数含义

本次共进行了9组实验,使用了weka安装目录data文件夹下的contact-lenses.arff数据。

ToolsàArffViewer,打开contact-lenses,可以看到实验数据contact-lenses共有24条记录,5个属性值。具体内容如下:

weka数据集格式arff

arff标准数据集简介

weka的数据文件后缀为arff(Attribute-Relation File Format,即属性关系文件格式),arff文件分为注释、关系名、属性名、数据域几大部分,注释用百分号开头%,关系名用@relation申明,属性用@attribute什么,数据域用@data开头,看这个示例数据集(安装weka后,可在weka的安装目录/data下找到weather.numeric.arff):

%weather dataset

@relation weather

@attribute outlook {sunny, overcast, rainy}

@attribute temperature numeric

@attribute humidity numeric

@attribute windy {TRUE, FALSE}

@attribute play {yes, no}

@data

sunny,85,85,FALSE,no

sunny,80,90,TRUE,no

overcast,83,86,FALSE,yes

rainy,70,96,FALSE,yes

rainy,68,80,FALSE,yes

rainy,65,70,TRUE,no

overcast,64,65,TRUE,yes

sunny,72,95,FALSE,no

sunny,69,70,FALSE,yes

rainy,75,80,FALSE,yes

sunny,75,70,TRUE,yes

overcast,72,90,TRUE,yes

overcast,81,75,FALSE,yes

rainy,71,91,TRUE,no

当数据是数值型,在属性名的后面加numeric,如果是离散值(枚举值),就用一个大括号将值域列出来。@data下一行后为数据记录,数据为矩阵形式,即每一个的数据元素个数相等,若有缺失值,就用问号?表示。

arff稀疏数据集

我们做关联规则挖掘,比如购物篮分析,我们的购物清单数据肯定是相当稀疏的,超市的商品种类有上10000种,而每个人买东西只会买几种商品,这样如果用矩阵形式表示数据显然浪费了很多的存储空间,我们需要用稀疏数据表示,看我们的购物清单示例(basket.txt):

freshmeat dairy confectionery

freshmeat confectionery

cannedveg frozenmeal beer fish

dairy wine

freshmeat wine fish

fruitveg softdrink

beer

fruitveg frozenmeal

fruitveg fish

fruitveg freshmeat dairy cannedveg wine fish

fruitveg fish

dairy cannedmeat frozenmeal fish

数据集的每一行表示一个去重后的购物清单,进行关联规则挖掘时,我们可以先把商品名字映射为id号,挖掘的过程只有id号就是了,到规则挖掘出来之后再转回商品名就是了,retail.txt是一个转化为id号的零售数据集,数据集的前面几行如下:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

30 31 32

33 34 35

36 37 38 39 40 41 42 43 44 45 46

38 39 47 48

38 39 48 49 50 51 52 53 54 55 56 57 58

32 41 59 60 61 62

3 39 48

63 64 65 66 67 68

32 69

这个数据集的商品有16469个,一个购物的商品数目远少于商品中数目,因此要用稀疏数据表,weka支持稀疏数据表示,但我在运用apriori算法时有问题,先看一下weka的稀疏数据要求:稀疏数据和标准数据的其他部分都一样,唯一不同就是@data后的数据记录,示例如下(basket.arff):

@relation 'basket'

@attribute fruitveg {F, T}

@attribute freshmeat {F, T}

@attribute dairy {F, T}

@attribute cannedveg {F, T}

@attribute cannedmeat {F, T}

@attribute frozenmeal {F, T}

@attribute beer {F, T}

@attribute wine {F, T}

@attribute softdrink {F, T}

@attribute fish {F, T}

@attribute confectionery {F, T}

@data

{1 T, 2 T, 10 T}

{1 T, 10 T}

{3 T, 5 T, 6 T, 9 T}

{2 T, 7 T}

{1 T, 7 T, 9 T}

{0 T, 8 T}

{6 T}

{0 T, 5 T}

{0 T, 9 T}

{0 T, 1 T, 2 T, 3 T, 7 T, 9 T}

{0 T, 9 T}

{2 T, 4 T, 5 T, 9 T}

可以看到

freshmeat dairy confectionery

freshmeat confectionery

表示为了:

{1 T, 2 T, 10 T}

{1 T, 10 T

稀疏数据的表示格式为:{,...,},注意每条记录要用大括号,属性列号不是id号,属性列号是从0开始的,即第一个@attribute 后面的属性是第0个属性,T表示数据存在。

规则挖取

我们先用标准数据集normalBasket.arff[1]试一下,weka的apriori算法和FPGrowth算法。

1、安装好weka后,打开选择Explorer

2、打开文件

3、选择关联规则挖掘,选择算法

4、设置参数

参数主要是选择支持度(lowerBoundMinSupport),规则评价机制metriType(见上一篇)及对应的最小值,参数设置说明如下[2]:

1. car 如果设为真,则会挖掘类关联规则而不是全局关联规则。

2. classindex 类属性索引。如果设置为-1,最后的属性被当做类属性。

3. delta 以此数值为迭代递减单位。不断减小支持度直至达到最小支持度或产生了满足数量要求的规则。

4. lowerBoundMinSupport 最小支持度下界。

5. metricType 度量类型。设置对规则进行排序的度量依据。可以是:置信度(类关联规则只能用置信度挖掘),提升度(lift),杠杆率(leverage),确信度(conviction)。

在 Weka中设置了几个类似置信度(confidence)的度量来衡量规则的关联程度,它们分别是:

a) Lift : P(A,B)/(P(A)P(B)) Lift=1时表示A和B独立。这个数越大(>1),越表明A和B存在于一个购物篮中不是偶然现象,有较强的关联度.

b) Leverage :P(A,B)-P(A)P(B)Leverage=0时A和B独立,Leverage越大A和B的关系越密切

c) Conviction:P(A)P(!B)/P(A,!B) (!B表示B没有发生) Conviction也是用来衡量A和B的独立性。从它和lift的关系(对B取反,代入Lift公式后求倒数)可以看出,这个值越大, A、B越关联。

6. minMtric 度量的最小值。

7. numRules 要发现的规则数。

8. outputItemSets 如果设置为真,会在结果中输出项集。

9. removeAllMissingCols 移除全部为缺省值的列。

10. significanceLevel 重要程度。重要性测试(仅用于置信度)。

11. upperBoundMinSupport 最小支持度上界。 从这个值开始迭代减小最小支持度。

12. verbose 如果设置为真,则算法会以冗余模式运行。

设置好参数后点击start运行可以看到Apriori的运行结果:

FPGrowth运行的结果是一样的:

结合实验结果阐释下列12个参数的含义

1.        car 如果设为真,则会挖掘类关联规则而不是全局关联规则。

2.        classindex 类属性索引。如果设置为-1,最后的属性被当做类属性。

3.        delta 以此数值为迭代递减单位。不断减小支持度直至达到最小支持度或产生了满足数量要求的规则。

4.        lowerBoundMinSupport 最小支持度下界。

5.        metricType 度量类型。设置对规则进行排序的度量依据。可以是:置信度(类关联规则只能用置信度挖掘),提升度(lift),杠杆率(leverage),确信度(conviction)。

在 Weka中设置了几个类似置信度(confidence)的度量来衡量规则的关联程度,它们分别是:

a)        Lift : P(A,B)/(P(A)P(B)) Lift=1时表示A和B独立。这个数越大(>1),越表明A和B存在于一个购物篮中不是偶然现象,有较强的关联度.

b)        Leverage :P(A,B)-P(A)P(B)

Leverage=0时A和B独立,Leverage越大A和B的关系越密切

c)        Conviction:P(A)P(!B)/P(A,!B) (!B表示B没有发生) Conviction也是用来衡量A和B的独立性。从它和lift的关系(对B取反,代入Lift公式后求倒数)可以看出,这个值越大, A、B越关联。

6.        minMtric 度量的最小值。

7.        numRules 要发现的规则数。

8.        outputItemSets 如果设置为真,会在结果中输出项集。

9.        removeAllMissingCols 移除全部为缺省值的列。

10.    significanceLevel 重要程度。重要性测试(仅用于置信度)。

11.    upperBoundMinSupport 最小支持度上界。 从这个值开始迭代减小最小支持度。

12.    verbose 如果设置为真,则算法会以冗余模式运行。

二、实验结果及分析

1. 以其中一组实验为例做详细分析

具体参数设置如下图:

完整的实验结果输出及具体分析

=== Run information ===     // 实验运行信息

Scheme:       weka.associations.Apriori -I -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.5 -S -1.0 -c -1

Relation:     contact-lenses       //数据的名称 contact-lenses

Instances:    24         //数据的记录数 24

Attributes:   5         //属性数目 5以及各属性名称

age

spectacle-prescrip

astigmatism

tear-prod-rate

contact-lenses

=== Associator model (full training set) ===

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  scheme -所选的关联规则挖掘方案: Apriori算法

%  算法的参数设置:-I -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.5 -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.5 - 最小支持度下届设为0.5;

%  S -1.0 - 重要程度为-1.0;

%  c -1 - 类索引为-1输出项集设为真

%  (由于car, removeAllMissingCols, verbose都保持为默认值False,因此在结果的参数设置为缺省,若设为True,则会在结果的参数设置信息中分别表示为A, R,V)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Apriori  // Apriori算法运行结果

=======

Minimum support: 0.5 (12 instances)  //最小支持度0.5,即最少需要12个实例

Minimum metric : 0.9   //最小度量: 0.9

Number of cycles performed: 10    //进行了10轮搜索

Generated sets of large itemsets:     //生成的频繁项集

Size of set of large itemsets L(1): 7     //频繁1项集:7个

Large Itemsets L(1):      //频繁1项集(outputItemSets设为True, 因此下面会具体列出)

spectacle-prescrip=myope 12

spectacle-prescrip=hypermetrope 12

astigmatism=no 12

astigmatism=yes 12

tear-prod-rate=reduced 12

tear-prod-rate=normal 12

contact-lenses=none 15

%%%%%%%%%%%%%%%%%%%%%%%%

在上面所示数据界面中,分别点击标签spectacle-prescrip,astigmatism,tear-prod-rate和contact-lenses,该列的值会自动进行分类排序,可以很方便的对上面结果进行。点击age标签,其值按pre-presbiopic、presbiopic和young分类排序,可以看到各属性值的记录数均为8<12,不满足最小支持度,因此age属性的所有取值都没有列在上面结果中。

%%%%%%%%%%%%%%%%%%%%%%%%

Size of set of large itemsets L(2): 1    //频繁2项集: 1个

Large Itemsets L(2):

tear-prod-rate=reduced contact-lenses=none 12

//tear-prod-rate取值为reduced且 contact-lenses取值为none 的记录数共有12个

Best rules found:    //最佳关联规则

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1)

// 若tear-prod-rate取值为reduced可以推出 contact-lenses的取值为none,该关联规则置信度为100%

2.其它实验设置及部分结果展示

1. 实验中,若其它参数保持为默认值,将最小支持度下界设为0.8,则运行结果会显示”No large itemsets and rules found!”,即找不到满足条件的关联规则。

2. 若其它参数保持为默认值,将最小支持度下界设为0.25,上界设为0.8,度量选为置信度,最小值为0.8,则运行结果找到:频繁1项集10个,频繁2项集18个,频繁3项集4个,找到的最佳关联规则为:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1)

2. spectacle-prescrip=myope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

3. spectacle-prescrip=hypermetrope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

4. astigmatism=no tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

5. astigmatism=yes tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

6. spectacle-prescrip=myope contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86)

7. astigmatism=no contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86)

8. contact-lenses=none 15 ==> tear-prod-rate=reduced 12    conf:(0.8)

3. 若其它参数保持为默认值,将最小支持度下界设为0.25,上界设为0.8,度量选为提升度(Lift :P(A,B)/(P(A)P(B))),最小值为1.1,则运行结果找到10条最佳关联规则,前3条如下:

1. tear-prod-rate=reduced 12 ==> spectacle-prescrip=myope contact-lenses=none 6    conf:(0.5) < lift:(1.71)> lev:(0.1) [2] conv:(1.21)

2. spectacle-prescrip=myope contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86) < lift:(1.71)> lev:(0.1) [2] conv:(1.75)

3. tear-prod-rate=reduced 12 ==> astigmatism=no contact-lenses=none 6    conf:(0.5) < lift:(1.71)> lev:(0.1) [2] conv:(1.21)

4. 若其它参数保持为默认值,将最小支持度下界设为0.25,上界设为0.8,度量选为杠杆率(Leverage:P(A,B)-P(A)P(B),在下面第一条规则中,[4]表示满足lev:(0.19)的实例数目),最小值为0.1,则运行结果找到6条最佳关联规则,前3条如下:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1) lift:(1.6) < lev:(0.19) [4]> conv:(4.5)

2. contact-lenses=none 15 ==> tear-prod-rate=reduced 12    conf:(0.8) lift:(1.6) < lev:(0.19) [4]> conv:(1.88)

3. tear-prod-rate=reduced 12 ==> spectacle-prescrip=myope contact-lenses=none 6

5. 若其它参数保持为默认值,将最小支持度下界设为0.25,上界设为0.8,度量选为确信度(Conviction:P(A)P(!B)/P(A,!B)),最小值为1.1,则运行结果找到10条最佳关联规则,前3条如下:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1) lift:(1.6) lev:(0.19) [4] < conv:(4.5)>

2. spectacle-prescrip=myope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1) lift:(1.6) lev:(0.09) [2] < conv:(2.25)>

3. spectacle-prescrip=hypermetrope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1) lift:(1.6) lev:(0.09) [2] < conv:(2.25)>

ipriori weka java_weka apriori算法详解以及参数详解相关推荐

  1. 线程池源代码详解,参数详解

    线程池源代码详解,参数详解 ThreadPoolExecutor 构造函数源代码 public ThreadPoolExecutor(int corePoolSize, int maximumPool ...

  2. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  3. ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

    @ioctl函数详解 一.ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); ...

  4. gzip和gunzip 解压参数详解

    Linux压缩保留源文件的方法: gzip –c filename > filename.gz Linux解压缩保留源文件的方法: gunzip –c filename.gz > file ...

  5. 【实用算法教学】——Apriori算法,教你使用亲和性分析方法推荐电影

    本文学习如何用亲和性分析方法找出在什么情况下两个对象经常一起出现.通俗来讲,这也 叫"购物篮分析",因为曾有人用它找出哪些商品经常一起出售. 前一篇文章关注的对象为球队,并用特征描 ...

  6. 计算机网络参数怎么看,电脑显示器参数详解 看完秒懂! 显示器参数怎么看?...

    显示器参数怎么看?无论是显示器的宣传.购买页面,还是专业媒体的显示器评测中,我们都会看到一些用来描述显示器性能的参数.小编觉着,显示器就像是电脑的一张面孔,显示着它的各种表情,也负责与用户的沟通,而显 ...

  7. scikit-learn 线性回归 LinearRegression 参数详解

    scikit-learn 线性回归 LinearRegression 参数详解 LinearRegression 参数详解 参考文献 LinearRegression 参数详解 # 从 sklearn ...

  8. Apriori算法详解之【一、相关概念和核心步骤】

    感谢红兰整理的PPT,简单易懂,现在将其中精彩之处整理,与大家分享. 一.Apriori算法简介:  Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测 ...

  9. 大白话解析Apriori算法python实现(含源代码详解)

    大白话解析Apriori算法python实现(含源代码详解) 一.专业名词解释 二.算法思路 三.python代码实现 四.Aprioir的优点.缺点及改进方法 本文为博主原创文章,转载请注明出处,并 ...

最新文章

  1. 面试官:kill -9 进程杀不掉,怎么办?
  2. 语音购票、刷脸进站:上海联手阿里打造全球首个AI地铁之城
  3. Redis入门(暂不更新)
  4. dbeaver 连接hbase 数据库
  5. 蚂蚁分类信息系统 5.8 信息浏览量后台自定义设置
  6. django-模板的母版与子版
  7. mysql 安装目录配置_linux 下mysql安装,目录配置
  8. c++中 vs 简单的对txt文件读写
  9. 禁止国外IP连接服务器
  10. 将时谐电磁场引入工程电磁场的意义_电磁场思考题
  11. yum install安装时 提示“Another app is currently holding the yum lock; waiting for it to exit...”原因和解决
  12. QQ互联登陆(Java)
  13. 照片怎么转换成pdf?
  14. Rme Babyface Pro FS娃娃脸声卡安装调试教程
  15. 3、低功耗蓝牙(BLE)配对和解绑
  16. SLAM学习(SL)基于特征的前度匹配(LOAM系列)
  17. 主题狗themes.dog-精选上百种优秀开源网站主题、博客主题、商城模板
  18. svn 禁止访问的问题
  19. ![CDATA[]]和转义字符
  20. Matlab添加工具箱Toolbox的方法

热门文章

  1. CloudStack重装。
  2. 分布式事务XA、TCC、AT总结
  3. 蜘蛛侠-scrapy框架
  4. net.ipv4.tcp_max_tw_buckets=10
  5. LoadRunner下载、安装与使用 | VUGen、Controller、Analysis | 性能测试笔记
  6. 青岛市两化融合的政策
  7. 孩子成长-家庭和二胎
  8. matlab学习中遇到的一些语句(记录下来)
  9. css中position的4个取值的含义
  10. 想自己建网站做SEO赚钱,应如何操作?