前面几篇介绍了关联规则的一些基本概念和两个基本算法,但实际在商业应用中,写算法反而比较少,理解数据,把握数据,利用工具才是重要的,前面的基础篇是对算法的理解,这篇将介绍开源利用数据挖掘工具weka进行管理规则挖掘。

weka数据集格式arff

  arff标准数据集简介

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

  1. %weather dataset
  2. @relation weather
  3.  
  4. @attribute outlook {sunny, overcast, rainy}
  5. @attribute temperature numeric
  6. @attribute humidity numeric
  7. @attribute windy {TRUE, FALSE}
  8. @attribute play {yes, no}
  9.  
  10. @data
  11. sunny,85,85,FALSE,no
  12. sunny,80,90,TRUE,no
  13. overcast,83,86,FALSE,yes
  14. rainy,70,96,FALSE,yes
  15. rainy,68,80,FALSE,yes
  16. rainy,65,70,TRUE,no
  17. overcast,64,65,TRUE,yes
  18. sunny,72,95,FALSE,no
  19. sunny,69,70,FALSE,yes
  20. rainy,75,80,FALSE,yes
  21. sunny,75,70,TRUE,yes
  22. overcast,72,90,TRUE,yes
  23. overcast,81,75,FALSE,yes
  24. rainy,71,91,TRUE,no

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

  arff稀疏数据集   

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

  1. freshmeat dairy confectionery
  2. freshmeat confectionery
  3. cannedveg frozenmeal beer fish
  4. dairy wine
  5. freshmeat wine fish
  6. fruitveg softdrink
  7. beer
  8. fruitveg frozenmeal
  9. fruitveg fish
  10. fruitveg freshmeat dairy cannedveg wine fish
  11. fruitveg fish
  12. dairy cannedmeat frozenmeal fish

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

  1. 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
  2. 30 31 32
  3. 33 34 35
  4. 36 37 38 39 40 41 42 43 44 45 46
  5. 38 39 47 48
  6. 38 39 48 49 50 51 52 53 54 55 56 57 58
  7. 32 41 59 60 61 62
  8. 3 39 48
  9. 63 64 65 66 67 68
  10. 32 69

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

  1. @relation 'basket'
  2. @attribute fruitveg {F, T}
  3. @attribute freshmeat {F, T}
  4. @attribute dairy {F, T}
  5. @attribute cannedveg {F, T}
  6. @attribute cannedmeat {F, T}
  7. @attribute frozenmeal {F, T}
  8. @attribute beer {F, T}
  9. @attribute wine {F, T}
  10. @attribute softdrink {F, T}
  11. @attribute fish {F, T}
  12. @attribute confectionery {F, T}
  13. @data
  14. {1 T, 2 T, 10 T}
  15. {1 T, 10 T}
  16. {3 T, 5 T, 6 T, 9 T}
  17. {2 T, 7 T}
  18. {1 T, 7 T, 9 T}
  19. {0 T, 8 T}
  20. {6 T}
  21. {0 T, 5 T}
  22. {0 T, 9 T}
  23. {0 T, 1 T, 2 T, 3 T, 7 T, 9 T}
  24. {0 T, 9 T}
  25. {2 T, 4 T, 5 T, 9 T}

  可以看到

  1. freshmeat dairy confectionery
  2. freshmeat confectionery

  表示为了:

  1. {1 T, 2 T, 10 T}
  2. {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 类属性索引。如果设置为-,最后的属性被当做类属性。
  3. . delta 以此数值为迭代递减单位。不断减小支持度直至达到最小支持度或产生了满足数量要求的规则。
  4. . lowerBoundMinSupport 最小支持度下界。
  5. . metricType 度量类型。设置对规则进行排序的度量依据。可以是:置信度(类关联规则只能用置信度挖掘),提升度(lift),杠杆率(leverage),确信度(conviction)。
  6. Weka中设置了几个类似置信度(confidence)的度量来衡量规则的关联程度,它们分别是:
  7. a) Lift P(A,B)/(P(A)P(B)) Lift=1时表示AB独立。这个数越大(>),越表明AB存在于一个购物篮中不是偶然现象,有较强的关联度.
  8. b) Leverage :P(A,B)-P(A)P(B)Leverage=0AB独立,Leverage越大AB的关系越密切
  9. c) Conviction:P(A)P(!B)/P(A,!B) (!B表示B没有发生) Conviction也是用来衡量AB的独立性。从它和lift的关系(对B取反,代入Lift公式后求倒数)可以看出,这个值越大, AB越关联。
  10. . minMtric 度量的最小值。
  11. . numRules 要发现的规则数。
  12. . outputItemSets 如果设置为真,会在结果中输出项集。
  13. . removeAllMissingCols 移除全部为缺省值的列。
  14.  
  15. . significanceLevel 重要程度。重要性测试(仅用于置信度)。
  16.  
  17. . upperBoundMinSupport 最小支持度上界。 从这个值开始迭代减小最小支持度。
  18.  
  19. . verbose 如果设置为真,则算法会以冗余模式运行。

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

  FPGrowth运行的结果是一样的:

  每条规则都带有出现次数、自信度、相关度等数值。

  下面测一个大一点的数据集retail.arff[1](retail.arff是由retail.txt转化而来,为了不造成误解,我在id好前加了一个"I",比如2变为I2),这个数据用的稀疏数据表示方法,数据记录有88162条,用Apriori算法在我的2G电脑上跑不出来,直接内存100%,用FPGrowth可以轻松求出,看一下运行结果:  

  其他参数可以自己调整比较。

参考文献:

  [1].本文用的所有数据集basket.txt,basket.arff,normalBasket.arff,retail.txt,retail.arff都在这里可下载.

  [2].weka Apriori算法实例操作详解:http://blog.csdn.net/haosijia929/article/details/5596939

感谢阅读,欢迎回帖交流

转置请注明出处:www.cnblogs.com/fengfenggirl

数据挖掘系列(4)使用weka做关联规则挖掘的更多相关文章

  1. 数据挖掘系列(5)使用mahout做海量数据关联规则挖掘

    上一篇介绍了用开源数据挖掘软件weka做关联规则挖掘,weka方便实用,但不能处理大数据集,因为内存放不下,给它再多的时间也是无用,因此需要进行分布式计算,mahout是一个基于hadoop的分布式数 ...

  2. 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法

    转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法 我计划 ...

  3. 数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法

    整理数据挖掘的基本概念和算法,包括关联规则挖掘.分类.聚类的常用算法,敬请期待.今天讲的是关联规则挖掘的最基本的知识. 关联规则挖掘在电商.零售.大气物理.生物医学已经有了广泛的应用,本篇文章将介绍一 ...

  4. 大数据挖掘: FPGrowth初识--进行商品关联规则挖掘

    @(hadoop)[Spark, MLlib, 数据挖掘, 关联规则, 算法] [TOC] 〇.简介 经典的关联规则挖掘算法包括Apriori算法和FP-growth算法.Apriori算法多次扫描交 ...

  5. 数据挖掘算法之-关联规则挖掘(Association Rule)

    在数据挖掘的知识模式中,关联规则模式是比较重要的一种.关联规则的概念由Agrawal.Imielinski.Swami 提出,是数据中一种简单但很实用的规则.关联规则模式属于描述型模式,发现关联规则的 ...

  6. 数据挖掘算法之关联规则挖掘(一)apriori算法

    关联规则挖掘算法在生活中的应用处处可见,几乎在各个电子商务网站上都可以看到其应用 举个简单的例子 如当当网,在你浏览一本书的时候,可以在页面中看到一些套餐推荐,本书+有关系的书1+有关系的书2+... ...

  7. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)

    在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...

  8. 数据挖掘系列(2)--关联规则FpGrowth算法

    上一篇介绍了关联规则挖掘的一些基本概念和经典的Apriori算法,Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除 ...

  9. 数据挖掘进阶之关联规则挖掘FP-Growth算法

    数据挖掘进阶之关联规则挖掘FP-Growth算法 绪 近期在写论文方面涉及到了数据挖掘,需要通过数据挖掘方法实现软件与用户间交互模式的获取.分析与分类研究.主要涉及到关联规则与序列模式挖掘两块.关联规 ...

随机推荐

  1. CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)

    准备篇 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dp ...

  2. 本人常用的Linux bash快捷键(持续更新)

    按使用频率由高到低排列: Ctrl + a :移到命令行首Ctrl + e :移到命令行尾 Ctrl + u :从光标处删除至命令行首Ctrl + k :从光标处删除至命令行尾 Ctrl + d :删 ...

  3. MyCat 学习笔记 第九篇.数据分片 之 数值分布

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考  <MyCat 学习笔记>第六篇. ...

  4. Gradle系列教程之依赖管理(转)

    转自Lippi-浮生志 :http://ezlippi.com/blog/2015/05/gradle-dependency-management.html 这一章我将介绍Gradle对依赖管理的强大 ...

  5. 关于点击ztree的节点将页面生成到easyui的新增选项卡(easyui-tabs)时,总是在浏览器中生成一个新的页面的问题

    最近的项目中用到了easyui,还有ztree菜单.在这里将我遇到的一些问题写出来算是做个笔记吧. 这是我头一次在博客园里分享代码,我的处女作,写的不好的地方还望各位见谅! 由于很久没有写过前台的东西 ...

  6. matlab ASCII 格式导入

    matlab ASCII 格式导入 可以用fprintf函数,来代替save函数啊比如现在我有一个变量a=[0.1223 345.4544]如果我想保存它的话,可以用下面的程序:fid = fopen ...

  7. eclipse在Ubuntu 13.04下的安装过程及问题小记

    一.eclipse安装过程 首先确保在安装eclipse之前已经安装好Java虚拟机 1. eclipse官网下载压缩包 下载地址:http://www.eclipse.org/downloads/? ...

  8. Mysql在windows下和linux下对表名大小写默认要求的一个细节

    今天在虚拟机里搭建项目环境,偷了下懒,直接把本机数据库中的表用sqlyog复制给虚拟机中的数据库,然后开始部署项目,项目一启动提示: Table 'sdmqrt.QRTZ_LOCKS' doesn't ...

  9. Qt与VC编程合作起龌龊

    由于历史原因,某软件项目的界面采用QT,而后台用了VC,界面静态调用了VC生成的dll,一直以来都能够快乐的合作,然而最近出现两个小问题,觉得两者之间的合作并没有想象的那么美好. 在VC下用多媒体定时 ...

  10. mysql 防止update/delete误操作

    身为一php开发攻城狮,常常涉及在应用中写update/delete语句,忘记加where,后果不堪设想. 还会出现在cml下直接操作mysql的情况,如果mysql 权限够大,一个update/de ...