【问题标题】:Join neighbour cluster centroids Matlab加入邻居集群质心 Matlab
【发布时间】:2013-08-05 19:34:30
【问题描述】:

我已经使用 K-means 将数据聚类到 8 个不同的聚类中,使用这个 [X,C] = kmeans(XX, 8],这意味着我有 8 个质心,它们的位置存储在 C“下面的 X Y Z 列中显示的示例”中。我想将 8 个质心连接在一起,其中只有彼此靠近的集群的质心连接“彼此之间有边界”,而彼此不接近的集群的质心没有连接。所以如果有人可以请建议?

    C=
    -0.214560757496055  0.208243029984219   1.27200000000000
    -0.170247238295634  0.399735227073470   1.14600000000000
    -0.0129089952656497 0.410839908819919   1.22700000000000
    -0.244488865509381  0.0526915658425390  1.20200000000000
    -0.391215149921094  0.258634052253200   1.23600000000000
    -0.258542872172541  0.307469752761704   1.18100000000000
    -0.346834999123269  0.413056286165176   1.16100000000000
    -0.0885709275819744 0.278674381904261   1.23200000000000

我已经按照建议使用了一些集群的质心,但是在非相邻集群的质心之间构建了一些不需要的连接“例如,集群顶部的质心与底部集群的质心”,如图所示图,所以如果你可以请指教

X=C(:,1);
Y=C(:,2);
Z=C(:,3);
dt      = DelaunayTri(X,Y,Z); 
tetramesh(dt,'FaceColor', 'none');

【问题讨论】:

标签: matlab cluster-analysis k-means


【解决方案1】:

正如@Dan 评论的那样,您正在寻找 Delaunay 三角剖分,它是 Voronoi 细胞的对偶。

更多详情请见https://en.wikipedia.org/wiki/Delaunay_triangulation

图片版权信息:https://en.wikipedia.org/wiki/File:Delaunay_Voronoi.png

黑点是集群的“中心”。黑线是 Delaunay 三角剖分(这可能是您正在寻找的),而红线和点是 Voronoi 图。计算 Voronoi digaram 的常用方法实际上是首先执行 Deleaunay 三角剖分,然后与附近边的正交相交。

【讨论】:

  • 我已经更新了问题,所以如果你可以请检查一下,非常感谢
  • 计算的三角剖分或您使用它的方式似乎存在错误。 freeBoundary 似乎不合适;你实际上想要所有的三角形边。
  • 我已经更新了问题,现在的问题是在非相邻集群的质心之间构建了一些不需要的连接“例如,集群顶部的质心与底部集群的质心” ,你能指教一下吗?
  • 我相信鉴于您的数据集的 3D 特性,这样的边缘数量是可以预料的。旋转图像时,边缘正确的原因应该很明显。例如,考虑底部的三个,棕色、黄色和青色。边缘棕青色在 2D 中可能看起来是多余的。但是黄色部分在前面更远,而棕色和青色在后面,“额外”的链接是连接后面的。同样,绿色位于所有其他“之上”,因此正确地连接到它们中的每一个。
  • 如果你想要更少的边,你可以在你的数据集上使用 PCA 将其减少到 2D,然后将你的质心投影到这个 2D 空间中,并在那里计算 Delaunay 三角剖分。也许dt = DelaunayTri(X,Y); 已经找到你想要的工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2013-03-27
  • 1970-01-01
  • 2022-10-31
  • 2012-12-21
  • 2011-02-08
  • 2012-10-29
相关资源
最近更新 更多