如何建立共识矩阵?

时间:2015-05-11 02:48:04

标签: matlab cluster-analysis

我需要创建一个共识矩阵。假设我有一个矩阵A如下。

1 1 2 2 3 
1 2 2 2 3
1 1 2 3 3

每行代表一种聚类方法,每个值代表一个特定的聚类。例如,A(1,1)表示通过第一个聚类方法,第一个数据示例分配了第一组。通过使用这个矩阵,我需要创建一个矩阵,如下所示

1/3 2/3 0/3 0/3 0/3
2/3 1/3 1/3 1/3 0/3
0/3 1/3 1/3 2/3 0/3
0/3 1/3 2/3 1/3 1/3
0/3 0/3 0/3 0/3 1/3

在此矩阵C中,C(1,2)基于矩阵A创建。更明显地,组1中的A(1,1)和A(1,2),也是A(3,1)和A(3) ,2)在第1组中也是如此。所以,C(1,2)= 2/3。对角线固定为1/3。

1 个答案:

答案 0 :(得分:0)

您可以使用bsxfun来比较列

C=squeeze(sum(bsxfun(@eq, A,permute(A, [1 3 2]))));
C(logical(eye(size(C))))=1;
C = C/3;

您首先将3x5矩阵置换为3x1x5矩阵,然后使用bsxfun(@eq, ...比较原始矩阵的列,然后将两个不同行上的元素的位置相加通过使用sum(...,3)来获得1x5x5矩阵。现在使用挤压来摆脱单身尺寸。