我正在解决这个问题:
有一个3d二进制矩阵,我在matlab中使用kmeans算法进行聚类;
之后我得到一个值C,其中包含数组中这些簇的质心的坐标,例如:
C= 30.0000 15.0000 48.5000
100.2676 57.7382 80.7489
57.5000 85.0000 35.0000
27.5000 50.0000 69.5000
(4个质心:第一个带坐标(30,15,48,5
))
其中行代表每个质心的x,y
和z
坐标。
当我聚集另一个矩阵时,我得到第二个值,它还包含第二个质心的坐标。 现在我必须匹配具有最小距离的第一和第二聚类的质心,并创建一个输出,我可以看到哪些质心属于一起。
我用pdist(X)
尝试过,我得到坐标成对的距离,但我不能将它们匹配在一起..
如何解决这个问题,任何想法?
答案 0 :(得分:0)
pdist2
计算两组观测值之间的成对距离,而pdist
计算单个矩阵中所有观测值之间的成对距离。
pdist2
的文档指定了输出距离矩阵的正确语法和含义:
D = pdist2(X,Y)
返回包含欧几里德距离的矩阵D. 在mx-by-n数据矩阵X和中的每对观察之间 my-by-n数据矩阵Y. X和Y的行对应于观察, 列对应于变量。 D是一个mx-by-my矩阵,带有 (i,j)条目等于X和中观察i之间的距离 观察j在Y.
所以,你应该按如下方式使用它:
D = pdist2(C1, C2);
注1:如果您找到的功能几乎可以达到您的要求(即pdist
),那么查看本手册的See Also
部分通常很有用并检查其中一个是否有用。
答案 1 :(得分:0)
您应该更准确地定义什么是“匹配”:它应该是1对1还是1对多?
如果它是1对多(C1的几个质心可以与C2的相同质心匹配)那么使用最近邻居可以帮助see knnsearch
。
如果它是1对1,那么你必须先使用一些贪心算法来映射最近的质心(循环遍及pdist2
的结果)。
对于比赛的绘图,它实际上取决于数据的性质。 但是一种方便的方法是将PCA从3D转换为2D,然后简单地在质心之间绘制线条。