我如何在matlab中使用轮廓功能

时间:2014-03-11 20:56:47

标签: matlab statistics

我有一个关于如何在matlab中使用轮廓函数的问题

如果我有我的相关矩阵X = 90x90和我的数据的集群成员数 ;说我有五个集群。这被定义为cidx,其长度为90x1,每个值被赋予1到5的数字。

我可以将相关矩阵和cidx传递给轮廓函数,并将度量指定为“相关性”,还是应该在我的返回矩阵中传递?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

首先,您需要制作群集。例如,matlab中的 kmeans 函数可以为您完成此操作。

cidx = kmeans(X,2,'distance','Euclidean');

根据MATLAB:

  

IDX = kmeans(X,k) n-by-p 数据矩阵 X 中的点进行分区   进入 k 群集。这种迭代分区最小化了总和   所有集群,点到集群质心的集群内总和   距离。 X 的行对应于点,列对应于   变量。 kmeans 会返回包含群集的 n-by-1 向量 IDX   每个点的指数。

所以这里 cidx n-by-1 群集索引。 找到索引后,您可以将 X cidx 传递给剪影函数:

s = silhouette(X,cidx,'Euclidean')

s 是n-by-1向量中的轮廓值。

答案 1 :(得分:0)

Silhouette用于确定聚类的质量。下面使用100 * 3大小的矩阵说明此功能的工作方式。 示例 -

NofClusters=3;

numObservarations = 100;
dimensions = 3;
data = rand([numObservarations dimensions]);
numObservarations = length(data);

%% cluster
opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = kmeans(data, K, 'options',opts, ...
    'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);
%% plot data+clusters
figure, hold on
scatter3(data(:,1),data(:,2),data(:,3), 50, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')

%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);