Apriori算法实战福彩双色球

  Apriori算法是数据挖掘的入门级算法,这里记录一下用Weka提供的Apriori实现对福彩双色球开奖结果的挖掘过程。

  我们的挖掘目标是历届开奖结果中红球的频繁2,3项集。

    1. 数据准备

  福彩双色球的原理是红球33选6,蓝球是16选1,历届福彩双色球的中奖结果可以在乐彩网站找到,我们可以用一个非常简单的爬虫去爬取这些数据。我这里有已经爬好的数据,从2003年2月23号的第一期开始,到2012年10月24号为止,总共1403期,可以来信(kemaswill@163.com)索取。

  双色球是从红球中33选6,所以条记录只有6个数,假设为3,7,11,18,25,29,我们需要对这种记录进行预处理以便Weka的Apriori算法识别,该记录处理后的结果为0,0,3,0,0,0,7,0,0,0,11,0,0,0,0,0,0,18,0,0,0,0,0,0,25,0,0,0,29,0,0,0,0。

  对每条记录做如上处理后,创建arff文件:

  @relation lottery


  @attribute red1 {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,29,30,31,32,33}
  @attribute red2 {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,29,30,31,32,33}
  @attribute red3 {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,29,30,31,32,33}
   ...
  @attribute red32 {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,29,30,31,32,33}
  @attribute red33 {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,29,30,31,32,33}

  @data
  0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,28,0,30,31,0,33
  0,0,0,0,0,0,0,0,0,0,0,0,0,14,15,0,0,18,0,0,0,0,0,0,25,26,0,0,0,30,0,0,0
  0,0,0,0,0,0,0,0,0,10,11,12,13,0,0,0,0,0,0,0,0,0,0,0,0,26,0,28,0,0,0,0,0
  0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,0,0,0,19,20,21,0,0,0,0,26,0,0,0,0,0,0,0
   ...

    2. 运行Apriori算法

    我是在Eclipse中导入Weka的源代码,然后直接执行weka.association.Apriori算法,参数为:

    -t path/to/lottery.arff -g path/to/lottery_result.txt  -C 0.3 -M 0.01 -I -Z

    -t为arff输入文件,-g为结果的存储路径,-C为关联规则的最小可信度,-M为频繁模式的最小支持度,-I表示输出频繁模式(默认只输出关联规则,不输出频繁模式),-Z表示0代表缺失值,不会被当做频繁模式处理。

    3. 分析结果

    在支持度为1%的情况下,所有的2项集都是频繁二项集(亦即33*32/2=528个频繁二项集)。

    频繁三项集有6个:

    red1=1 red18=18 red22=22 14
    red3=3 red7=7 red10=10 16
    red3=3 red7=7 red13=13 14
    red3=3 red24=24 red27=27 14
    red4=4 red10=10 red26=26 15
    red4=4 red22=22 red29=29 14

    在支持度为4%的情况下,没有频繁三项集(最频繁的三项集频数也就是16,也就1%多一点点)有8个频繁二项集:

    red1=1 red18=18 58
    red3=3 red5=5 66
    red3=3 red7=7 61
    red3=3 red21=21 56
    red4=4 red30=30 56
    red14=14 red30=30 56
    red18=18 red30=30 59
    red20=20 red26=26 59

原文地址:https://www.cnblogs.com/kemaswill/p/2738912.html