Kmeans算法是聚类算法中最简单的一种算法,可以说学习聚类算法的第一种算法就是kmeans算法
什么是聚类?
什么是分类?
他们之间有什么区别?聚类是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,是类别内的数据比较相似,类别之间的数据相似度比较大
分类指对已有标注的数据集进行划分。
聚类是无监督学习,分类是有监督学习
选择初始化的k个类别中心a1,a2,a3....ak;
对于每个样本Xi,将其标记为距离类别中心aj最近的类别j;
更新每个类别的中心点aj为隶属该类别的所有样本的均值
重复上面两个步骤,直到达到某个中止条件
距离算法一般采用的是欧氏距离
初始中心应该怎么选择呢?
方法:选择批次距离尽可能远的K个点;用层次聚类算法。
如何用MapReduce实现kmeans算法呢?
Map阶段:
读取一条数据就与中心做对比,求出该条记录对应的中心。然后以中心的ID为Key,该条数据为value将数据输出。
利用reduce的归并功能将相同的Key归并到一起,集中与该Key对应的数据,再求出这些数据的平均值,输出平均值
对比reduce求出的新的中心与原来的中心,如果不相同,清空原中心的数据文件,将reduce的结果接到中心文件中。
删掉reduce的输出目录以便下次输出
继续运行任务
对比reduce求出的平均值与原来的中心,如果相同,则删掉reduce的输出目录,运行一个没有reduce