【发布时间】:2014-04-15 16:46:09
【问题描述】:
我有一个关于如何在matlab中使用剪影函数的问题
如果我有我的相关矩阵 X = 90x90 和我的数据的集群成员数 ;说我有五个集群。这被定义为长度为 90x1 的 cidx,每个值都分配有一个从 1 到 5 的数字。
我可以只将相关矩阵和 cidx 传递给轮廓函数并将度量指定为“相关”,还是应该传入我的返回矩阵?
感谢您的帮助!
【问题讨论】:
标签: matlab statistics
我有一个关于如何在matlab中使用剪影函数的问题
如果我有我的相关矩阵 X = 90x90 和我的数据的集群成员数 ;说我有五个集群。这被定义为长度为 90x1 的 cidx,每个值都分配有一个从 1 到 5 的数字。
我可以只将相关矩阵和 cidx 传递给轮廓函数并将度量指定为“相关”,还是应该传入我的返回矩阵?
感谢您的帮助!
【问题讨论】:
标签: matlab statistics
剪影用于确定聚类的质量。下面使用 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);
【讨论】:
首先,您需要制作集群。例如,matlab 中的 kmeans 函数会为您执行此操作。
cidx = kmeans(X,2,'distance','Euclidean');
根据 MATLAB:
IDX = kmeans(X,k) 对 n×p 数据矩阵 X 中的点进行分区 k 个簇。这种迭代分区最小化总和,超过 所有集群,点到集群质心的集群内总和 距离。 X的行对应点,列对应 变量。 kmeans 返回一个包含集群的 n×1 向量 IDX 每个点的索引。
所以这里 cidx 是 n-by-1 簇索引。 找到索引后,您可以将 X 和 cidx 传递给 silhouette 函数:
s = silhouette(X,cidx,'Euclidean')
s 是 n×1 向量中的轮廓值。
【讨论】: