2017-08-17 104 views
0

我正在处理一组坐标,并且想要动态地(我有很多组需要经过这个过程)了解数据中有多少个不同的组。我的方法是应用k-means来调查它是否会找到质心,我可以从那里去。为什么k-均值聚类会忽略大量数据?

当使用6个不同的聚类(直观地)绘制某些数据时,k-means算法继续忽略两个重要的聚类,同时将多个质心置入另一个。

见图像下面:

Clusters and Centroids

红是坐标数据点和蓝色是质心的是k均值提供。在这个特定情况下,我已经达到了15个(任意),但它仍然不能识别右侧的那些数据块,而是在它们之间插入一个中间点,而在右上角的集群中放置8个数据块。

不可否认,右上角的数据点稍多一点,但不是太多。

我在R中使用标准的k-means算法,只是在x和y坐标中输入。我试图标准化数据,但这没有任何区别。

有关为什么会出现这种情况的任何想法,或者可以应用其他潜在方法来试图动态了解数据中存在的不同群集的数量?

+1

你可以尝试标准化数据,并增加'iter.max'和'nstart'(也许'iter.max = 500'和'nstart = 25')?你有可能发布你的数据吗? – bouncyball

+0

如果你提供一个[可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)和样本输入数据,这很容易帮助我们运行并测试代码以查看发生了什么。 – MrFlick

+0

这已经工作了 - 谢谢! – andrewjones54

回答

0

你可以尝试用自组织映射

这是在此基础上建立了训练样本的输入空间的离散表示神经网络,聚类算法称为地图,并因此,一种做降维(SOM)的方法。

这个算法对于聚类也非常好,因为不需要事先选择簇的数量(在k-意思是你需要选择k,这里不是)。在你的情况下,它希望能自动找到最佳数量的簇,并且你可以实际可视化它。

你可以找到一个非常不错的python包叫做somoclu,它已经实现了这个算法,并且可以简单地显示结果。除此之外,你可以去R. Here你可以找到一个博客文章的教程,和Cran包手册的SOM。

0

K均值是一个随机算法,它将得到卡在当地最小值

由于存在这些问题,通常运行k-means几次,并用最小二乘法保留结果,即,找到最好的局部最小值。