数据分析算法二:Apriori算法的Weka实现

View  times

Welcome to Live!

利用Weka实现Apriori算法(关联分析算法),是比较简单实践的数据分析方式

一、知识准备

1、Apriori算法

a.算法解释

  • Apriori算法是常用于挖掘出数据关联规则的算法,能够发现事物数据库中频繁出现的数据集,这些联系构成的规则可帮助用户找出某些行为特征,以便进行企业决策。例如,某食品商店希望发现顾客的购买行为,通过购物篮分析得到大部分顾客会在一次购物中同时购买面包和牛奶,那么该商店便可以通过降价促销面包的同时提高面包和牛奶的销量
  • Apriori算法是经典生成关联规则的频繁项集挖掘算法,其目标是找到最多的K项频繁集

b.算法流程

  • 扫描数据集,得到所有出现过的数据,作为候选1项集。
  • 挖掘频繁k项集。
    • 扫描计算候选k项集的支持度。
    • 剪枝去掉候选k项集中支持度低于最小支持度α的数据集,得到频繁k项集。如果频繁k项集为空,则返回频繁k-1项集的集合作为算法结果,算法结束。如果得到的频繁k项集只有一项,则直接返回频繁k项集的集合作为算法结果,算法结束。
    • 基于频繁k项集,连接生成候选k+1项集。
  • 利用步骤2,迭代得到k=k+1项集结果。

2、Weka工具

可能以后会有Weka入门教程(挖坑ing)

二、Weka实践

1、数据注入

  • 准备页面
    image.png
    image.png

  • 使用weka的数据
    weka自带的文件数据在安装目录的data文件下,选择打开即可,这里使用的使用contact-lenses.aff
    image.png
    image.png

  • 使用自己的数据

2、算法选择

  • 查找算法

image.png

3、参数调整

  • 打开参数表
    image.png

  • 参数含义

    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 如果设置为真,则算法会以冗余模式运行。

4、结果生成

image.png

三、结果分析

1、图样示例

image.png

1、信息解析

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

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    === Run information ===     // 实验运行信息
    1. 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
    2. Relation: contact-lenses //数据的名称 contact-lenses
    3. Instances: 24 //数据的记录数 24
    4. Attributes: 5 //属性数目 5以及各属性名称
    a) age
    b) spectacle-prescrip
    c) astigmatism
    d) tear-prod-rate
    e) 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 <confidence>: 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属性的所有取值都没有列在上面结果中。

    1
    2
    3
    4
    5
    6
    7
    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%
  • 其它实验设置及部分结果展示
    实验中,若其它参数保持为默认值,将最小支持度下界设为0.8,则运行结果会显示”No large itemsets and rules found!”,即找不到满足条件的关联规则。
    若其它参数保持为默认值,将最小支持度下界设为0.25,上界设为0.8,度量选为置信度,最小值为0.8,则运行结果找到:频繁1项集10个,频繁2项集18个,频繁3项集4个,找到的最佳关联规则为:

    1
    2
    3
    4
    5
    6
    7
    8
    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)
  • 当选用加载weather.norninal.arff数据集时,结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Best rules found:
    1. outlook=overcast 4 ==> play=yes 4 <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43)
    2. temperature=cool 4 ==> humidity=normal 4 <conf:(1)> lift:(2) lev:(0.14) [2] conv:(2)
    3. humidity=normal windy=FALSE 4 ==> play=yes 4 <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43)
    4. outlook=sunny play=no 3 ==> humidity=high 3 <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5)
    5. outlook=sunny humidity=high 3 ==> play=no 3 <conf:(1)> lift:(2.8) lev:(0.14) [1] conv:(1.93)
    6. outlook=rainy play=yes 3 ==> windy=FALSE 3 <conf:(1)> lift:(1.75) lev:(0.09) [1] conv:(1.29)
    7. outlook=rainy windy=FALSE 3 ==> play=yes 3 <conf:(1)> lift:(1.56) lev:(0.08) [1] conv:(1.07)
    8. temperature=cool play=yes 3 ==> humidity=normal 3 <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5)
    9. outlook=sunny temperature=hot 2 ==> humidity=high 2 <conf:(1)> lift:(2) lev:(0.07) [1] conv:(1)
    10. temperature=hot play=no 2 ==> outlook=sunny 2 <conf:(1)> lift:(2.8) lev:(0.09) [1] conv:(1.29)

    规则采用“前件 num.1 ==>结论 num.2”的形式表示,前件后面的数字表示有多少个实例满足前件,结论后的数字表示有多少个实例满足整个规则,这就是规则的”支持度“。
    规则排序有替代度量,除置信度(confidence)外,Apriori算法还支持lift(提升度)、leverage(杠杠率)、以及conviction(确信度),这些可以通过使用metricType进行选择。

四、参考博文

Data mining Apriori Weka