使用mahout fpgrowth算法求关联规则

首先,这篇文章的内容大部分取自国外一篇博客Finding association rules with Mahout Frequent Pattern Mining,写这个出于几个原因,一 原文是英文的;二该博客貌似还被墙了,反正我是用了goagent才看到的;三 我简化了其实验内容,单纯的用数字表示item了。

  首先是实验环境

  • jdk >= 1.8
  • hadoop (>=1.2.1)
  • mahout >= 0.9

  环境搭建就不多说了,唯一注意的是mahout按照官网的指导绝对没问题,如果安装之后报错,可能是你的hadoop版本问题(一般mahout官网上面支持的是hadoop1.2),换个hadoop试试,我遇到的错就是一直

Exception in thread "main" java.lang.NoClassDefFoundError:classpath。

  我用的数据是mahout官网上提供的retail.dat(本人用自己的数据分隔符是、t),使用哪个数据没关系,mahout fpgrowth的数据格式要求如下: 

  [item id1], [item id2], [item id3]
  0, 2, 6, ...
  0, 1, 6, ...
  4, 5, ...
  ...

  间隔符可以是别的,retail.dat里用的是空格,但要注意的是使用命令行时要标志。

  这里不设置MAHOUT_LOCAL,让mahout在hadoop上跑,所以先使用hadoop命令把数据放到hdfs上,在terminal输入:

  hadoop fs -put output.dat retail.dat

  然后输入如下指令运行mahout:

  mahout fpg -i output.dat -o patterns -k 10 -method mapreduce -regex '[\ ]' -s 10 (这条指令:mahout fpg说真的在mahout0.9上没有了)

代替上述指令:hadoop jar ../mahout/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.fpm.pfpgrowth.FPGrowthDriver -i /user/hadoop/testdata/history_download -o out/ -k 3 -method mapreduce -regex '[\t]' -s 10

  指令的含义在mahout的网站上有详细说明,简要说下,-i表示输入,-o表示输出,-k 10表示找出和某个item相关的前十个频繁项,-method mapreduce表示使用mapreduce来运行这个作业,-regex '[\ ]'表示每个transaction里用空白来间隔item的,-s 10表示只统计最少出现10次的项。

  成功运行后在patterns文件夹里会出现四个文件或者文件夹

  • fList: 记录了每个item出现的次数的序列文件
  • frequentpatterns: 记录了包含每个item的频繁项的序列文件(key代表频繁模式,value代表这个频繁模式出现的次数)
  • fpGrowth
  • parallelcounting

  当然这些结果是在hdfs上面的,可以使用mahout命令查看下这些输出,在终端输入  mahout seqdumper -i patterns/frequentpatterns/part-r-00000 -o result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值