我有一个关于如何在matlab中使用轮廓函数的问题
如果我有我的相关矩阵X = 90x90和我的数据的集群成员数 ;说我有五个集群。这被定义为cidx,其长度为90x1,每个值被赋予1到5的数字。
我可以将相关矩阵和cidx传递给轮廓函数,并将度量指定为“相关性”,还是应该在我的返回矩阵中传递?
感谢您的帮助!
答案 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);