基于MapReduce编程模型的数据挖掘算法
Mapreduce是一个分布式计算模型,用来解决海量数据的计算问题。首先打个比方,我们要做菜,你切牛肉,我切土豆,这就是“Map”。我们人越多,切得就越快。然后我们把切好的牛肉和土豆放到一起,这就是“Reduce”。(1) Map阶段将一个大任务分解成小任务,并分发给每个节点,每个节点并行处理这些任务,处理速度很快。实现:读取文件内容的时候对每一行解析成key-value的形
Mapreduce是一个分布式计算模型,用来解决海量数据的计算问题。
首先打个比方,我们要做菜,你切牛肉,我切土豆,这就是“Map”。我们人越多,切得就越快。
然后我们把切好的牛肉和土豆放到一起,这就是“Reduce”。
(1) Map阶段
将一个大任务分解成小任务,并分发给每个节点,每个节点并行处理这些任务,处理速度很快。
实现:读取文件内容的时候对每一行解析成key-value的形式,
再传进map()函数,得到的结果也是以key-value的形式输出。
(2) Reduce阶段
对Map的结果汇总
实现:首先有一个shuffle的过程,对多个mapper任务的输出进行合并、排序,
然后传进reduce()函数,进行汇总处理,最后输出被保存到指定的目录下。
MapReduce的思想就是并发,有时候可以更快得实现数据挖掘算法。
KNN:
Map():每个worker节点都分配部分训练集,map()函数用来计算样本距离
输入键值对当中,key是所有样本标号,value是样本的属性跟标签,
输出key是测试样本的标号,value是某个训练样本的标签跟距离
Reduce():对同一个Key对应的标签跟距离,首先对距离排序,取出前K个标签,就可以预测了。
正常情况下reduce的机器一般小于map的机器,如果把map的输出全扔到reduce那边,那么reduce过程就会很久,
一个优化的方法就是在map的最后阶段,我们直接对每个key取前k个结果。
朴素贝叶斯:
Map():每个worker节点都分一些样本,map()的输入key是样本标号,value是样本记录,
map()函数对每一个记录拆分标签,把类别作为key,map()的输出key是类别,value是记录。
Reduce():将每条记录转换成矩阵,对每一个类别相同的record进行相加,再归一化就可以得到概率了。
再根据概率连乘进行分类。
k-means:
map():输入key是样本标号,value是样本信息,map()计算样本点到各个中心的距离,求出它属于哪个中点的类,
那么输出key是该样本所属的中心点,value是样本信息
reduce():对同一个key的点做一个累加,进行归总,再更新聚类中心。
更多推荐
所有评论(0)