浅入浅出:PageRank算法 使用 TextRank 算法为文本生成关键字和摘要 基于物品的协同过滤 如何使用MapReduce实现基于物品的协同过滤(1) 如何使用MapReduce实现基于物品的协同过滤(2) 浅入浅出:K近邻算法 使用mahout下的朴素贝叶斯分类器对新闻分类 使用Affinity Propagation进行聚类 K-medoids聚类 矩阵分解在推荐系统中的应用:NMF和经典SVD实战 使用特征递归消除筛选特征 如何分配权重 比较NMF、PCA和VQ 方差和协方差 基于SVD的协同过滤 逻辑斯谛回归代码实现 隐语义模型和NMF(非负矩阵分解) 使用PCA处理MNIST数据集 使用GBDT选取特征 基于贝叶斯的文本分类系统的数据库设计 在hadoop1.2.1上安装mahout 0.9 Hadoop 2.4 实现Kmeans聚类算法 在Iris数据集上对比PCA、LDA、NMF 基于贝叶斯的文本分类实战 单层决策树 Logistic regression(逻辑斯蒂回归) 基于用户的协同过滤 词袋模型与文档-词矩阵 如何实现拼音与汉字的互相转换 梯度下降法 如何判定相似度 MovieLens数据集介绍 基于KNN的文本分类实战 Jasper文本分类系列博客阅读摘录 使用 Mean Shift进行聚类 朴素贝叶斯的三个常用模型:高斯、多项式、伯努利 使用决策树处理iris数据集 浅入浅出:从Kmeans到Kmeans++ 如何持久化scikit-learn中训练好的模型 浅入浅出:DBSCAN聚类算法(1) 浅入浅出:DBSCAN聚类算法(2) 2015阿里移动推荐算法比赛第一赛季总结 爬山算法 使用朴素贝叶斯分类器划分邮件 层次聚类 基于MapReduce的频繁项集挖掘 搜狗实体关系提取比赛

基于MapReduce的频繁项集挖掘


#机器学习


2014-11-29

排列组合的非递归算法 这篇文章中介绍了如何以非递归的形式获取多个元素的组合。在此基础上,很容易实现频繁项集挖掘的MaprReduce版本。

数据与需求

假定输入数据是商场中购物者的购买记录,这些数据存放在文本文件中,每一行代表某个人的某次购买记录,这些购买记录由商品对应的id组成,例如如下两次购买记录:

1 2 13 45
2 7 8 19 12 17 

需求是找到相对支持度为80%的频繁2项集。假设共有1000条记录,则如果两个商品属于频繁2项目,则需要这两个商品同时在1000×80%=800个购买记录中同时出现。

Map

输入:

一条购买记录,例如“1, 2, 13, 45”

通过生成组合的算法生成所有由两个商品id构成的组合并根据id的值从小到大排序,若购买记录中商品数量小于2,则不输出。 输出:

key: id_x, id_y
value: 1

Reduce

输入:

key: id_x, id_y
values: 1, 1, 1, 1, ...

根据输入的values,计算res = sum(values),若res >= 800,则输出。

输出:

key: id_x, id_y
value: res

至此,MapReduce job结束。

补充

在一个MapReduce job中也可以同时获取多个大小的频繁项集,例如同时获取相对支持度为80%的频繁2项集、频繁3项集。具体操作是在Map Task中计算2个商品的组合、3个商品的组合。

在计算多个大小的频繁项集时,其结果可以混合地输出到文件按中,也可以将不同大小的频繁项集输出到不同文件,相同大小的频繁项集输出到同一个文件。关于多个输出,在Hadoop中需要了解MultipleOutputFormat类MultipleOutputs类,可以参考《Hadoop权威指南 第2版》第7章中的“多个输出”这一节。



( 本文完 )