我在使用Spark ML运行Kmeans。我有一组数据和三个现有的中心,例如这三个中心是:[1.0,1.0,1.0],[5.0,5.0,5.0],[9.0,9.0,9.0].
那么,我如何指定Kmeans的中心为上述三个向量呢?我看到Kmeans对象有一个seed参数,但seed参数是long类型而不是数组。那么,我如何告诉Spark Kmeans只使用现有的中心进行聚类呢?
或者说,我不理解Spark Kmeans中的seed是什么意思,我认为seeds应该是一个表示指定中心的向量数组,在运行聚类之前使用。
回答:
实际上,seed
并不是你所想的意思,即它不是用来“播种”(初始化)聚类中心的,而是简单地设置随机种子 – 你可以在Scala和Python API的文档中确认这一点。
据我所知,目前(Spark 2.1)在Spark ML中没有办法为k-means提供初始聚类中心(参见这个回答关于Spark MLlib)。根据文档,initMode
参数:
可以是“random”以随机选择点作为初始聚类中心,或者是“k-means||”以使用k-means++的并行变体