记录近期小改K-Means至MapReduce上的心得

背景:

    在全部聚类算法中KMeans算是表面上最简单的一种,没有过多恼人的古希腊符号公式,没有过度繁杂的公式嵌套。对于一个初学矩阵或者仅有向量概念的非专业人士的来讲,不可不畏是一把踹门利器。这个世界上越是简单的东西,其实越是复杂,尤为在笔者将其改形成MapReduce时,发现并不是那么容易一跃而过。虽然有现成的代码供把玩,可是对于练手仍是值得一试。 算法

 

心得:

· 纯理论一笔带过 多线程

    KMean的大体实现过程就是任意指定N个的质心,而后对全部星星进行遍历,寻找与这个N个质心距离最近欧几里得距离的星星,将其归为一类,再从这一类中从新计算N个质心坐标属性。直至这N个质心坐标变化DELTA小至本身设定的阀值。架构

· 一些心得 oop

  1. 网上对于KMEAN的算法有不少,大多数集中于(2质心+2维+单机)版本。要想支持(N质心+N维+MP)着实须要从新好好考虑程序架构,固然更NB者还能支持多线程。
  2. 嵌套问题是目前大多数非JAVA Hadoop计算的一道门槛,即使是JAVA类自己在JOB CHAIN上也经常会碰到傻傻分不清的状况。对于10G以上数据如何在MP上发挥最大功效,就是减小JOB和TASK之间来回SHUFFLE。
  3. 既指望一次MP,完成整个运算,同时将负载尽量在Map阶段进行压榨。也所以,笔者在假设数据彻底散列的状况下完成每组TASK的计算,已指望获得N个K(质心)离开最终质心近似向量值。在Reduce阶段粗暴地对N个K作归类,再作算术平均,再作一把全两项遍历,最后得出N个类。难就难在对N个TASK的K作从新归类
  4. 因为主要经过Streaming来计算,整个对于Hadoop的I/O仍是有较大负荷。
  5. 下面两幅图简单介绍下K-Means聚合过程。左边是2个质心2维,右边是3个质心2维。

                       

 

DATA:

 

X      Y
29    12
21    33
23    23
25    23
33    24
22    36
23    12
16    20
23    32
33    10
26    23
32    14
33    7
38    4
13    33
65    77
43    63
81    87
72    64
54    71
61    67
81    58
57    81
54    79
50    82
53    62
74    58
77    55
69    81
70    82
44    55
60    58
相关文章
相关标签/搜索