当数据存储在 HDFS 中时,我有一个关于 k-means 聚类算法如何工作的非常基本的问题。对于固定值 K(比如 3),是否在每个节点上的数据子集上进行训练?但是然后我们将有 3* 数量的节点质心?
如果我们应用线性回归会有什么不同?它只会训练存储在本地每个节点上的数据吗?
当数据存储在 HDFS 中时,我有一个关于 k-means 聚类算法如何工作的非常基本的问题。对于固定值 K(比如 3),是否在每个节点上的数据子集上进行训练?但是然后我们将有 3* 数量的节点质心?
如果我们应用线性回归会有什么不同?它只会训练存储在本地每个节点上的数据吗?
在上面的评论中从链接发布详细信息。
数据可以在多个处理器(或流或线程)之间进行分区。每个处理器都可以读取前一次迭代的集群中心并将处理器上的行分配给集群。然后每个处理器为其数据计算新的中心。每个实际的集群中心(对于所有处理器上的数据)然后是每个处理器上中心的加权平均值。
换句话说,数据行不需要全局组合。它们可以在本地组合,减少的结果集在所有处理器之间组合。事实上,MapReduce 甚至为这种类型的算法包含了一个“组合”方法。
您假设一个共享文件具有为每个处理器计算的质心。该文件包含:
集群 ID。
集群坐标。
分配给集群的行数。
这是质心文件。
通过算法的迭代
将向该文件添加另一组行。该信息是唯一
需要在全球范围内传达的信息。
在 MapReduce 框架中有两种方法可以做到这一点。第一个使用 map、combine 和 reduce。第二种只使用 map 和 reduce。